2018-06-07 02:25:54 +00:00
/*
* UNPUBLISHED - - Rights reserved under the copyright laws of the
* United States . Use of a copyright notice is precautionary only and
* does not imply publication or disclosure .
*
* THIS DOCUMENTATION CONTAINS CONFIDENTIAL AND PROPRIETARY INFORMATION
* OF BLIZZARD ENTERTAINMENT . ANY DUPLICATION , MODIFICATION ,
* DISTRIBUTION , OR DISCLOSURE IS STRICTLY PROHIBITED WITHOUT THE PRIOR
* EXPRESS WRITTEN PERMISSION OF BLIZZARD ENTERTAINMENT .
*/
# include "../types.h"
int itemactive [ 127 ] ;
int uitemflag ;
int itemavail [ 127 ] ;
ItemStruct curruitem ;
ItemGetRecordStruct itemrecord [ 127 ] ;
ItemStruct item [ 128 ] ;
char itemhold [ 3 ] [ 3 ] ;
char byte_641234 [ 28 ] ; /* check if part of above */
int Item2Frm [ 35 ] ;
int UniqueItemFlag [ 128 ] ;
int numitems ;
int gnNumGetRecords ;
PLStruct PL_Prefix [ 84 ] =
{
{ " Tin " , IPL_TOHIT_CURSE , 6 , 10 , 3 , PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 1 , 0 , 0 , 0 , - 3 } ,
{ " Brass " , IPL_TOHIT_CURSE , 1 , 5 , 1 , PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 1 , 0 , 0 , 0 , - 2 } ,
{ " Bronze " , IPL_TOHIT , 1 , 5 , 1 , PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 1 , 1 , 100 , 500 , 2 } ,
{ " Iron " , IPL_TOHIT , 6 , 10 , 4 , PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 1 , 1 , 600 , 1000 , 3 } ,
{ " Steel " , IPL_TOHIT , 11 , 15 , 6 , PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 1 , 1 , 1100 , 1500 , 5 } ,
{ " Silver " , IPL_TOHIT , 16 , 20 , 9 , PLT_WEAP | PLT_BOW | PLT_MISC , 16 , 1 , 1 , 1600 , 2000 , 7 } ,
{ " Gold " , IPL_TOHIT , 21 , 30 , 12 , PLT_WEAP | PLT_BOW | PLT_MISC , 16 , 1 , 1 , 2100 , 3000 , 9 } ,
{ " Platinum " , IPL_TOHIT , 31 , 40 , 16 , PLT_WEAP | PLT_BOW , 16 , 1 , 1 , 3100 , 4000 , 11 } ,
{ " Mithril " , IPL_TOHIT , 41 , 60 , 20 , PLT_WEAP | PLT_BOW , 16 , 1 , 1 , 4100 , 6000 , 13 } ,
{ " Meteoric " , IPL_TOHIT , 61 , 80 , 23 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 6100 , 10000 , 15 } ,
{ " Weird " , IPL_TOHIT , 81 , 100 , 35 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 10100 , 14000 , 17 } ,
{ " Strange " , IPL_TOHIT , 101 , 150 , 60 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 14100 , 20000 , 20 } ,
{ " Useless " , IPL_DAMP_CURSE , 100 , 100 , 5 , PLT_WEAP | PLT_BOW , 0 , 1 , 0 , 0 , 0 , - 8 } ,
{ " Bent " , IPL_DAMP_CURSE , 50 , 75 , 3 , PLT_WEAP | PLT_BOW , 0 , 1 , 0 , 0 , 0 , - 4 } ,
{ " Weak " , IPL_DAMP_CURSE , 25 , 45 , 1 , PLT_WEAP | PLT_BOW , 0 , 1 , 0 , 0 , 0 , - 3 } ,
{ " Jagged " , IPL_DAMP , 20 , 35 , 4 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 250 , 450 , 3 } ,
{ " Deadly " , IPL_DAMP , 36 , 50 , 6 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 500 , 700 , 4 } ,
{ " Heavy " , IPL_DAMP , 51 , 65 , 9 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 750 , 950 , 5 } ,
{ " Vicious " , IPL_DAMP , 66 , 80 , 12 , PLT_WEAP | PLT_BOW , 1 , 1 , 1 , 1000 , 1450 , 8 } ,
{ " Brutal " , IPL_DAMP , 81 , 95 , 16 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 1500 , 1950 , 10 } ,
{ " Massive " , IPL_DAMP , 96 , 110 , 20 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 2000 , 2450 , 13 } ,
{ " Savage " , IPL_DAMP , 111 , 125 , 23 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 2500 , 3000 , 15 } ,
{ " Ruthless " , IPL_DAMP , 126 , 150 , 35 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 10100 , 15000 , 17 } ,
{ " Merciless " , IPL_DAMP , 151 , 175 , 60 , PLT_WEAP | PLT_BOW , 0 , 1 , 1 , 15000 , 20000 , 20 } ,
{ " Clumsy " , IPL_TOHIT_DAMP_CURSE , 50 , 75 , 5 , PLT_WEAP | PLT_STAFF | PLT_BOW , 0 , 1 , 0 , 0 , 0 , - 7 } ,
{ " Dull " , IPL_TOHIT_DAMP_CURSE , 25 , 45 , 1 , PLT_WEAP | PLT_STAFF | PLT_BOW , 0 , 1 , 0 , 0 , 0 , - 5 } ,
{ " Sharp " , IPL_TOHIT_DAMP , 20 , 35 , 1 , PLT_WEAP | PLT_STAFF | PLT_BOW , 0 , 1 , 0 , 350 , 950 , 5 } ,
{ " Fine " , IPL_TOHIT_DAMP , 36 , 50 , 6 , PLT_WEAP | PLT_STAFF | PLT_BOW , 0 , 1 , 1 , 1100 , 1700 , 7 } ,
{ " Warrior's " , IPL_TOHIT_DAMP , 51 , 65 , 10 , PLT_WEAP | PLT_STAFF | PLT_BOW , 0 , 1 , 1 , 1850 , 2450 , 13 } ,
{ " Soldier's " , IPL_TOHIT_DAMP , 66 , 80 , 15 , PLT_WEAP | PLT_STAFF , 0 , 1 , 1 , 2600 , 3950 , 17 } ,
{ " Lord's " , IPL_TOHIT_DAMP , 81 , 95 , 19 , PLT_WEAP | PLT_STAFF , 0 , 1 , 1 , 4100 , 5950 , 21 } ,
{ " Knight's " , IPL_TOHIT_DAMP , 96 , 110 , 23 , PLT_WEAP | PLT_STAFF , 0 , 1 , 1 , 6100 , 8450 , 26 } ,
{ " Master's " , IPL_TOHIT_DAMP , 111 , 125 , 28 , PLT_WEAP | PLT_STAFF , 0 , 1 , 1 , 8600 , 13000 , 30 } ,
{ " Champion's " , IPL_TOHIT_DAMP , 126 , 150 , 40 , PLT_WEAP | PLT_STAFF , 0 , 1 , 1 , 15200 , 24000 , 33 } ,
{ " King's " , IPL_TOHIT_DAMP , 151 , 175 , 28 , PLT_WEAP | PLT_STAFF , 0 , 1 , 1 , 24100 , 35000 , 38 } ,
{ " Vulnerable " , IPL_ACP_CURSE , 51 , 100 , 3 , PLT_ARMO | PLT_SHLD , 0 , 1 , 0 , 0 , 0 , - 3 } ,
{ " Rusted " , IPL_ACP_CURSE , 25 , 50 , 1 , PLT_ARMO | PLT_SHLD , 0 , 1 , 0 , 0 , 0 , - 2 } ,
{ " Fine " , IPL_ACP , 20 , 30 , 1 , PLT_ARMO | PLT_SHLD , 0 , 1 , 1 , 20 , 100 , 2 } ,
{ " Strong " , IPL_ACP , 31 , 40 , 3 , PLT_ARMO | PLT_SHLD , 0 , 1 , 1 , 120 , 200 , 3 } ,
{ " Grand " , IPL_ACP , 41 , 55 , 6 , PLT_ARMO | PLT_SHLD , 0 , 1 , 1 , 220 , 300 , 5 } ,
{ " Valiant " , IPL_ACP , 56 , 70 , 10 , PLT_ARMO | PLT_SHLD , 0 , 1 , 1 , 320 , 400 , 7 } ,
{ " Glorious " , IPL_ACP , 71 , 90 , 14 , PLT_ARMO | PLT_SHLD , 16 , 1 , 1 , 420 , 600 , 9 } ,
{ " Blessed " , IPL_ACP , 91 , 110 , 19 , PLT_ARMO | PLT_SHLD , 16 , 1 , 1 , 620 , 800 , 11 } ,
{ " Saintly " , IPL_ACP , 111 , 130 , 24 , PLT_ARMO | PLT_SHLD , 16 , 1 , 1 , 820 , 1200 , 13 } ,
{ " Awesome " , IPL_ACP , 131 , 150 , 28 , PLT_ARMO | PLT_SHLD , 16 , 1 , 1 , 1220 , 2000 , 15 } ,
{ " Holy " , IPL_ACP , 151 , 170 , 35 , PLT_ARMO | PLT_SHLD , 16 , 1 , 1 , 5200 , 6000 , 17 } ,
{ " Godly " , IPL_ACP , 171 , 200 , 60 , PLT_ARMO | PLT_SHLD , 16 , 1 , 1 , 6200 , 7000 , 20 } ,
{ " Red " , IPL_FIRERES , 10 , 20 , 4 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 500 , 1500 , 2 } ,
{ " Crimson " , IPL_FIRERES , 21 , 30 , 10 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 2100 , 3000 , 2 } ,
{ " Crimson " , IPL_FIRERES , 31 , 40 , 16 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 3100 , 4000 , 2 } ,
{ " Garnet " , IPL_FIRERES , 41 , 50 , 20 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 8200 , 12000 , 3 } ,
{ " Ruby " , IPL_FIRERES , 51 , 60 , 26 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 17100 , 20000 , 5 } ,
{ " Blue " , IPL_LIGHTRES , 10 , 20 , 4 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 500 , 1500 , 2 } ,
{ " Azure " , IPL_LIGHTRES , 21 , 30 , 10 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 2100 , 3000 , 2 } ,
{ " Lapis " , IPL_LIGHTRES , 31 , 40 , 16 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 3100 , 4000 , 2 } ,
{ " Cobalt " , IPL_LIGHTRES , 41 , 50 , 20 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 8200 , 12000 , 3 } ,
{ " Sapphire " , IPL_LIGHTRES , 51 , 60 , 26 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 17100 , 20000 , 5 } ,
{ " White " , IPL_MAGICRES , 10 , 20 , 4 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 500 , 1500 , 2 } ,
{ " Pearl " , IPL_MAGICRES , 21 , 30 , 10 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 2100 , 3000 , 2 } ,
{ " Ivory " , IPL_MAGICRES , 31 , 40 , 16 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 3100 , 4000 , 2 } ,
{ " Crystal " , IPL_MAGICRES , 41 , 50 , 20 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 8200 , 12000 , 3 } ,
{ " Diamond " , IPL_MAGICRES , 51 , 60 , 26 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 17100 , 20000 , 5 } ,
{ " Topaz " , IPL_ALLRES , 10 , 15 , 8 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 2000 , 5000 , 3 } ,
{ " Amber " , IPL_ALLRES , 16 , 20 , 12 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 7400 , 10000 , 3 } ,
{ " Jade " , IPL_ALLRES , 21 , 30 , 18 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 11000 , 15000 , 3 } ,
{ " Obsidian " , IPL_ALLRES , 31 , 40 , 24 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 24000 , 40000 , 4 } ,
{ " Emerald " , IPL_ALLRES , 41 , 50 , 31 , PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW , 0 , 0 , 1 , 61000 , 75000 , 7 } ,
{ " Hyena's " , IPL_MANA_CURSE , 11 , 25 , 4 , PLT_STAFF | PLT_MISC , 0 , 0 , 0 , 100 , 1000 , - 2 } ,
{ " Frog's " , IPL_MANA_CURSE , 1 , 10 , 1 , PLT_STAFF | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " Spider's " , IPL_MANA , 10 , 15 , 1 , PLT_STAFF | PLT_MISC , 1 , 0 , 1 , 500 , 1000 , 2 } ,
{ " Raven's " , IPL_MANA , 15 , 20 , 5 , PLT_STAFF | PLT_MISC , 0 , 0 , 1 , 1100 , 2000 , 3 } ,
{ " Snake's " , IPL_MANA , 21 , 30 , 9 , PLT_STAFF | PLT_MISC , 0 , 0 , 1 , 2100 , 4000 , 5 } ,
{ " Serpent's " , IPL_MANA , 30 , 40 , 15 , PLT_STAFF | PLT_MISC , 0 , 0 , 1 , 4100 , 6000 , 7 } ,
{ " Drake's " , IPL_MANA , 41 , 50 , 21 , PLT_STAFF | PLT_MISC , 0 , 0 , 1 , 6100 , 10000 , 9 } ,
{ " Dragon's " , IPL_MANA , 51 , 60 , 27 , PLT_STAFF | PLT_MISC , 0 , 0 , 1 , 10100 , 15000 , 11 } ,
{ " Wyrm's " , IPL_MANA , 61 , 80 , 35 , PLT_STAFF , 0 , 0 , 1 , 15100 , 19000 , 12 } ,
{ " Hydra's " , IPL_MANA , 81 , 100 , 60 , PLT_STAFF , 0 , 0 , 1 , 19100 , 30000 , 13 } ,
{ " Angel's " , IPL_SPLLVLADD , 1 , 1 , 15 , PLT_STAFF , 16 , 0 , 1 , 25000 , 25000 , 2 } ,
{ " Arch-Angel's " , IPL_SPLLVLADD , 2 , 2 , 25 , PLT_STAFF , 16 , 0 , 1 , 50000 , 50000 , 3 } ,
{ " Plentiful " , IPL_CHARGES , 2 , 2 , 4 , PLT_STAFF , 0 , 0 , 1 , 2000 , 2000 , 2 } ,
{ " Bountiful " , IPL_CHARGES , 3 , 3 , 9 , PLT_STAFF , 0 , 0 , 1 , 3000 , 3000 , 3 } ,
{ " Flaming " , IPL_FIREDAM , 1 , 10 , 7 , PLT_WEAP | PLT_STAFF , 0 , 0 , 1 , 5000 , 5000 , 2 } ,
{ " Lightning " , IPL_LIGHTDAM , 2 , 20 , 18 , PLT_WEAP | PLT_STAFF , 0 , 0 , 1 , 10000 , 10000 , 2 } ,
{ & empty_string , IPL_INVALID , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
} ;
PLStruct PL_Suffix [ 96 ] =
{
{ " quality " , IPL_DAMMOD , 1 , 2 , 2 , PLT_WEAP | PLT_BOW , 0 , 0 , 1 , 100 , 200 , 2 } ,
{ " maiming " , IPL_DAMMOD , 3 , 5 , 7 , PLT_WEAP | PLT_BOW , 0 , 0 , 1 , 1300 , 1500 , 3 } ,
{ " slaying " , IPL_DAMMOD , 6 , 8 , 15 , PLT_WEAP , 0 , 0 , 1 , 2600 , 3000 , 5 } ,
{ " gore " , IPL_DAMMOD , 9 , 12 , 25 , PLT_WEAP , 0 , 0 , 1 , 4100 , 5000 , 8 } ,
{ " carnage " , IPL_DAMMOD , 13 , 16 , 35 , PLT_WEAP , 0 , 0 , 1 , 5100 , 10000 , 10 } ,
{ " slaughter " , IPL_DAMMOD , 17 , 20 , 60 , PLT_WEAP , 0 , 0 , 1 , 10100 , 15000 , 13 } ,
{ " pain " , IPL_GETHIT , 2 , 4 , 4 , PLT_ARMO | PLT_SHLD | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 4 } , // cursed
{ " tears " , IPL_GETHIT , 1 , 1 , 2 , PLT_ARMO | PLT_SHLD | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " health " , IPL_GETHIT_CURSE , 1 , 1 , 2 , PLT_ARMO | PLT_SHLD | PLT_MISC , 16 , 0 , 1 , 200 , 200 , 2 } , // not cursed
{ " protection " , IPL_GETHIT_CURSE , 2 , 2 , 6 , PLT_ARMO | PLT_SHLD , 16 , 0 , 1 , 400 , 800 , 4 } ,
{ " absorption " , IPL_GETHIT_CURSE , 3 , 3 , 12 , PLT_ARMO | PLT_SHLD , 16 , 0 , 1 , 1001 , 2500 , 10 } ,
{ " deflection " , IPL_GETHIT_CURSE , 4 , 4 , 20 , PLT_ARMO , 16 , 0 , 1 , 2500 , 6500 , 15 } ,
{ " osmosis " , IPL_GETHIT_CURSE , 5 , 6 , 50 , PLT_ARMO , 16 , 0 , 1 , 7500 , 10000 , 20 } ,
{ " frailty " , IPL_STR_CURSE , 6 , 10 , 3 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 3 } ,
{ " weakness " , IPL_STR_CURSE , 1 , 5 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " strength " , IPL_STR , 1 , 5 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 200 , 1000 , 2 } ,
{ " might " , IPL_STR , 6 , 10 , 5 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 1200 , 2000 , 3 } ,
{ " power " , IPL_STR , 11 , 15 , 11 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 2200 , 3000 , 4 } ,
{ " giants " , IPL_STR , 16 , 20 , 17 , PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 3200 , 5000 , 7 } ,
{ " titans " , IPL_STR , 21 , 30 , 23 , PLT_WEAP | PLT_MISC , 0 , 0 , 1 , 5200 , 10000 , 10 } ,
{ " paralysis " , IPL_DEX_CURSE , 6 , 10 , 3 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 3 } ,
{ " atrophy " , IPL_DEX_CURSE , 1 , 5 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " dexterity " , IPL_DEX , 1 , 5 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 200 , 1000 , 2 } ,
{ " skill " , IPL_DEX , 6 , 10 , 5 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 1200 , 2000 , 3 } ,
{ " accuracy " , IPL_DEX , 11 , 15 , 11 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 2200 , 3000 , 4 } ,
{ " precision " , IPL_DEX , 16 , 20 , 17 , PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 3200 , 5000 , 7 } ,
{ " perfection " , IPL_DEX , 21 , 30 , 23 , PLT_BOW | PLT_MISC , 0 , 0 , 1 , 5200 , 10000 , 10 } ,
{ " the fool " , IPL_MAG_CURSE , 6 , 10 , 3 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 3 } ,
{ " dyslexia " , IPL_MAG_CURSE , 1 , 5 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " magic " , IPL_MAG , 1 , 5 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 200 , 1000 , 2 } ,
{ " the mind " , IPL_MAG , 6 , 10 , 5 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 1200 , 2000 , 3 } ,
{ " brilliance " , IPL_MAG , 11 , 15 , 11 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 2200 , 3000 , 4 } ,
{ " sorcery " , IPL_MAG , 16 , 20 , 17 , PLT_ARMO | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 3200 , 5000 , 7 } ,
{ " wizardry " , IPL_MAG , 21 , 30 , 23 , PLT_STAFF | PLT_MISC , 0 , 0 , 1 , 5200 , 10000 , 10 } ,
{ " illness " , IPL_VIT_CURSE , 6 , 10 , 3 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 3 } ,
{ " disease " , IPL_VIT_CURSE , 1 , 5 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " vitality " , IPL_VIT , 1 , 5 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 16 , 0 , 1 , 200 , 1000 , 2 } ,
{ " zest " , IPL_VIT , 6 , 10 , 5 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 16 , 0 , 1 , 1200 , 2000 , 3 } ,
{ " vim " , IPL_VIT , 11 , 15 , 11 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 16 , 0 , 1 , 2200 , 3000 , 4 } ,
{ " vigor " , IPL_VIT , 16 , 20 , 17 , PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC , 16 , 0 , 1 , 3200 , 5000 , 7 } ,
{ " life " , IPL_VIT , 21 , 30 , 23 , PLT_MISC , 16 , 0 , 1 , 5200 , 10000 , 10 } ,
{ " trouble " , IPL_ATTRIBS_CURSE , 6 , 10 , 12 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 10 } ,
{ " the pit " , IPL_ATTRIBS_CURSE , 1 , 5 , 5 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 5 } ,
{ " the sky " , IPL_ATTRIBS , 1 , 3 , 5 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 800 , 4000 , 5 } ,
{ " the moon " , IPL_ATTRIBS , 4 , 7 , 11 , PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 4800 , 8000 , 10 } ,
{ " the stars " , IPL_ATTRIBS , 8 , 11 , 17 , PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 8800 , 12000 , 15 } ,
{ " the heavens " , IPL_ATTRIBS , 12 , 15 , 25 , PLT_WEAP | PLT_BOW | PLT_MISC , 0 , 0 , 1 , 12800 , 20000 , 20 } ,
{ " the zodiac " , IPL_ATTRIBS , 16 , 20 , 30 , PLT_MISC , 0 , 0 , 1 , 20800 , 40000 , 30 } ,
{ " the vulture " , IPL_LIFE_CURSE , 11 , 25 , 4 , PLT_ARMO | PLT_SHLD | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 4 } ,
{ " the jackal " , IPL_LIFE_CURSE , 1 , 10 , 1 , PLT_ARMO | PLT_SHLD | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " the fox " , IPL_LIFE , 10 , 15 , 1 , PLT_ARMO | PLT_SHLD | PLT_MISC , 0 , 0 , 1 , 100 , 1000 , 2 } ,
{ " the jaguar " , IPL_LIFE , 16 , 20 , 5 , PLT_ARMO | PLT_SHLD | PLT_MISC , 0 , 0 , 1 , 1100 , 2000 , 3 } ,
{ " the eagle " , IPL_LIFE , 21 , 30 , 9 , PLT_ARMO | PLT_SHLD | PLT_MISC , 0 , 0 , 1 , 2100 , 4000 , 5 } ,
{ " the wolf " , IPL_LIFE , 30 , 40 , 15 , PLT_ARMO | PLT_SHLD | PLT_MISC , 0 , 0 , 1 , 4100 , 6000 , 7 } ,
{ " the tiger " , IPL_LIFE , 41 , 50 , 21 , PLT_ARMO | PLT_SHLD | PLT_MISC , 0 , 0 , 1 , 6100 , 10000 , 9 } ,
{ " the lion " , IPL_LIFE , 51 , 60 , 27 , PLT_ARMO | PLT_MISC , 0 , 0 , 1 , 10100 , 15000 , 11 } ,
{ " the mammoth " , IPL_LIFE , 61 , 80 , 35 , PLT_ARMO , 0 , 0 , 1 , 15100 , 19000 , 12 } ,
{ " the whale " , IPL_LIFE , 81 , 100 , 60 , PLT_ARMO , 0 , 0 , 1 , 19100 , 30000 , 13 } ,
{ " fragility " , IPL_DUR_CURSE , 100 , 100 , 3 , PLT_ARMO | PLT_SHLD | PLT_WEAP , 1 , 0 , 0 , 0 , 0 , - 4 } ,
{ " brittleness " , IPL_DUR_CURSE , 26 , 75 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " sturdiness " , IPL_DUR , 26 , 75 , 1 , PLT_ARMO | PLT_SHLD | PLT_WEAP , 0 , 0 , 1 , 100 , 100 , 2 } ,
{ " craftsmanship " , IPL_DUR , 51 , 100 , 6 , PLT_ARMO | PLT_SHLD | PLT_WEAP , 0 , 0 , 1 , 200 , 200 , 2 } ,
{ " structure " , IPL_DUR , 101 , 200 , 12 , PLT_ARMO | PLT_SHLD | PLT_WEAP , 0 , 0 , 1 , 300 , 300 , 2 } ,
{ " the ages " , IPL_INDESTRUCTIBLE , 0 , 0 , 25 , PLT_ARMO | PLT_SHLD | PLT_WEAP , 0 , 0 , 1 , 600 , 600 , 5 } ,
{ " the dark " , IPL_LIGHT_CURSE , 4 , 4 , 6 , PLT_ARMO | PLT_WEAP | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 3 } ,
{ " the night " , IPL_LIGHT_CURSE , 2 , 2 , 3 , PLT_ARMO | PLT_WEAP | PLT_MISC , 1 , 0 , 0 , 0 , 0 , - 2 } ,
{ " light " , IPL_LIGHT , 2 , 2 , 4 , PLT_ARMO | PLT_WEAP | PLT_MISC , 16 , 0 , 1 , 750 , 750 , 2 } ,
{ " radiance " , IPL_LIGHT , 4 , 4 , 8 , PLT_ARMO | PLT_WEAP | PLT_MISC , 16 , 0 , 1 , 1500 , 1500 , 3 } ,
{ " flame " , IPL_FIRE_ARROWS , 1 , 3 , 1 , PLT_BOW , 0 , 0 , 1 , 2000 , 2000 , 2 } ,
{ " fire " , IPL_FIRE_ARROWS , 1 , 6 , 11 , PLT_BOW , 0 , 0 , 1 , 4000 , 4000 , 4 } ,
{ " burning " , IPL_FIRE_ARROWS , 1 , 16 , 35 , PLT_BOW , 0 , 0 , 1 , 6000 , 6000 , 6 } ,
{ " shock " , IPL_LIGHT_ARROWS , 1 , 6 , 13 , PLT_BOW , 0 , 0 , 1 , 6000 , 6000 , 2 } ,
{ " lightning " , IPL_LIGHT_ARROWS , 1 , 10 , 21 , PLT_BOW , 0 , 0 , 1 , 8000 , 8000 , 4 } ,
{ " thunder " , IPL_LIGHT_ARROWS , 1 , 20 , 60 , PLT_BOW , 0 , 0 , 1 , 12000 , 12000 , 6 } ,
{ " many " , IPL_DUR , 100 , 100 , 3 , PLT_BOW , 0 , 0 , 1 , 750 , 750 , 2 } ,
{ " plenty " , IPL_DUR , 200 , 200 , 7 , PLT_BOW , 0 , 0 , 1 , 1500 , 1500 , 3 } ,
{ " thorns " , IPL_THORNS , 1 , 3 , 1 , PLT_ARMO | PLT_SHLD , 0 , 0 , 1 , 500 , 500 , 2 } ,
{ " corruption " , IPL_NOMANA , 0 , 0 , 5 , PLT_ARMO | PLT_SHLD | PLT_WEAP , 1 , 0 , 0 , - 1000 , - 1000 , 2 } ,
{ " thieves " , IPL_ABSHALFTRAP , 0 , 0 , 11 , PLT_ARMO | PLT_SHLD | PLT_MISC , 0 , 0 , 1 , 1500 , 1500 , 2 } ,
{ " the bear " , IPL_KNOCKBACK , 0 , 0 , 5 , PLT_WEAP | PLT_STAFF | PLT_BOW , 1 , 0 , 1 , 750 , 750 , 2 } ,
{ " the bat " , IPL_STEALMANA , 3 , 3 , 8 , PLT_WEAP , 0 , 0 , 1 , 7500 , 7500 , 3 } ,
{ " vampires " , IPL_STEALMANA , 5 , 5 , 19 , PLT_WEAP , 0 , 0 , 1 , 15000 , 15000 , 3 } ,
{ " the leech " , IPL_STEALLIFE , 3 , 3 , 8 , PLT_WEAP , 0 , 0 , 1 , 7500 , 7500 , 3 } ,
{ " blood " , IPL_STEALLIFE , 5 , 5 , 19 , PLT_WEAP , 0 , 0 , 1 , 15000 , 15000 , 3 } ,
{ " piercing " , IPL_TARGAC , 2 , 6 , 1 , PLT_WEAP | PLT_BOW , 0 , 0 , 1 , 1000 , 1000 , 3 } ,
{ " puncturing " , IPL_TARGAC , 4 , 12 , 9 , PLT_WEAP | PLT_BOW , 0 , 0 , 1 , 2000 , 2000 , 6 } ,
{ " bashing " , IPL_TARGAC , 8 , 24 , 17 , PLT_WEAP , 0 , 0 , 1 , 4000 , 4000 , 12 } ,
{ " readiness " , IPL_FASTATTACK , 1 , 1 , 1 , PLT_WEAP | PLT_STAFF | PLT_BOW , 0 , 0 , 1 , 2000 , 2000 , 2 } ,
{ " swiftness " , IPL_FASTATTACK , 2 , 2 , 10 , PLT_WEAP | PLT_STAFF | PLT_BOW , 0 , 0 , 1 , 4000 , 4000 , 4 } ,
{ " speed " , IPL_FASTATTACK , 3 , 3 , 19 , PLT_WEAP | PLT_STAFF , 0 , 0 , 1 , 8000 , 8000 , 8 } ,
{ " haste " , IPL_FASTATTACK , 4 , 4 , 27 , PLT_WEAP | PLT_STAFF , 0 , 0 , 1 , 16000 , 16000 , 16 } ,
{ " balance " , IPL_FASTRECOVER , 1 , 1 , 1 , PLT_ARMO | PLT_MISC , 0 , 0 , 1 , 2000 , 2000 , 2 } ,
{ " stability " , IPL_FASTRECOVER , 2 , 2 , 10 , PLT_ARMO | PLT_MISC , 0 , 0 , 1 , 4000 , 4000 , 4 } ,
{ " harmony " , IPL_FASTRECOVER , 3 , 3 , 20 , PLT_ARMO | PLT_MISC , 0 , 0 , 1 , 8000 , 8000 , 8 } ,
{ " blocking " , IPL_FASTBLOCK , 1 , 1 , 5 , PLT_SHLD , 0 , 0 , 1 , 4000 , 4000 , 4 } ,
{ & empty_string , IPL_INVALID , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }
} ;
UItemStruct UniqueItemList [ 91 ] =
{
{ " The Butcher's Cleaver " , UITYPE_CLEAVER , 1u , 3u , 3650 , IPL_STR , 10 , 10 , IPL_SETDAM , 4 , 24 , IPL_SETDUR , 10 , 10 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Undead Crown " , UITYPE_SKCROWN , 1u , 3u , 16650 , IPL_RNDSTEALLIFE , 0 , 0 , IPL_SETAC , 8 , 8 , IPL_INVCURS , 77 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Empyrean Band " , UITYPE_INFRARING , 1u , 4u , 8000 , IPL_ATTRIBS , 2 , 2 , IPL_LIGHT , 2 , 2 , IPL_FASTRECOVER , 1 , 1 , IPL_ABSHALFTRAP , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Optic Amulet " , UITYPE_OPTAMULET , 1u , 5u , 9750 , IPL_LIGHT , 2 , 2 , IPL_LIGHTRES , 20 , 20 , IPL_GETHIT_CURSE , 1 , 1 , IPL_MAG , 5 , 5 , IPL_INVCURS , 44 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Ring of Truth " , UITYPE_TRING , 1u , 4u , 9100 , IPL_LIFE , 10 , 10 , IPL_GETHIT_CURSE , 1 , 1 , IPL_ALLRES , 10 , 10 , IPL_INVCURS , 10 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Harlequin Crest " , UITYPE_HARCREST , 1u , 6u , 4000 , IPL_AC_CURSE , 3 , 3 , IPL_GETHIT_CURSE , 1 , 1 , IPL_ATTRIBS , 2 , 2 , IPL_LIFE , 7 , 7 , IPL_MANA , 7 , 7 , IPL_INVCURS , 81 , 0 } ,
{ " Veil of Steel " , UITYPE_STEELVEIL , 1u , 6u , 63800 , IPL_ALLRES , 50 , 50 , IPL_LIGHT_CURSE , 2 , 2 , IPL_ACP , 60 , 60 , IPL_MANA_CURSE , 30 , 30 , IPL_STR , 15 , 15 , IPL_VIT , 15 , 15 } ,
{ " Arkaine's Valor " , UITYPE_ARMOFVAL , 1u , 4u , 42000 , IPL_SETAC , 25 , 25 , IPL_VIT , 10 , 10 , IPL_GETHIT_CURSE , 3 , 3 , IPL_FASTRECOVER , 3 , 3 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Griswold's Edge " , UITYPE_GRISWOLD , 1u , 6u , 42000 , IPL_FIREDAM , 1 , 10 , IPL_TOHIT , 25 , 25 , IPL_FASTATTACK , 2 , 2 , IPL_KNOCKBACK , 0 , 0 , IPL_MANA , 20 , 20 , IPL_LIFE_CURSE , 20 , 20 } ,
{ " Lightforge " , UITYPE_MACE , 1u , 6u , 26675 , IPL_LIGHT , 4 , 4 , IPL_DAMP , 150 , 150 , IPL_TOHIT , 25 , 25 , IPL_FIREDAM , 10 , 20 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_ATTRIBS , 8 , 8 } ,
{ " The Rift Bow " , UITYPE_SHORTBOW , 1u , 3u , 1800 , IPL_RNDARROWVEL , 0 , 0 , IPL_DAMMOD , 2 , 2 , IPL_DEX_CURSE , 3 , 3 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Needler " , UITYPE_SHORTBOW , 2u , 4u , 8900 , IPL_TOHIT , 50 , 50 , IPL_SETDAM , 1 , 3 , IPL_FASTATTACK , 2 , 2 , IPL_INVCURS , 158 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Celestial Bow " , UITYPE_LONGBOW , 2u , 4u , 1200 , IPL_NOMINSTR , 0 , 0 , IPL_DAMMOD , 2 , 2 , IPL_SETAC , 5 , 5 , IPL_INVCURS , 133 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Deadly Hunter " , UITYPE_COMPBOW , 3u , 4u , 8750 , IPL_3XDAMVDEM , 10 , 10 , IPL_TOHIT , 20 , 20 , IPL_MAG_CURSE , 5 , 5 , IPL_INVCURS , 108 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Bow of the Dead " , UITYPE_COMPBOW , 5u , 6u , 2500 , IPL_TOHIT , 10 , 10 , IPL_DEX , 4 , 4 , IPL_VIT_CURSE , 3 , 3 , IPL_LIGHT_CURSE , 2 , 2 , IPL_SETDUR , 30 , 30 , IPL_INVCURS , 108 , 0 } ,
{ " The Blackoak Bow " , UITYPE_LONGBOW , 5u , 4u , 2500 , IPL_DEX , 10 , 10 , IPL_VIT_CURSE , 10 , 10 , IPL_DAMP , 50 , 50 , IPL_LIGHT_CURSE , 1 , 1 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Flamedart " , UITYPE_HUNTBOW , 10u , 4u , 14250 , IPL_FIRE_ARROWS , 0 , 0 , IPL_FIREDAM , 1 , 6 , IPL_TOHIT , 20 , 20 , IPL_FIRERES , 40 , 40 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Fleshstinger " , UITYPE_LONGBOW , 13u , 4u , 16500 , IPL_DEX , 15 , 15 , IPL_TOHIT , 40 , 40 , IPL_DAMP , 80 , 80 , IPL_DUR , 6 , 6 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Windforce " , UITYPE_WARBOW , 17u , 4u , 37750 , IPL_STR , 5 , 5 , IPL_DAMP , 200 , 200 , IPL_KNOCKBACK , 0 , 0 , IPL_INVCURS , 164 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Eaglehorn " , UITYPE_BATTLEBOW , 26u , 5u , 42500 , IPL_DEX , 20 , 20 , IPL_TOHIT , 50 , 50 , IPL_DAMP , 100 , 100 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_INVCURS , 108 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Gonnagal's Dirk " , UITYPE_DAGGER , 1u , 5u , 7040 , IPL_DEX_CURSE , 5 , 5 , IPL_DAMMOD , 4 , 4 , IPL_FASTATTACK , 2 , 2 , IPL_FIRERES , 25 , 25 , IPL_INVCURS , 54 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Defender " , UITYPE_SABRE , 1u , 3u , 2000 , IPL_SETAC , 5 , 5 , IPL_VIT , 5 , 5 , IPL_TOHIT_CURSE , 5 , 5 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Gryphons Claw " , UITYPE_FALCHION , 1u , 4u , 1000 , IPL_DAMP , 100 , 100 , IPL_MAG_CURSE , 2 , 2 , IPL_DEX_CURSE , 5 , 5 , IPL_INVCURS , 68 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Black Razor " , UITYPE_DAGGER , 1u , 4u , 2000 , IPL_DAMP , 150 , 150 , IPL_VIT , 2 , 2 , IPL_SETDUR , 5 , 5 , IPL_INVCURS , 53 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Gibbous Moon " , UITYPE_BROADSWR , 2u , 4u , 6660 , IPL_ATTRIBS , 2 , 2 , IPL_DAMP , 25 , 25 , IPL_MANA , 15 , 15 , IPL_LIGHT_CURSE , 3 , 3 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Ice Shank " , UITYPE_LONGSWR , 3u , 3u , 5250 , IPL_FIRERES , 40 , 40 , IPL_SETDUR , 15 , 15 , IPL_STR , 5 , 10 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Executioner's Blade " , UITYPE_FALCHION , 3u , 5u , 7080 , IPL_DAMP , 150 , 150 , IPL_LIFE_CURSE , 10 , 10 , IPL_LIGHT_CURSE , 1 , 1 , IPL_DUR , 200 , 200 , IPL_INVCURS , 58 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Bonesaw " , UITYPE_CLAYMORE , 6u , 6u , 4400 , IPL_DAMMOD , 10 , 10 , IPL_STR , 10 , 10 , IPL_MAG_CURSE , 5 , 5 , IPL_DEX_CURSE , 5 , 5 , IPL_LIFE , 10 , 10 , IPL_MANA_CURSE , 10 , 10 } ,
{ " Shadowhawk " , UITYPE_BROADSWR , 8u , 4u , 13750 , IPL_LIGHT_CURSE , 2 , 2 , IPL_STEALLIFE , 5 , 5 , IPL_TOHIT , 15 , 15 , IPL_ALLRES , 5 , 5 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Wizardspike " , UITYPE_DAGGER , 11u , 5u , 12920 , IPL_MAG , 15 , 15 , IPL_MANA , 35 , 35 , IPL_TOHIT , 25 , 25 , IPL_ALLRES , 15 , 15 , IPL_INVCURS , 50 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Lightsabre " , UITYPE_SABRE , 13u , 4u , 19150 , IPL_LIGHT , 2 , 2 , IPL_LIGHTDAM , 1 , 10 , IPL_TOHIT , 20 , 20 , IPL_LIGHTRES , 50 , 50 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Falcon's Talon " , UITYPE_SCIMITAR , 15u , 5u , 7867 , IPL_FASTATTACK , 4 , 4 , IPL_TOHIT , 20 , 20 , IPL_DAMP_CURSE , 33 , 33 , IPL_DEX , 10 , 10 , IPL_INVCURS , 68 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Inferno " , UITYPE_LONGSWR , 17u , 4u , 34600 , IPL_FIREDAM , 2 , 12 , IPL_LIGHT , 3 , 3 , IPL_MANA , 20 , 20 , IPL_FIRERES , 80 , 80 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Doombringer " , UITYPE_BASTARDSWR , 19u , 5u , 18250 , IPL_TOHIT , 25 , 25 , IPL_DAMP , 250 , 250 , IPL_ATTRIBS_CURSE , 5 , 5 , IPL_LIFE_CURSE , 25 , 25 , IPL_LIGHT_CURSE , 2 , 2 , IPL_TOHIT , 0 , 0 } ,
{ " The Grizzly " , UITYPE_TWOHANDSWR , 23u , 6u , 50000 , IPL_STR , 20 , 20 , IPL_VIT_CURSE , 5 , 5 , IPL_DAMP , 200 , 200 , IPL_KNOCKBACK , 0 , 0 , IPL_DUR , 100 , 100 , IPL_INVCURS , 160 , 0 } ,
{ " The Grandfather " , UITYPE_GREATSWR , 27u , 6u , 119800 , IPL_ONEHAND , 0 , 0 , IPL_ATTRIBS , 5 , 5 , IPL_TOHIT , 20 , 20 , IPL_DAMP , 70 , 70 , IPL_LIFE , 20 , 20 , IPL_INVCURS , 161 , 0 } ,
{ " The Mangler " , UITYPE_LARGEAXE , 2u , 5u , 2850 , IPL_DAMP , 200 , 200 , IPL_DEX_CURSE , 5 , 5 , IPL_MAG_CURSE , 5 , 5 , IPL_MANA_CURSE , 10 , 10 , IPL_INVCURS , 144 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Sharp Beak " , UITYPE_LARGEAXE , 2u , 4u , 2850 , IPL_LIFE , 20 , 20 , IPL_MAG_CURSE , 10 , 10 , IPL_MANA_CURSE , 10 , 10 , IPL_INVCURS , 143 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " BloodSlayer " , UITYPE_BROADAXE , 3u , 5u , 2500 , IPL_DAMP , 100 , 100 , IPL_3XDAMVDEM , 50 , 50 , IPL_ATTRIBS_CURSE , 5 , 5 , IPL_SPLLVLADD , - 1 , - 1 , IPL_INVCURS , 144 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Celestial Axe " , UITYPE_BATTLEAXE , 4u , 4u , 14100 , IPL_NOMINSTR , 0 , 0 , IPL_TOHIT , 15 , 15 , IPL_LIFE , 15 , 15 , IPL_STR_CURSE , 15 , 15 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Wicked Axe " , UITYPE_LARGEAXE , 5u , 6u , 31150 , IPL_TOHIT , 30 , 30 , IPL_DEX , 10 , 10 , IPL_VIT_CURSE , 10 , 10 , IPL_GETHIT_CURSE , 1 , 6 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_INVCURS , 143 , 0 } ,
{ " Stonecleaver " , UITYPE_BROADAXE , 7u , 5u , 23900 , IPL_LIFE , 30 , 30 , IPL_TOHIT , 20 , 20 , IPL_DAMP , 50 , 50 , IPL_LIGHTRES , 40 , 40 , IPL_INVCURS , 104 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Aguinara's Hatchet " , UITYPE_SMALLAXE , 12u , 3u , 24800 , IPL_SPLLVLADD , 1 , 1 , IPL_MAG , 10 , 10 , IPL_MAGICRES , 80 , 80 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Hellslayer " , UITYPE_BATTLEAXE , 15u , 5u , 26200 , IPL_STR , 8 , 8 , IPL_VIT , 8 , 8 , IPL_DAMP , 100 , 100 , IPL_LIFE , 25 , 25 , IPL_MANA_CURSE , 25 , 25 , IPL_TOHIT , 0 , 0 } ,
{ " Messerschmidt's Reaver " , UITYPE_GREATAXE , 25u , 6u , 58000 , IPL_DAMP , 200 , 200 , IPL_DAMMOD , 15 , 15 , IPL_ATTRIBS , 5 , 5 , IPL_LIFE_CURSE , 50 , 50 , IPL_FIREDAM , 2 , 12 , IPL_INVCURS , 163 , 0 } ,
{ " Crackrust " , UITYPE_MACE , 1u , 5u , 11375 , IPL_ATTRIBS , 2 , 2 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_ALLRES , 15 , 15 , IPL_DAMP , 50 , 50 , IPL_SPLLVLADD , - 1 , - 1 , IPL_TOHIT , 0 , 0 } ,
{ " Hammer of Jholm " , UITYPE_MAUL , 1u , 4u , 8700 , IPL_DAMP , 4 , 10 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_STR , 3 , 3 , IPL_TOHIT , 15 , 15 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Civerb's Cudgel " , UITYPE_MACE , 1u , 3u , 2000 , IPL_3XDAMVDEM , 35 , 35 , IPL_DEX_CURSE , 5 , 5 , IPL_MAG_CURSE , 2 , 2 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Celestial Star " , UITYPE_FLAIL , 2u , 5u , 7810 , IPL_NOMINSTR , 0 , 0 , IPL_LIGHT , 2 , 2 , IPL_DAMMOD , 10 , 10 , IPL_AC_CURSE , 8 , 8 , IPL_INVCURS , 131 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Baranar's Star " , UITYPE_MORNSTAR , 5u , 6u , 6850 , IPL_TOHIT , 12 , 12 , IPL_DAMP , 80 , 80 , IPL_FASTATTACK , 1 , 1 , IPL_VIT , 4 , 4 , IPL_DEX_CURSE , 4 , 4 , IPL_SETDUR , 60 , 60 } ,
{ " Gnarled Root " , UITYPE_SPIKCLUB , 9u , 6u , 9820 , IPL_TOHIT , 20 , 20 , IPL_DAMP , 300 , 300 , IPL_DEX , 10 , 10 , IPL_MAG , 5 , 5 , IPL_ALLRES , 10 , 10 , IPL_AC_CURSE , 10 , 10 } ,
{ " The Cranium Basher " , UITYPE_MAUL , 12u , 6u , 36500 , IPL_DAMMOD , 20 , 20 , IPL_STR , 15 , 15 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_MANA_CURSE , 150 , 150 , IPL_ALLRES , 5 , 5 , IPL_INVCURS , 122 , 0 } ,
{ " Schaefer's Hammer " , UITYPE_WARHAMMER , 16u , 6u , 56125 , IPL_DAMP_CURSE , 100 , 100 , IPL_LIGHTDAM , 1 , 50 , IPL_LIFE , 50 , 50 , IPL_TOHIT , 30 , 30 , IPL_LIGHTRES , 80 , 80 , IPL_LIGHT , 1 , 1 } ,
{ " Dreamflange " , UITYPE_MACE , 26u , 5u , 26450 , IPL_MAG , 30 , 30 , IPL_MANA , 50 , 50 , IPL_MAGICRES , 50 , 50 , IPL_LIGHT , 2 , 2 , IPL_SPLLVLADD , 1 , 1 , IPL_TOHIT , 0 , 0 } ,
{ " Staff of Shadows " , UITYPE_LONGSTAFF , 2u , 5u , 1250 , IPL_MAG_CURSE , 10 , 10 , IPL_TOHIT , 10 , 10 , IPL_DAMP , 60 , 60 , IPL_LIGHT_CURSE , 2 , 2 , IPL_FASTATTACK , 1 , 1 , IPL_TOHIT , 0 , 0 } ,
{ " Immolator " , UITYPE_LONGSTAFF , 4u , 4u , 3900 , IPL_FIRERES , 20 , 20 , IPL_FIREDAM , 4 , 4 , IPL_MANA , 10 , 10 , IPL_VIT_CURSE , 5 , 5 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Storm Spire " , UITYPE_WARSTAFF , 8u , 4u , 22500 , IPL_LIGHTRES , 50 , 50 , IPL_LIGHTDAM , 2 , 8 , IPL_STR , 10 , 10 , IPL_MAG_CURSE , 10 , 10 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Gleamsong " , UITYPE_SHORTSTAFF , 8u , 4u , 6520 , IPL_MANA , 25 , 25 , IPL_STR_CURSE , 3 , 3 , IPL_VIT_CURSE , 3 , 3 , IPL_SPELL , 10 , 76 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Thundercall " , UITYPE_COMPSTAFF , 14u , 5u , 22250 , IPL_TOHIT , 35 , 35 , IPL_LIGHTDAM , 1 , 10 , IPL_SPELL , 3 , 76 , IPL_LIGHTRES , 30 , 30 , IPL_LIGHT , 2 , 2 , IPL_TOHIT , 0 , 0 } ,
{ " The Protector " , UITYPE_SHORTSTAFF , 16u , 6u , 17240 , IPL_VIT , 5 , 5 , IPL_GETHIT_CURSE , 5 , 5 , IPL_SETAC , 40 , 40 , IPL_SPELL , 2 , 86 , IPL_THORNS , 1 , 3 , IPL_INVCURS , 162 , 0 } ,
{ " Naj's Puzzler " , UITYPE_LONGSTAFF , 18u , 5u , 34000 , IPL_MAG , 20 , 20 , IPL_DEX , 10 , 10 , IPL_ALLRES , 20 , 20 , IPL_SPELL , 23 , 57 , IPL_LIFE_CURSE , 25 , 25 , IPL_TOHIT , 0 , 0 } ,
{ " Mindcry " , UITYPE_QUARSTAFF , 20u , 4u , 41500 , IPL_MAG , 15 , 15 , IPL_SPELL , 13 , 69 , IPL_ALLRES , 15 , 15 , IPL_SPLLVLADD , 1 , 1 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Rod of Onan " , UITYPE_WARSTAFF , 22u , 3u , 44167 , IPL_SPELL , 21 , 50 , IPL_DAMP , 100 , 100 , IPL_ATTRIBS , 5 , 5 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Helm of Sprits " , UITYPE_HELM , 1u , 2u , 7525 , IPL_STEALLIFE , 5 , 5 , IPL_INVCURS , 77 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Thinking Cap " , UITYPE_SKULLCAP , 6u , 5u , 2020 , IPL_MANA , 30 , 30 , IPL_SPLLVLADD , 2 , 2 , IPL_ALLRES , 20 , 20 , IPL_SETDUR , 1 , 1 , IPL_INVCURS , 93 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " OverLord's Helm " , UITYPE_HELM , 7u , 6u , 12500 , IPL_STR , 20 , 20 , IPL_DEX , 15 , 15 , IPL_VIT , 5 , 5 , IPL_MAG_CURSE , 20 , 20 , IPL_SETDUR , 15 , 15 , IPL_INVCURS , 99 , 0 } ,
{ " Fool's Crest " , UITYPE_HELM , 12u , 5u , 10150 , IPL_ATTRIBS_CURSE , 4 , 4 , IPL_LIFE , 100 , 100 , IPL_GETHIT , 1 , 6 , IPL_THORNS , 1 , 3 , IPL_INVCURS , 80 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Gotterdamerung " , UITYPE_GREATHELM , 21u , 6u , 54900 , IPL_ATTRIBS , 20 , 20 , IPL_SETAC , 60 , 60 , IPL_GETHIT_CURSE , 4 , 4 , IPL_ALLRESZERO , 0 , 0 , IPL_LIGHT_CURSE , 4 , 4 , IPL_INVCURS , 85 , 0 } ,
{ " Royal Circlet " , UITYPE_CROWN , 27u , 5u , 24875 , IPL_ATTRIBS , 10 , 10 , IPL_MANA , 40 , 40 , IPL_SETAC , 40 , 40 , IPL_LIGHT , 1 , 1 , IPL_INVCURS , 79 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Torn Flesh of Souls " , UITYPE_RAGS , 2u , 5u , 4825 , IPL_SETAC , 8 , 8 , IPL_VIT , 10 , 10 , IPL_GETHIT_CURSE , 1 , 1 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_INVCURS , 92 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Gladiator's Bane " , UITYPE_STUDARMOR , 6u , 4u , 3450 , IPL_SETAC , 25 , 25 , IPL_GETHIT_CURSE , 2 , 2 , IPL_DUR , 200 , 200 , IPL_ATTRIBS_CURSE , 3 , 3 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " The Rainbow Cloak " , UITYPE_CLOAK , 2u , 6u , 4900 , IPL_SETAC , 10 , 10 , IPL_ATTRIBS , 1 , 1 , IPL_ALLRES , 10 , 10 , IPL_LIFE , 5 , 5 , IPL_DUR , 50 , 50 , IPL_INVCURS , 138 , 0 } ,
{ " Leather of Aut " , UITYPE_LEATHARMOR , 4u , 5u , 10550 , IPL_SETAC , 15 , 15 , IPL_STR , 5 , 5 , IPL_MAG_CURSE , 5 , 5 , IPL_DEX , 5 , 5 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Wisdom's Wrap " , UITYPE_ROBE , 5u , 6u , 6200 , IPL_MAG , 5 , 5 , IPL_MANA , 10 , 10 , IPL_LIGHTRES , 25 , 25 , IPL_SETAC , 15 , 15 , IPL_GETHIT_CURSE , 1 , 1 , IPL_INVCURS , 138 , 0 } ,
{ " Sparking Mail " , UITYPE_CHAINMAIL , 9u , 2u , 15750 , IPL_SETAC , 30 , 30 , IPL_LIGHTDAM , 1 , 10 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Scavenger Carapace " , UITYPE_BREASTPLATE , 13u , 4u , 14000 , IPL_GETHIT_CURSE , 15 , 15 , IPL_AC_CURSE , 30 , 30 , IPL_DEX , 5 , 5 , IPL_LIGHTRES , 40 , 40 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Nightscape " , UITYPE_CAPE , 16u , 6u , 11600 , IPL_FASTRECOVER , 2 , 2 , IPL_LIGHT_CURSE , 4 , 4 , IPL_SETAC , 15 , 15 , IPL_DEX , 3 , 3 , IPL_ALLRES , 20 , 20 , IPL_INVCURS , 138 , 0 } ,
{ " Naj's Light Plate " , UITYPE_PLATEMAIL , 19u , 6u , 78700 , IPL_NOMINSTR , 0 , 0 , IPL_MAG , 5 , 5 , IPL_MANA , 20 , 20 , IPL_ALLRES , 20 , 20 , IPL_SPLLVLADD , 1 , 1 , IPL_INVCURS , 159 , 0 } ,
{ " Demonspike Coat " , UITYPE_FULLPLATE , 25u , 5u , 251175 , IPL_SETAC , 100 , 100 , IPL_GETHIT_CURSE , 6 , 6 , IPL_STR , 10 , 10 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_FIRERES , 50 , 50 , IPL_TOHIT , 0 , 0 } ,
{ " The Deflector " , UITYPE_BUCKLER , 1u , 5u , 1500 , IPL_SETAC , 7 , 7 , IPL_ALLRES , 10 , 10 , IPL_DAMP_CURSE , 20 , 20 , IPL_TOHIT_CURSE , 5 , 5 , IPL_INVCURS , 83 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Split Skull Shield " , UITYPE_BUCKLER , 1u , 6u , 2025 , IPL_SETAC , 10 , 10 , IPL_LIFE , 10 , 10 , IPL_STR , 2 , 2 , IPL_LIGHT_CURSE , 1 , 1 , IPL_SETDUR , 15 , 15 , IPL_INVCURS , 116 , 0 } ,
{ " Dragon's Breach " , UITYPE_KITESHIELD , 2u , 6u , 19200 , IPL_FIRERES , 25 , 25 , IPL_STR , 5 , 5 , IPL_SETAC , 20 , 20 , IPL_MAG_CURSE , 5 , 5 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_INVCURS , 117 , 0 } ,
{ " Blackoak Shield " , UITYPE_SMALLSHIELD , 4u , 6u , 5725 , IPL_DEX , 10 , 10 , IPL_VIT_CURSE , 10 , 10 , IPL_SETAC , 18 , 18 , IPL_LIGHT_CURSE , 1 , 1 , IPL_DUR , 150 , 150 , IPL_INVCURS , 146 , 0 } ,
{ " Holy Defender " , UITYPE_LARGESHIELD , 10u , 6u , 13800 , IPL_SETAC , 15 , 15 , IPL_GETHIT_CURSE , 2 , 2 , IPL_FIRERES , 20 , 20 , IPL_DUR , 200 , 200 , IPL_FASTBLOCK , 1 , 1 , IPL_INVCURS , 146 , 0 } ,
{ " Stormshield " , UITYPE_GOTHSHIELD , 24u , 6u , 49000 , IPL_SETAC , 40 , 40 , IPL_GETHIT , 4 , 4 , IPL_STR , 10 , 10 , IPL_INDESTRUCTIBLE , 0 , 0 , IPL_FASTBLOCK , 1 , 1 , IPL_INVCURS , 148 , 0 } ,
{ " Bramble " , UITYPE_RING , 1u , 4u , 1000 , IPL_ATTRIBS_CURSE , 2 , 2 , IPL_DAMMOD , 3 , 3 , IPL_MANA , 10 , 10 , IPL_INVCURS , 9 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Ring of Regha " , UITYPE_RING , 1u , 6u , 4175 , IPL_MAG , 10 , 10 , IPL_MAGICRES , 10 , 10 , IPL_LIGHT , 1 , 1 , IPL_STR_CURSE , 3 , 3 , IPL_DEX_CURSE , 3 , 3 , IPL_INVCURS , 11 , 0 } ,
{ " The Bleeder " , UITYPE_RING , 2u , 4u , 8500 , IPL_MAGICRES , 20 , 20 , IPL_MANA , 30 , 30 , IPL_LIFE_CURSE , 10 , 10 , IPL_INVCURS , 8 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Constricting Ring " , UITYPE_RING , 5u , 3u , 62000 , IPL_ALLRES , 75 , 75 , IPL_DRAINLIFE , 0 , 0 , IPL_INVCURS , 14 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 } ,
{ " Ring of Engagement " , UITYPE_RING , 11u , 5u , 12476 , IPL_GETHIT_CURSE , 1 , 2 , IPL_THORNS , 1 , 3 , IPL_SETAC , 5 , 5 , IPL_TARGAC , 4 , 12 , IPL_INVCURS , 13 , 0 , IPL_TOHIT , 0 , 0 } ,
{ & empty_string , UITYPE_INVALID , 0u , 0u , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 , IPL_TOHIT , 0 , 0 }
} ;
/* rdata */
ItemDataStruct AllItemsList [ 157 ] =
{
{ IDROP_REGULAR , ICLASS_GOLD , ILOC_UNEQUIPABLE , 168 , 11u , UITYPE_NONE , " Gold " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 1 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_WEAPON , ILOC_ONEHAND , 64 , 1u , UITYPE_NONE , " Short Sword " , NULL , 2 , 20 , 2 , 6 , 0 , 0 , 18u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 50 , 50 } ,
{ IDROP_NEVER , ICLASS_ARMOR , ILOC_ONEHAND , 83 , 5u , UITYPE_NONE , " Buckler " , NULL , 2 , 10 , 0 , 0 , 3 , 3 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 50 , 50 } ,
{ IDROP_NEVER , ICLASS_WEAPON , ILOC_ONEHAND , 66 , 4u , UITYPE_SPIKCLUB , " Club " , NULL , 1 , 20 , 1 , 6 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 20 , 20 } ,
{ IDROP_NEVER , ICLASS_WEAPON , ILOC_TWOHAND , 118 , 3u , UITYPE_NONE , " Short Bow " , NULL , 1 , 30 , 1 , 4 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 100 , 100 } ,
{ IDROP_NEVER , ICLASS_WEAPON , ILOC_TWOHAND , 109 , 10u , UITYPE_NONE , " Short Staff of Charged Bolt " , NULL , 1 , 25 , 2 , 4 , 0 , 0 , 0u , 20u , 0u , ISPL_NONE , IMISC_STAFF , SPL_CBOLT , 0 , 520 , 520 } ,
{ IDROP_NEVER , ICLASS_WEAPON , ILOC_TWOHAND , 106 , 2u , UITYPE_CLEAVER , " Cleaver " , NULL , 10 , 10 , 4 , 24 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 2000 , 2000 } ,
{ IDROP_NEVER , ICLASS_ARMOR , ILOC_HELM , 78 , 7u , UITYPE_SKCROWN , " The Undead Crown " , NULL , 0 , 50 , 0 , 0 , 15 , 15 , 0u , 0u , 0u , ISPL_RNDSTEALLIFE , IMISC_UNIQUE , SPL_NULL , 0 , 10000 , 10000 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_RING , 18 , 12u , UITYPE_INFRARING , " Empyrean Band " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 8000 , 8000 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 76 , 0u , UITYPE_NONE , " Magic Rock " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_AMULET , 44 , 13u , UITYPE_OPTAMULET , " Optic Amulet " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 5000 , 5000 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_RING , 10 , 12u , UITYPE_TRING , " Ring of Truth " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 1000 , 1000 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 126 , 0u , UITYPE_NONE , " Tavern Sign " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_ARMOR , ILOC_HELM , 93 , 7u , UITYPE_HARCREST , " Harlequin Crest " , NULL , 0 , 15 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 15 , 20 } ,
{ IDROP_NEVER , ICLASS_ARMOR , ILOC_HELM , 85 , 7u , UITYPE_STEELVEIL , " Veil of Steel " , NULL , 0 , 60 , 0 , 0 , 18 , 18 , 0u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 17 , 0u , UITYPE_ELIXIR , " Golden Elixir " , NULL , 15 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 140 , 0u , UITYPE_NONE , " Anvil of Fury " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 89 , 0u , UITYPE_NONE , " Black Mushroom " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 40 , 0u , UITYPE_NONE , " Brain " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 97 , 0u , UITYPE_NONE , " Fungal Tome " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 15 , 0u , UITYPE_ELIXIR , " Spectral Elixir " , NULL , 15 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SPECELIX , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 25 , 0u , UITYPE_NONE , " Blood Stone " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 96 , 0u , UITYPE_MAPOFDOOM , " Map of the Stars " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_MAPOFDOOM , SPL_NULL , 1 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_QUEST , ILOC_UNEQUIPABLE , 19 , 0u , UITYPE_NONE , " Heart " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_EAR , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 32 , 0u , UITYPE_NONE , " Potion of Healing " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_HEAL , SPL_NULL , 1 , 50 , 50 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 39 , 0u , UITYPE_NONE , " Potion of Mana " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_MANA , SPL_NULL , 1 , 50 , 50 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Identify " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_IDENTIFY , 1 , 200 , 200 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Town Portal " , NULL , 4 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_TOWN , 1 , 200 , 200 } ,
{ IDROP_NEVER , ICLASS_ARMOR , ILOC_ARMOR , 157 , 8u , UITYPE_ARMOFVAL , " Arkaine's Valor " , NULL , 0 , 40 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 35 , 0u , UITYPE_NONE , " Potion of Full Healing " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_FULLHEAL , SPL_NULL , 1 , 150 , 150 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 0 , 0u , UITYPE_NONE , " Potion of Full Mana " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_FULLMANA , SPL_NULL , 1 , 150 , 150 } ,
{ IDROP_NEVER , ICLASS_WEAPON , ILOC_ONEHAND , 61 , 1u , UITYPE_GRISWOLD , " Griswold's Edge " , NULL , 8 , 50 , 4 , 12 , 0 , 0 , 40u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 750 , 750 } ,
{ IDROP_NEVER , ICLASS_WEAPON , ILOC_ONEHAND , 59 , 4u , UITYPE_LGTFORGE , " Lightforge " , NULL , 2 , 32 , 1 , 8 , 0 , 0 , 16u , 0u , 0u , ISPL_NONE , IMISC_UNIQUE , SPL_NULL , 0 , 200 , 200 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 155 , 0u , UITYPE_LAZSTAFF , " Staff of Lazarus " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Resurrect " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_RESURRECT , 1 , 250 , 250 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_NONE , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_HELM , 91 , 7u , UITYPE_NONE , " Cap " , " Cap " , 1 , 15 , 0 , 0 , 1 , 3 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 15 , 20 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_HELM , 90 , 7u , UITYPE_SKULLCAP , " Skull Cap " , " Cap " , 4 , 20 , 0 , 0 , 2 , 4 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 25 , 30 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_HELM , 82 , 7u , UITYPE_HELM , " Helm " , " Helm " , 8 , 30 , 0 , 0 , 4 , 6 , 25u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 40 , 70 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_HELM , 75 , 7u , UITYPE_NONE , " Full Helm " , " Helm " , 12 , 35 , 0 , 0 , 6 , 8 , 35u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 90 , 130 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_HELM , 95 , 7u , UITYPE_CROWN , " Crown " , " Crown " , 16 , 40 , 0 , 0 , 8 , 12 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 200 , 300 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_HELM , 98 , 7u , UITYPE_GREATHELM , " Great Helm " , " Helm " , 20 , 60 , 0 , 0 , 10 , 15 , 50u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 400 , 500 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 150 , 6u , UITYPE_CAPE , " Cape " , " Cape " , 1 , 12 , 0 , 0 , 1 , 5 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 10 , 50 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 128 , 6u , UITYPE_RAGS , " Rags " , " Rags " , 1 , 6 , 0 , 0 , 2 , 6 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 5 , 25 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 149 , 6u , UITYPE_CLOAK , " Cloak " , " Cloak " , 2 , 18 , 0 , 0 , 3 , 7 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 40 , 70 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 137 , 6u , UITYPE_ROBE , " Robe " , " Robe " , 3 , 24 , 0 , 0 , 4 , 7 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 75 , 125 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 129 , 6u , UITYPE_NONE , " Quilted Armor " , " Armor " , 4 , 30 , 0 , 0 , 7 , 10 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 200 , 300 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 135 , 6u , UITYPE_LEATHARMOR , " Leather Armor " , " Armor " , 6 , 35 , 0 , 0 , 10 , 13 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 300 , 400 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 127 , 6u , UITYPE_NONE , " Hard Leather Armor " , " Armor " , 7 , 40 , 0 , 0 , 11 , 14 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 450 , 550 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 107 , 6u , UITYPE_STUDARMOR , " Studded Leather Armor " , " Armor " , 9 , 45 , 0 , 0 , 15 , 17 , 20u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 700 , 800 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 154 , 8u , UITYPE_NONE , " Ring Mail " , " Mail " , 11 , 50 , 0 , 0 , 17 , 20 , 25u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 900 , 1100 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 111 , 8u , UITYPE_CHAINMAIL , " Chain Mail " , " Mail " , 13 , 55 , 0 , 0 , 18 , 22 , 30u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 1250 , 1750 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 114 , 8u , UITYPE_NONE , " Scale Mail " , " Mail " , 15 , 60 , 0 , 0 , 23 , 28 , 35u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 2300 , 2800 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 153 , 9u , UITYPE_BREASTPLATE , " Breast Plate " , " Plate " , 16 , 80 , 0 , 0 , 20 , 24 , 40u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 2800 , 3200 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 136 , 8u , UITYPE_NONE , " Splint Mail " , " Mail " , 17 , 65 , 0 , 0 , 30 , 35 , 40u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 3250 , 3750 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 103 , 9u , UITYPE_PLATEMAIL , " Plate Mail " , " Plate " , 19 , 75 , 0 , 0 , 42 , 50 , 60u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 4600 , 5400 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 103 , 9u , UITYPE_NONE , " Field Plate " , " Plate " , 21 , 80 , 0 , 0 , 40 , 45 , 65u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 5800 , 6200 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 152 , 9u , UITYPE_NONE , " Gothic Plate " , " Plate " , 23 , 100 , 0 , 0 , 50 , 60 , 80u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 8000 , 10000 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ARMOR , 151 , 9u , UITYPE_FULLPLATE , " Full Plate Mail " , " Plate " , 25 , 90 , 0 , 0 , 60 , 75 , 90u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 6500 , 8000 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ONEHAND , 83 , 5u , UITYPE_BUCKLER , " Buckler " , " Shield " , 1 , 16 , 0 , 0 , 1 , 5 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 30 , 70 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ONEHAND , 105 , 5u , UITYPE_SMALLSHIELD , " Small Shield " , " Shield " , 5 , 24 , 0 , 0 , 3 , 8 , 25u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 90 , 130 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ONEHAND , 147 , 5u , UITYPE_LARGESHIELD , " Large Shield " , " Shield " , 9 , 32 , 0 , 0 , 5 , 10 , 40u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 200 , 300 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ONEHAND , 113 , 5u , UITYPE_KITESHIELD , " Kite Shield " , " Shield " , 14 , 40 , 0 , 0 , 8 , 15 , 50u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 400 , 700 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ONEHAND , 132 , 5u , UITYPE_GOTHSHIELD , " Tower Shield " , " Shield " , 20 , 50 , 0 , 0 , 12 , 20 , 60u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 850 , 1200 } ,
{ IDROP_REGULAR , ICLASS_ARMOR , ILOC_ONEHAND , 148 , 5u , UITYPE_GOTHSHIELD , " Gothic Shield " , " Shield " , 23 , 60 , 0 , 0 , 14 , 18 , 80u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 2300 , 2700 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 32 , 0u , UITYPE_NONE , " Potion of Healing " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_HEAL , SPL_NULL , 1 , 50 , 50 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 35 , 0u , UITYPE_NONE , " Potion of Full Healing " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_FULLHEAL , SPL_NULL , 1 , 150 , 150 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 39 , 0u , UITYPE_NONE , " Potion of Mana " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_MANA , SPL_NULL , 1 , 50 , 50 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 0 , 0u , UITYPE_NONE , " Potion of Full Mana " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_FULLMANA , SPL_NULL , 1 , 150 , 150 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 37 , 0u , UITYPE_NONE , " Potion of Rejuvenation " , NULL , 3 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_REJUV , SPL_NULL , 1 , 120 , 120 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 33 , 0u , UITYPE_NONE , " Potion of Full Rejuvenation " , NULL , 7 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_FULLREJUV , SPL_NULL , 1 , 600 , 600 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 38 , 0u , UITYPE_NONE , " Elixir of Strength " , NULL , 15 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_ELIXSTR , SPL_NULL , 1 , 5000 , 5000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 34 , 0u , UITYPE_NONE , " Elixir of Magic " , NULL , 15 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_ELIXMAG , SPL_NULL , 1 , 5000 , 5000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 36 , 0u , UITYPE_NONE , " Elixir of Dexterity " , NULL , 15 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_ELIXDEX , SPL_NULL , 1 , 5000 , 5000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 31 , 0u , UITYPE_NONE , " Elixir of Vitality " , NULL , 20 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_ELIXVIT , SPL_NULL , 1 , 5000 , 5000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Healing " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_HEAL , 1 , 50 , 50 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Lightning " , NULL , 4 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_LIGHTNING , 1 , 150 , 150 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Identify " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_IDENTIFY , 1 , 100 , 100 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Resurrect " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_RESURRECT , 1 , 250 , 250 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Fire Wall " , NULL , 4 , 0 , 0 , 0 , 0 , 0 , 0u , 17u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_FIREWALL , 1 , 400 , 400 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Inferno " , NULL , 1 , 0 , 0 , 0 , 0 , 0 , 0u , 19u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_FLAME , 1 , 100 , 100 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Town Portal " , NULL , 4 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_TOWN , 1 , 200 , 200 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Flash " , NULL , 6 , 0 , 0 , 0 , 0 , 0 , 0u , 21u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_FLASH , 1 , 500 , 500 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Infravision " , NULL , 8 , 0 , 0 , 0 , 0 , 0 , 0u , 23u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_INFRA , 1 , 600 , 600 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Phasing " , NULL , 6 , 0 , 0 , 0 , 0 , 0 , 0u , 25u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_RNDTELEPORT , 1 , 200 , 200 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Mana Shield " , NULL , 8 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_MANASHIELD , 1 , 1200 , 1200 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Flame Wave " , NULL , 10 , 0 , 0 , 0 , 0 , 0 , 0u , 29u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_WAVE , 1 , 650 , 650 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Fireball " , NULL , 8 , 0 , 0 , 0 , 0 , 0 , 0u , 31u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_FIREBALL , 1 , 300 , 300 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Stone Curse " , NULL , 6 , 0 , 0 , 0 , 0 , 0 , 0u , 33u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_STONE , 1 , 800 , 800 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Chain Lightning " , NULL , 10 , 0 , 0 , 0 , 0 , 0 , 0u , 35u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_CHAIN , 1 , 750 , 750 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Guardian " , NULL , 12 , 0 , 0 , 0 , 0 , 0 , 0u , 47u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_GUARDIAN , 1 , 950 , 950 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Non Item " , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Nova " , NULL , 14 , 0 , 0 , 0 , 0 , 0 , 0u , 57u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_NOVA , 1 , 1300 , 1300 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Golem " , NULL , 10 , 0 , 0 , 0 , 0 , 0 , 0u , 51u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_GOLEM , 1 , 1100 , 1100 } ,
{ IDROP_NEVER , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of None " , NULL , 99 , 0 , 0 , 0 , 0 , 0 , 0u , 61u , 0u , ISPL_NONE , IMISC_SCROLLT , SPL_NULL , 1 , 1000 , 1000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Teleport " , NULL , 14 , 0 , 0 , 0 , 0 , 0 , 0u , 81u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_TELEPORT , 1 , 3000 , 3000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 1 , 0u , UITYPE_NONE , " Scroll of Apocalypse " , NULL , 22 , 0 , 0 , 0 , 0 , 0 , 0u , 117u , 0u , ISPL_NONE , IMISC_SCROLL , SPL_APOCA , 1 , 2000 , 2000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 88 , 0u , UITYPE_NONE , " Book of " , NULL , 2 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_BOOK , SPL_NULL , 1 , 0 , 0 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 88 , 0u , UITYPE_NONE , " Book of " , NULL , 8 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_BOOK , SPL_NULL , 1 , 0 , 0 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 88 , 0u , UITYPE_NONE , " Book of " , NULL , 14 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_BOOK , SPL_NULL , 1 , 0 , 0 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_UNEQUIPABLE , 88 , 0u , UITYPE_NONE , " Book of " , NULL , 20 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_BOOK , SPL_NULL , 1 , 0 , 0 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 51 , 1u , UITYPE_DAGGER , " Dagger " , " Dagger " , 1 , 16 , 1 , 4 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 60 , 60 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 64 , 1u , UITYPE_NONE , " Short Sword " , " Sword " , 1 , 24 , 2 , 6 , 0 , 0 , 18u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 120 , 120 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 62 , 1u , UITYPE_FALCHION , " Falchion " , " Sword " , 2 , 20 , 4 , 8 , 0 , 0 , 30u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 250 , 250 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 72 , 1u , UITYPE_SCIMITAR , " Scimitar " , " Sword " , 4 , 28 , 3 , 7 , 0 , 0 , 23u , 0u , 23u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 200 , 200 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 65 , 1u , UITYPE_CLAYMORE , " Claymore " , " Sword " , 5 , 36 , 1 , 12 , 0 , 0 , 35u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 450 , 450 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 56 , 1u , UITYPE_NONE , " Blade " , " Blade " , 4 , 30 , 3 , 8 , 0 , 0 , 25u , 0u , 30u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 280 , 280 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 67 , 1u , UITYPE_SABRE , " Sabre " , " Sabre " , 1 , 45 , 1 , 8 , 0 , 0 , 17u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 170 , 170 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 60 , 1u , UITYPE_LONGSWR , " Long Sword " , " Sword " , 6 , 40 , 2 , 10 , 0 , 0 , 30u , 0u , 30u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 350 , 350 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 61 , 1u , UITYPE_BROADSWR , " Broad Sword " , " Sword " , 8 , 50 , 4 , 12 , 0 , 0 , 40u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 750 , 750 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 57 , 1u , UITYPE_BASTARDSWR , " Bastard Sword " , " Sword " , 10 , 60 , 6 , 15 , 0 , 0 , 50u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 1000 , 1000 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 110 , 1u , UITYPE_TWOHANDSWR , " Two-Handed Sword " , " Sword " , 14 , 75 , 8 , 16 , 0 , 0 , 65u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 1800 , 1800 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 134 , 1u , UITYPE_GREATSWR , " Great Sword " , " Sword " , 17 , 100 , 10 , 20 , 0 , 0 , 75u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 3000 , 3000 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 112 , 2u , UITYPE_SMALLAXE , " Small Axe " , " Axe " , 2 , 24 , 2 , 10 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 150 , 150 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 144 , 2u , UITYPE_NONE , " Axe " , " Axe " , 4 , 32 , 4 , 12 , 0 , 0 , 22u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 450 , 450 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 142 , 2u , UITYPE_LARGEAXE , " Large Axe " , " Axe " , 6 , 40 , 6 , 16 , 0 , 0 , 30u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 750 , 750 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 141 , 2u , UITYPE_BROADAXE , " Broad Axe " , " Axe " , 8 , 50 , 8 , 20 , 0 , 0 , 50u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 1000 , 1000 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 101 , 2u , UITYPE_BATTLEAXE , " Battle Axe " , " Axe " , 10 , 60 , 10 , 25 , 0 , 0 , 65u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 1500 , 1500 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 143 , 2u , UITYPE_GREATAXE , " Great Axe " , " Axe " , 12 , 75 , 12 , 30 , 0 , 0 , 80u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 2500 , 2500 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 59 , 4u , UITYPE_MACE , " Mace " , " Mace " , 2 , 32 , 1 , 8 , 0 , 0 , 16u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 200 , 200 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 63 , 4u , UITYPE_MORNSTAR , " Morning Star " , " Mace " , 3 , 40 , 1 , 10 , 0 , 0 , 26u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 300 , 300 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 121 , 4u , UITYPE_WARHAMMER , " War Hammer " , " Hammer " , 5 , 50 , 5 , 9 , 0 , 0 , 40u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 600 , 600 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 70 , 4u , UITYPE_SPIKCLUB , " Spiked Club " , " Club " , 4 , 20 , 3 , 6 , 0 , 0 , 18u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 225 , 225 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 66 , 4u , UITYPE_SPIKCLUB , " Club " , " Club " , 1 , 20 , 1 , 6 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 20 , 20 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_ONEHAND , 131 , 4u , UITYPE_FLAIL , " Flail " , " Flail " , 7 , 36 , 2 , 12 , 0 , 0 , 30u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 500 , 500 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 122 , 4u , UITYPE_MAUL , " Maul " , " Maul " , 10 , 50 , 6 , 20 , 0 , 0 , 55u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 900 , 900 } ,
{ IDROP_DOUBLE , ICLASS_WEAPON , ILOC_TWOHAND , 118 , 3u , UITYPE_SHORTBOW , " Short Bow " , " Bow " , 1 , 30 , 1 , 4 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 100 , 100 } ,
{ IDROP_DOUBLE , ICLASS_WEAPON , ILOC_TWOHAND , 102 , 3u , UITYPE_HUNTBOW , " Hunter's Bow " , " Bow " , 3 , 40 , 2 , 5 , 0 , 0 , 20u , 0u , 35u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 350 , 350 } ,
{ IDROP_DOUBLE , ICLASS_WEAPON , ILOC_TWOHAND , 102 , 3u , UITYPE_LONGBOW , " Long Bow " , " Bow " , 5 , 35 , 1 , 6 , 0 , 0 , 25u , 0u , 30u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 250 , 250 } ,
{ IDROP_DOUBLE , ICLASS_WEAPON , ILOC_TWOHAND , 133 , 3u , UITYPE_COMPBOW , " Composite Bow " , " Bow " , 7 , 45 , 3 , 6 , 0 , 0 , 25u , 0u , 40u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 600 , 600 } ,
{ IDROP_DOUBLE , ICLASS_WEAPON , ILOC_TWOHAND , 167 , 3u , UITYPE_NONE , " Short Battle Bow " , " Bow " , 9 , 45 , 3 , 7 , 0 , 0 , 30u , 0u , 50u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 750 , 750 } ,
{ IDROP_DOUBLE , ICLASS_WEAPON , ILOC_TWOHAND , 119 , 3u , UITYPE_BATTLEBOW , " Long Battle Bow " , " Bow " , 11 , 50 , 1 , 10 , 0 , 0 , 30u , 0u , 60u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 1000 , 1000 } ,
{ IDROP_DOUBLE , ICLASS_WEAPON , ILOC_TWOHAND , 165 , 3u , UITYPE_NONE , " Short War Bow " , " Bow " , 15 , 55 , 4 , 8 , 0 , 0 , 35u , 0u , 70u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 1500 , 1500 } ,
{ IDROP_DOUBLE , ICLASS_WEAPON , ILOC_TWOHAND , 119 , 3u , UITYPE_WARBOW , " Long War Bow " , " Bow " , 19 , 60 , 1 , 14 , 0 , 0 , 45u , 0u , 80u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 2000 , 2000 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 109 , 10u , UITYPE_SHORTSTAFF , " Short Staff " , " Staff " , 1 , 25 , 2 , 4 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_STAFF , SPL_NULL , 0 , 30 , 30 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 123 , 10u , UITYPE_LONGSTAFF , " Long Staff " , " Staff " , 4 , 35 , 4 , 8 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_STAFF , SPL_NULL , 0 , 100 , 100 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 166 , 10u , UITYPE_COMPSTAFF , " Composite Staff " , " Staff " , 6 , 45 , 5 , 10 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_STAFF , SPL_NULL , 0 , 500 , 500 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 109 , 10u , UITYPE_QUARSTAFF , " Quarter Staff " , " Staff " , 9 , 55 , 6 , 12 , 0 , 0 , 20u , 0u , 0u , ISPL_NONE , IMISC_STAFF , SPL_NULL , 0 , 1000 , 1000 } ,
{ IDROP_REGULAR , ICLASS_WEAPON , ILOC_TWOHAND , 124 , 10u , UITYPE_WARSTAFF , " War Staff " , " Staff " , 12 , 75 , 8 , 16 , 0 , 0 , 30u , 0u , 0u , ISPL_NONE , IMISC_STAFF , SPL_NULL , 0 , 1500 , 1500 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_RING , 12 , 12u , UITYPE_RING , " Ring " , " Ring " , 5 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_RING , SPL_NULL , 0 , 1000 , 1000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_RING , 12 , 12u , UITYPE_RING , " Ring " , " Ring " , 10 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_RING , SPL_NULL , 0 , 1000 , 1000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_RING , 12 , 12u , UITYPE_RING , " Ring " , " Ring " , 15 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_RING , SPL_NULL , 0 , 1000 , 1000 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_AMULET , 45 , 13u , UITYPE_AMULET , " Amulet " , " Amulet " , 8 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_AMULET , SPL_NULL , 0 , 1200 , 1200 } ,
{ IDROP_REGULAR , ICLASS_MISC , ILOC_AMULET , 45 , 13u , UITYPE_AMULET , " Amulet " , " Amulet " , 16 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_AMULET , SPL_NULL , 0 , 1200 , 1200 } ,
{ IDROP_NEVER , ICLASS_NONE , ILOC_INVALID , 0 , 0u , UITYPE_NONE , NULL , NULL , 0 , 0 , 0 , 0 , 0 , 0 , 0u , 0u , 0u , ISPL_NONE , IMISC_NONE , SPL_NULL , 0 , 0 , 0 }
} ;
unsigned char ItemCAnimTbl [ 169 ] =
{
20 , 16 , 16 , 16 , 4 , 4 , 4 , 12 , 12 , 12 ,
12 , 12 , 12 , 12 , 12 , 21 , 21 , 25 , 12 , 28 ,
28 , 28 , 0 , 0 , 0 , 32 , 0 , 0 , 0 , 24 ,
24 , 26 , 2 , 25 , 22 , 23 , 24 , 25 , 27 , 27 ,
29 , 0 , 0 , 0 , 12 , 12 , 12 , 12 , 12 , 0 ,
8 , 8 , 0 , 8 , 8 , 8 , 8 , 8 , 8 , 6 ,
8 , 8 , 8 , 6 , 8 , 8 , 6 , 8 , 8 , 6 ,
6 , 6 , 8 , 8 , 8 , 5 , 9 , 13 , 13 , 13 ,
5 , 5 , 5 , 15 , 5 , 5 , 18 , 18 , 18 , 30 ,
5 , 5 , 14 , 5 , 14 , 13 , 16 , 18 , 5 , 5 ,
7 , 1 , 3 , 17 , 1 , 15 , 10 , 14 , 3 , 11 ,
8 , 0 , 1 , 7 , 0 , 7 , 15 , 7 , 3 , 3 ,
3 , 6 , 6 , 11 , 11 , 11 , 31 , 14 , 14 , 14 ,
6 , 6 , 7 , 3 , 8 , 14 , 0 , 14 , 14 , 0 ,
33 , 1 , 1 , 1 , 1 , 1 , 7 , 7 , 7 , 14 ,
14 , 17 , 17 , 17 , 0 , 34 , 1 , 0 , 3 , 17 ,
8 , 8 , 6 , 1 , 3 , 3 , 11 , 3 , 4
} ;
char * ItemDropStrs [ 35 ] =
{
" Armor2 " ,
" Axe " ,
" FBttle " ,
" Bow " ,
" GoldFlip " ,
" Helmut " ,
" Mace " ,
" Shield " ,
" SwrdFlip " ,
" Rock " ,
" Cleaver " ,
" Staff " ,
" Ring " ,
" CrownF " ,
" LArmor " ,
" WShield " ,
" Scroll " ,
" FPlateAr " ,
" FBook " ,
" Food " ,
" FBttleBB " ,
" FBttleDY " ,
" FBttleOR " ,
" FBttleBR " ,
" FBttleBL " ,
" FBttleBY " ,
" FBttleWH " ,
" FBttleDB " ,
" FEar " ,
" FBrain " ,
" FMush " ,
" Innsign " ,
" Bldstn " ,
" Fanvil " ,
" FLazStaf "
} ;
unsigned char ItemAnimLs [ 35 ] =
{
15u ,
13u ,
16u ,
13u ,
10u ,
13u ,
13u ,
13u ,
13u ,
10u ,
13u ,
13u ,
13u ,
13u ,
13u ,
13u ,
13u ,
13u ,
13u ,
1u ,
16u ,
16u ,
16u ,
16u ,
16u ,
16u ,
16u ,
16u ,
13u ,
12u ,
12u ,
13u ,
13u ,
13u ,
8u
} ;
int ItemDropSnds [ 35 ] =
{
IS_FHARM ,
IS_FAXE ,
IS_FPOT ,
IS_FBOW ,
IS_GOLD ,
IS_FCAP ,
IS_FSWOR ,
IS_FSHLD ,
IS_FSWOR ,
IS_FROCK ,
IS_FAXE ,
IS_FSTAF ,
IS_FRING ,
IS_FCAP ,
IS_FLARM ,
IS_FSHLD ,
IS_FSCRL ,
IS_FHARM ,
IS_FBOOK ,
IS_FLARM ,
IS_FPOT ,
IS_FPOT ,
IS_FPOT ,
IS_FPOT ,
IS_FPOT ,
IS_FPOT ,
IS_FPOT ,
IS_FPOT ,
IS_FBODY ,
IS_FBODY ,
IS_FMUSH ,
IS_ISIGN ,
IS_FBLST ,
IS_FANVL ,
IS_FSTAF
} ;
int ItemInvSnds [ 35 ] =
{
IS_IHARM ,
IS_IAXE ,
IS_IPOT ,
IS_IBOW ,
IS_GOLD ,
IS_ICAP ,
IS_ISWORD ,
IS_ISHIEL ,
IS_ISWORD ,
IS_IROCK ,
IS_IAXE ,
IS_ISTAF ,
IS_IRING ,
IS_ICAP ,
IS_ILARM ,
IS_ISHIEL ,
IS_ISCROL ,
IS_IHARM ,
IS_IBOOK ,
IS_IHARM ,
IS_IPOT ,
IS_IPOT ,
IS_IPOT ,
IS_IPOT ,
IS_IPOT ,
IS_IPOT ,
IS_IPOT ,
IS_IPOT ,
IS_IBODY ,
IS_IBODY ,
IS_IMUSH ,
IS_ISIGN ,
IS_IBLST ,
IS_IANVL ,
IS_ISTAF
} ;
int idoppely = 16 ; // weak
int premiumlvladd [ 6 ] = { - 1 , - 1 , 0 , 0 , 1 , 2 } ;
//----- (0041F096) --------------------------------------------------------
void __cdecl InitItemGFX ( )
{
signed int v0 ; // esi
char arglist [ 64 ] ; // [esp+4h] [ebp-40h]
v0 = 0 ;
do
{
sprintf ( arglist , " Items \\ %s.CEL " , ItemDropStrs [ v0 ] ) ;
Item2Frm [ v0 ] = ( int ) LoadFileInMem ( arglist , 0 ) ;
+ + v0 ;
}
while ( v0 < 35 ) ;
memset ( UniqueItemFlag , 0 , 0x200u ) ;
}
//----- (0041F0E8) --------------------------------------------------------
bool __fastcall ItemPlace ( int x , int y )
{
int v2 ; // ecx
int v3 ; // eax
bool result ; // al
v2 = x ;
v3 = v2 * 112 + y ;
if ( dMonster [ 0 ] [ v3 ] | | dPlayer [ v2 ] [ y ] | | dItem [ v2 ] [ y ] | | dObject [ v2 ] [ y ] | | dFlags [ v2 ] [ y ] & 8 )
result = 0 ;
else
result = nSolidTable [ dPiece [ 0 ] [ v3 ] ] = = 0 ;
return result ;
}
//----- (0041F13A) --------------------------------------------------------
void __cdecl AddInitItems ( )
{
int i ; // eax
int ii ; // ebx
int xx ; // esi
int yy ; // eax
int j ; // eax
i = random ( 11 , 3 ) + 3 ;
if ( i > 0 )
{
do
{
ii = itemavail [ 0 ] ;
itemactive [ numitems ] = itemavail [ 0 ] ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
do
{
xx = random ( 12 , 80 ) + 16 ;
yy = random ( 12 , 80 ) + 16 ;
}
while ( ! ItemPlace ( xx , yy ) ) ;
item [ ii ] . _ix = xx ;
item [ ii ] . _iy = yy ;
dItem [ xx ] [ yy ] = ii + 1 ;
j = GetRndSeed ( ) ;
item [ ii ] . _iSeed = j ;
SetRndSeed ( j ) ;
if ( random ( 12 , 2 ) )
GetItemAttrs ( ii , IDI_HEAL , currlevel ) ;
else
GetItemAttrs ( ii , IDI_MANA , currlevel ) ;
item [ ii ] . _iCreateInfo = currlevel + - 32768 ;
SetupItem ( ii ) ;
item [ ii ] . _iAnimFlag = 0 ;
item [ ii ] . _iAnimFrame = item [ ii ] . _iAnimLen ;
item [ ii ] . _iSelFlag = 1 ;
DeltaAddItem ( ii ) ;
+ + numitems ;
- - i ;
}
while ( i ) ;
}
}
//----- (0041F24E) --------------------------------------------------------
void __cdecl InitItems ( )
{
int * v0 ; // eax
int v1 ; // edx
GetItemAttrs ( 0 , IDI_GOLD , 1 ) ;
numitems = 0 ;
qmemcpy ( & golditem , item , sizeof ( golditem ) ) ;
golditem . _iStatFlag = 1 ;
v0 = & item [ 0 ] . _ix ;
do
{
* ( v0 - 1 ) = 0 ;
* v0 = 0 ;
v0 [ 1 ] = 0 ;
v0 [ 2 ] = 0 ;
* ( ( _BYTE * ) v0 + 36 ) = 0 ;
v0 [ 11 ] = 0 ;
v0 [ 10 ] = 0 ;
v0 + = 92 ;
}
while ( ( signed int ) v0 < ( signed int ) & item [ 128 ] . _ix ) ;
v1 = 0 ;
memset ( itemactive , 0 , sizeof ( itemactive ) ) ;
do
{
itemavail [ v1 ] = v1 ;
+ + v1 ;
}
while ( v1 < 127 ) ;
if ( ! setlevel )
{
GetRndSeed ( ) ;
if ( QuestStatus ( 0 ) )
SpawnRock ( ) ;
if ( QuestStatus ( 10 ) )
SpawnQuestItem ( 16 , 2 * setpc_x + 27 , 2 * setpc_y + 27 , 0 , 1 ) ;
if ( currlevel > 0u & & currlevel < 0x10u )
AddInitItems ( ) ;
}
uitemflag = 0 ;
}
// 5CF31D: using guessed type char setlevel;
//----- (0041F320) --------------------------------------------------------
void __fastcall CalcPlrItemVals ( int p , bool Loadgfx )
{
int v2 ; // eax
int v3 ; // ecx
int v4 ; // ebx
int v5 ; // esi
int * v6 ; // edi
int v7 ; // edx
int v8 ; // ecx
int v9 ; // eax
int v10 ; // edx
int v11 ; // eax
int * v12 ; // ecx
int * v13 ; // eax
int v14 ; // eax
int v15 ; // eax
signed int v16 ; // ecx
bool v17 ; // zf
signed int v18 ; // eax
signed int v19 ; // ecx
signed int v20 ; // ebx
char v21 ; // dl
int v22 ; // eax
int v23 ; // ecx
int v24 ; // eax
int v25 ; // eax
int v26 ; // edx
int v27 ; // edx
int v28 ; // eax
int v29 ; // ebx
int v30 ; // ecx
int v31 ; // eax
int v32 ; // eax
int v33 ; // ecx
int i ; // edx
int v35 ; // eax
signed int v36 ; // [esp-4h] [ebp-84h]
__int64 v37 ; // [esp+Ch] [ebp-74h]
BOOL v38 ; // [esp+14h] [ebp-6Ch]
signed int v39 ; // [esp+18h] [ebp-68h]
int v40 ; // [esp+1Ch] [ebp-64h]
int v41 ; // [esp+20h] [ebp-60h]
int v42 ; // [esp+24h] [ebp-5Ch]
int v43 ; // [esp+28h] [ebp-58h]
int v44 ; // [esp+2Ch] [ebp-54h]
int v45 ; // [esp+30h] [ebp-50h]
int v46 ; // [esp+34h] [ebp-4Ch]
signed int v47 ; // [esp+38h] [ebp-48h]
signed int v48 ; // [esp+3Ch] [ebp-44h]
signed int v49 ; // [esp+40h] [ebp-40h]
int v50 ; // [esp+44h] [ebp-3Ch]
char v51 ; // [esp+48h] [ebp-38h]
int v52 ; // [esp+4Ch] [ebp-34h]
int v53 ; // [esp+50h] [ebp-30h]
int v54 ; // [esp+54h] [ebp-2Ch]
int v55 ; // [esp+58h] [ebp-28h]
int v56 ; // [esp+5Ch] [ebp-24h]
int v57 ; // [esp+60h] [ebp-20h]
int v58 ; // [esp+64h] [ebp-1Ch]
int v59 ; // [esp+68h] [ebp-18h]
int v60 ; // [esp+6Ch] [ebp-14h]
int v61 ; // [esp+70h] [ebp-10h]
int arglist ; // [esp+74h] [ebp-Ch]
int v63 ; // [esp+78h] [ebp-8h]
int v64 ; // [esp+78h] [ebp-8h]
signed int r ; // [esp+7Ch] [ebp-4h]
v2 = 0 ;
arglist = p ;
v3 = 0 ;
v4 = 0 ;
v5 = arglist ;
v38 = Loadgfx ;
v58 = 0 ;
v57 = 0 ;
v56 = 0 ;
v55 = 0 ;
v59 = 0 ;
v53 = 0 ;
v60 = 0 ;
v52 = 0 ;
v61 = 0 ;
2018-06-09 03:10:25 +00:00
v37 = ( __int64 ) 0 ;
2018-06-07 02:25:54 +00:00
v49 = 0 ;
v48 = 0 ;
v47 = 0 ;
v54 = 0 ;
r = 10 ;
v46 = 0 ;
v63 = 0 ;
v51 = 0 ;
v50 = 0 ;
v45 = 0 ;
v44 = 0 ;
v43 = 0 ;
v42 = 0 ;
v6 = & plr [ arglist ] . InvBody [ 0 ] . _iStatFlag ;
v39 = 7 ;
do
{
if ( * ( v6 - 87 ) ! = - 1 & & * v6 )
{
v3 + = * ( v6 - 38 ) ;
v58 + = * ( v6 - 36 ) ;
v2 + = * ( v6 - 37 ) ;
v7 = * ( v6 - 33 ) ;
v40 = v3 ;
v41 = v2 ;
if ( v7 )
2018-06-09 03:10:25 +00:00
v37 | = ( __int64 ) 1 < < ( ( unsigned char ) v7 - 1 ) ;
2018-06-07 02:25:54 +00:00
if ( ! * ( ( _BYTE * ) v6 - 296 ) | | * ( v6 - 75 ) )
{
v57 + = * ( v6 - 28 ) ;
v56 + = * ( v6 - 27 ) ;
v8 = * ( v6 - 26 ) ;
if ( v8 )
{
v9 = v8 * * ( v6 - 36 ) / 100 ;
if ( ! v9 )
v9 = 1 ;
v55 + = v9 ;
v2 = v41 ;
}
v4 + = * ( v6 - 16 ) ;
v59 | = * ( v6 - 35 ) ;
v53 + = * ( v6 - 25 ) ;
v60 + = * ( v6 - 24 ) ;
v52 + = * ( v6 - 23 ) ;
v61 + = * ( v6 - 22 ) ;
v49 + = * ( v6 - 21 ) ;
v48 + = * ( v6 - 20 ) ;
v47 + = * ( v6 - 19 ) ;
v54 + = * ( v6 - 15 ) ;
r + = * ( v6 - 14 ) ;
v46 + = * ( v6 - 17 ) ;
v63 + = * ( v6 - 18 ) ;
v51 + = * ( ( _BYTE * ) v6 - 52 ) ;
v50 + = * ( v6 - 7 ) ;
v45 + = * ( v6 - 11 ) ;
v44 + = * ( v6 - 10 ) ;
v43 + = * ( v6 - 9 ) ;
v42 + = * ( v6 - 8 ) ;
v3 = v40 ;
}
}
v6 + = 92 ;
- - v39 ;
}
while ( v39 ) ;
if ( ! v3 & & ! v2 )
{
v2 = 1 ;
v3 = 1 ;
if ( plr [ v5 ] . InvBody [ 4 ] . _itype = = ITYPE_SHIELD & & plr [ v5 ] . InvBody [ 4 ] . _iStatFlag )
v2 = 3 ;
if ( plr [ v5 ] . InvBody [ 5 ] . _itype = = ITYPE_SHIELD & & plr [ v5 ] . InvBody [ 5 ] . _iStatFlag )
v2 = 3 ;
}
plr [ v5 ] . _pIMaxDam = v2 ;
plr [ v5 ] . _pIAC = v58 ;
plr [ v5 ] . _pIBonusDam = v57 ;
plr [ v5 ] . _pIBonusToHit = v56 ;
plr [ v5 ] . _pIBonusAC = v55 ;
plr [ v5 ] . _pIFlags = v59 ;
plr [ v5 ] . _pIGetHit = v54 ;
plr [ v5 ] . _pIMinDam = v3 ;
plr [ v5 ] . _pIBonusDamMod = v4 ;
if ( r < 2 )
r = 2 ;
if ( r > 15 )
r = 15 ;
if ( plr [ v5 ] . _pLightRad ! = r & & arglist = = myplr )
{
ChangeLightRadius ( plr [ v5 ] . _plid , r ) ;
v10 = 10 ;
if ( r > = 10 )
v10 = r ;
ChangeVisionRadius ( plr [ v5 ] . _pvid , v10 ) ;
plr [ v5 ] . _pLightRad = r ;
}
plr [ v5 ] . _pStrength = v53 + plr [ v5 ] . _pBaseStr ;
v11 = myplr ;
v12 = & plr [ myplr ] . _pStrength ;
if ( * v12 < = 0 )
* v12 = 0 ;
plr [ v5 ] . _pMagic = v60 + plr [ v5 ] . _pBaseMag ;
if ( plr [ v11 ] . _pMagic < = 0 )
plr [ v11 ] . _pMagic = 0 ;
plr [ v5 ] . _pDexterity = v52 + plr [ v5 ] . _pBaseDex ;
if ( plr [ v11 ] . _pDexterity < = 0 )
plr [ v11 ] . _pDexterity = 0 ;
v13 = & plr [ v11 ] . _pVitality ;
plr [ v5 ] . _pVitality = v61 + plr [ v5 ] . _pBaseVit ;
if ( * v13 < = 0 )
* v13 = 0 ;
v14 = plr [ v5 ] . _pLevel ;
if ( _LOBYTE ( plr [ v5 ] . _pClass ) = = 1 )
{
v15 = ( plr [ v5 ] . _pStrength + plr [ v5 ] . _pDexterity ) * v14 ;
v16 = 200 ;
}
else
{
v15 = plr [ v5 ] . _pStrength * v14 ;
v16 = 100 ;
}
v17 = _LOBYTE ( plr [ v5 ] . _pRSplType ) = = 3 ;
plr [ v5 ] . _pISpells [ 0 ] = v37 ;
plr [ v5 ] . _pISpells [ 1 ] = HIDWORD ( v37 ) ;
plr [ v5 ] . _pDamageMod = v15 / v16 ;
2018-06-09 03:10:25 +00:00
if ( v17 & & ! ( v37 & ( ( __int64 ) 1 < < ( _LOBYTE ( plr [ v5 ] . _pRSpell ) - 1 ) ) ) )
2018-06-07 02:25:54 +00:00
{
plr [ v5 ] . _pRSpell = - 1 ;
_LOBYTE ( plr [ v5 ] . _pRSplType ) = 4 ;
drawpanflag = 255 ;
}
plr [ v5 ] . _pISplLvlAdd = v51 ;
plr [ v5 ] . _pIEnAc = v50 ;
if ( v59 > = 0 )
{
v19 = v49 ;
v20 = v48 ;
v18 = v47 ;
}
else
{
v18 = 0 ;
v19 = 0 ;
v20 = 0 ;
}
if ( v18 > 75 )
_LOBYTE ( v18 ) = 75 ;
plr [ v5 ] . _pMagResist = v18 ;
if ( v19 > 75 )
_LOBYTE ( v19 ) = 75 ;
plr [ v5 ] . _pFireResist = v19 ;
if ( v20 > 75 )
_LOBYTE ( v20 ) = 75 ;
v21 = plr [ v5 ] . _pClass ;
v22 = v61 ;
plr [ v5 ] . _pLghtResist = v20 ;
if ( ! v21 )
v22 = 2 * v61 ;
if ( v21 = = 1 )
v22 + = v22 > > 1 ;
v23 = ( v22 < < 6 ) + v46 ;
v24 = v60 ;
if ( v21 = = 2 )
v24 = 2 * v60 ;
if ( v21 = = 1 )
v24 + = v24 > > 1 ;
v64 = ( v24 < < 6 ) + v63 ;
v25 = v23 + plr [ v5 ] . _pHPBase ;
v26 = v23 + plr [ v5 ] . _pMaxHPBase ;
plr [ v5 ] . _pHitPoints = v25 ;
v17 = arglist = = myplr ;
plr [ v5 ] . _pMaxHP = v26 ;
if ( v17 & & ( signed int ) ( v25 & 0xFFFFFFC0 ) < = 0 )
SetPlayerHitPoints ( arglist , 0 ) ;
plr [ v5 ] . _pMana = v64 + plr [ v5 ] . _pManaBase ;
plr [ v5 ] . _pMaxMana = v64 + plr [ v5 ] . _pMaxManaBase ;
plr [ v5 ] . _pIFMinDam = v45 ;
plr [ v5 ] . _pIFMaxDam = v44 ;
plr [ v5 ] . _pILMinDam = v43 ;
plr [ v5 ] . _pILMaxDam = v42 ;
if ( v59 & 1 )
plr [ v5 ] . _pInfraFlag = 1 ;
else
plr [ v5 ] . _pInfraFlag = 0 ;
v27 = plr [ v5 ] . InvBody [ 4 ] . _itype ;
plr [ v5 ] . _pBlockFlag = 0 ;
v28 = 0 ;
plr [ v5 ] . _pwtype = 0 ;
if ( v27 ! = ITYPE_NONE & & plr [ v5 ] . InvBody [ 4 ] . _iClass = = 1 & & plr [ v5 ] . InvBody [ 4 ] . _iStatFlag )
v28 = v27 ;
v29 = plr [ v5 ] . InvBody [ 5 ] . _itype ;
if ( v29 ! = ITYPE_NONE & & plr [ v5 ] . InvBody [ 5 ] . _iClass = = 1 & & plr [ v5 ] . InvBody [ 5 ] . _iStatFlag )
v28 = plr [ v5 ] . InvBody [ 5 ] . _itype ;
switch ( v28 )
{
case ITYPE_SWORD :
v36 = 2 ;
goto LABEL_86 ;
case ITYPE_AXE :
v36 = 5 ;
goto LABEL_86 ;
case ITYPE_BOW :
plr [ v5 ] . _pwtype = 1 ;
v36 = 4 ;
goto LABEL_86 ;
case ITYPE_MACE :
v36 = 6 ;
goto LABEL_86 ;
case ITYPE_STAFF :
v36 = 8 ;
LABEL_86 :
v28 = v36 ;
break ;
}
if ( v27 = = ITYPE_SHIELD & & plr [ v5 ] . InvBody [ 4 ] . _iStatFlag )
{
plr [ v5 ] . _pBlockFlag = 1 ;
+ + v28 ;
}
if ( v29 = = ITYPE_SHIELD & & plr [ v5 ] . InvBody [ 5 ] . _iStatFlag )
{
plr [ v5 ] . _pBlockFlag = 1 ;
+ + v28 ;
}
v30 = plr [ v5 ] . InvBody [ 6 ] . _itype ;
if ( v30 = = ITYPE_MARMOR & & plr [ v5 ] . InvBody [ 6 ] . _iStatFlag )
v28 + = 16 ;
if ( v30 = = ITYPE_HARMOR & & plr [ v5 ] . InvBody [ 6 ] . _iStatFlag )
v28 + = 32 ;
if ( plr [ v5 ] . _pgfxnum ! = v28 & & v38 )
{
plr [ v5 ] . _pgfxnum = v28 ;
plr [ v5 ] . _pGFXLoad = 0 ;
LoadPlrGFX ( arglist , 1 ) ;
SetPlrAnims ( arglist ) ;
v31 = plr [ 0 ] . _pNAnim [ plr [ v5 ] . _pdir + 5430 * arglist ] ;
plr [ v5 ] . _pAnimFrame = 1 ;
plr [ v5 ] . _pAnimData = v31 ;
plr [ v5 ] . _pAnimLen = plr [ v5 ] . _pNFrames ;
v32 = plr [ v5 ] . _pNWidth ;
plr [ v5 ] . _pAnimWidth = v32 ;
plr [ v5 ] . _pAnimCnt = 0 ;
plr [ v5 ] . _pAnimDelay = 3 ;
plr [ v5 ] . _pAnimWidth2 = ( v32 - 64 ) > > 1 ;
}
else
{
plr [ v5 ] . _pgfxnum = v28 ;
}
v33 = nummissiles ;
for ( i = 0 ; i < v33 ; + + i )
{
v35 = missileactive [ i ] ;
if ( missile [ v35 ] . _mitype = = 13 & & missile [ v35 ] . _misource = = arglist )
{
missile [ v35 ] . _miVar1 = plr [ v5 ] . _pHitPoints ;
missile [ v35 ] . _miVar2 = plr [ v5 ] . _pHPBase ;
}
}
drawmanaflag = 1 ;
drawhpflag = 1 ;
}
// 52571C: using guessed type int drawpanflag;
//----- (0041F953) --------------------------------------------------------
void __fastcall CalcPlrScrolls ( int p )
{
int v1 ; // esi
int v2 ; // eax
int * v3 ; // edi
int v4 ; // ebx
signed __int64 v5 ; // rax
int * v6 ; // edi
signed int v7 ; // ebx
signed __int64 v8 ; // rax
__int64 v9 ; // rax
v1 = p ;
v2 = plr [ p ] . _pNumInv ;
plr [ v1 ] . _pScrlSpells [ 0 ] = 0 ;
plr [ v1 ] . _pScrlSpells [ 1 ] = 0 ;
if ( v2 > 0 )
{
v3 = & plr [ v1 ] . InvList [ 0 ] . _iMiscId ;
v4 = v2 ;
do
{
if ( * ( v3 - 53 ) ! = - 1 & & ( * v3 = = IMISC_SCROLL | | * v3 = = IMISC_SCROLLT ) & & v3 [ 34 ] )
{
2018-06-09 03:10:25 +00:00
v5 = ( __int64 ) 1 < < ( * ( ( _BYTE * ) v3 + 4 ) - 1 ) ;
2018-06-07 02:25:54 +00:00
plr [ v1 ] . _pScrlSpells [ 0 ] | = v5 ;
plr [ v1 ] . _pScrlSpells [ 1 ] | = HIDWORD ( v5 ) ;
}
v3 + = 92 ;
- - v4 ;
}
while ( v4 ) ;
}
v6 = & plr [ v1 ] . SpdList [ 0 ] . _iMiscId ;
v7 = 8 ;
do
{
if ( * ( v6 - 53 ) ! = - 1 & & ( * v6 = = IMISC_SCROLL | | * v6 = = IMISC_SCROLLT ) & & v6 [ 34 ] )
{
2018-06-09 03:10:25 +00:00
v8 = ( __int64 ) 1 < < ( * ( ( _BYTE * ) v6 + 4 ) - 1 ) ;
2018-06-07 02:25:54 +00:00
plr [ v1 ] . _pScrlSpells [ 0 ] | = v8 ;
plr [ v1 ] . _pScrlSpells [ 1 ] | = HIDWORD ( v8 ) ;
}
v6 + = 92 ;
- - v7 ;
}
while ( v7 ) ;
if ( _LOBYTE ( plr [ v1 ] . _pRSplType ) = = 2 )
{
v9 = 1 < < ( _LOBYTE ( plr [ v1 ] . _pRSpell ) - 1 ) ;
if ( ! ( plr [ v1 ] . _pScrlSpells [ 1 ] & HIDWORD ( v9 ) | plr [ v1 ] . _pScrlSpells [ 0 ] & ( unsigned int ) v9 ) )
{
plr [ v1 ] . _pRSpell = - 1 ;
_LOBYTE ( plr [ v1 ] . _pRSplType ) = 4 ;
drawpanflag = 255 ;
}
}
}
// 52571C: using guessed type int drawpanflag;
//----- (0041FA4A) --------------------------------------------------------
void __fastcall CalcPlrStaff ( int pnum )
{
int v1 ; // esi
bool v2 ; // zf
signed __int64 v3 ; // rax
v1 = pnum ;
v2 = plr [ pnum ] . InvBody [ 4 ] . _itype = = ITYPE_NONE ;
plr [ v1 ] . _pISpells [ 0 ] = 0 ;
plr [ v1 ] . _pISpells [ 1 ] = 0 ;
if ( ! v2 & & plr [ v1 ] . InvBody [ 4 ] . _iStatFlag & & plr [ v1 ] . InvBody [ 4 ] . _iCharges > 0 )
{
2018-06-09 03:10:25 +00:00
v3 = ( __int64 ) 1 < < ( _LOBYTE ( plr [ v1 ] . InvBody [ 4 ] . _iSpell ) - 1 ) ;
2018-06-07 02:25:54 +00:00
plr [ v1 ] . _pISpells [ 0 ] = v3 ;
plr [ v1 ] . _pISpells [ 1 ] = HIDWORD ( v3 ) ;
}
}
//----- (0041FA97) --------------------------------------------------------
void __fastcall CalcSelfItems ( int pnum )
{
PlayerStruct * v1 ; // ecx
int v2 ; // edx
int v3 ; // esi
int v4 ; // edi
int * v5 ; // eax
signed int v6 ; // ebx
bool v7 ; // zf
char * v8 ; // eax
signed int v9 ; // [esp+Ch] [ebp-10h]
signed int v10 ; // [esp+10h] [ebp-Ch]
int v11 ; // [esp+14h] [ebp-8h]
signed int v12 ; // [esp+18h] [ebp-4h]
v1 = & plr [ pnum ] ;
v2 = 0 ;
v3 = 0 ;
v4 = 0 ;
v5 = & v1 - > InvBody [ 0 ] . _iStatFlag ;
v6 = 7 ;
do
{
if ( * ( v5 - 87 ) ! = - 1 )
{
v7 = * ( v5 - 75 ) = = 0 ;
* v5 = 1 ;
if ( ! v7 )
{
v2 + = * ( v5 - 25 ) ;
v3 + = * ( v5 - 24 ) ;
v4 + = * ( v5 - 23 ) ;
}
}
v5 + = 92 ;
- - v6 ;
}
while ( v6 ) ;
v11 = v4 ;
do
{
v9 = 0 ;
v8 = & v1 - > InvBody [ 0 ] . _iMinStr ;
v10 = 7 ;
do
{
if ( * ( ( _DWORD * ) v8 - 86 ) ! = - 1 & & * ( ( _DWORD * ) v8 + 1 ) )
{
v12 = 1 ;
if ( v2 + v1 - > _pBaseStr < * v8 )
v12 = 0 ;
if ( v3 + v1 - > _pBaseMag < ( unsigned char ) v8 [ 1 ] )
v12 = 0 ;
if ( v11 + v1 - > _pBaseDex < v8 [ 2 ] )
v12 = 0 ;
if ( ! v12 )
{
v7 = * ( ( _DWORD * ) v8 - 74 ) = = 0 ;
v9 = 1 ;
* ( ( _DWORD * ) v8 + 1 ) = 0 ;
if ( ! v7 )
{
v2 - = * ( ( _DWORD * ) v8 - 24 ) ;
v3 - = * ( ( _DWORD * ) v8 - 23 ) ;
v11 - = * ( ( _DWORD * ) v8 - 22 ) ;
}
}
}
v8 + = 368 ;
- - v10 ;
}
while ( v10 ) ;
}
while ( v9 ) ;
}
//----- (0041FB91) --------------------------------------------------------
void __fastcall CalcPlrItemMin ( int pnum )
{
PlayerStruct * v1 ; // ecx
PlayerStruct * v2 ; // esi
ItemStruct * v3 ; // edi
int v4 ; // ebp
ItemStruct * v6 ; // edi
signed int v7 ; // ebp
v1 = & plr [ pnum ] ;
v2 = v1 ;
v3 = v1 - > InvList ;
if ( v1 - > _pNumInv )
{
v4 = v1 - > _pNumInv ;
do
{
v3 - > _iStatFlag = ItemMinStats ( v2 , v3 ) ;
+ + v3 ;
- - v4 ;
}
while ( v4 ) ;
}
v6 = v2 - > SpdList ;
v7 = 8 ;
do
{
if ( v6 - > _itype ! = - 1 )
{
v6 - > _iStatFlag = ItemMinStats ( v2 , v6 ) ;
}
+ + v6 ;
- - v7 ;
}
while ( v7 ) ;
}
//----- (0041FBF6) --------------------------------------------------------
bool __fastcall ItemMinStats ( PlayerStruct * p , ItemStruct * x )
{
if ( p - > _pStrength < x - > _iMinStr | | p - > _pMagic < x - > _iMinMag | | p - > _pDexterity < x - > _iMinDex )
return 0 ;
else
return 1 ;
}
//----- (0041FC2C) --------------------------------------------------------
void __fastcall CalcPlrBookVals ( int p )
{
int v1 ; // esi
int v2 ; // ebx
int * v3 ; // edi
int v5 ; // esi
int * v6 ; // edi
int v7 ; // eax
unsigned char v8 ; // cl
unsigned char v9 ; // cl
int v10 ; // eax
int v12 ; // [esp+Ch] [ebp-Ch]
int v13 ; // [esp+10h] [ebp-8h]
unsigned char v14 ; // [esp+17h] [ebp-1h]
v1 = p ;
if ( ! currlevel )
{
v2 = 1 ;
if ( witchitem [ 1 ] . _itype ! = - 1 )
{
v3 = & witchitem [ 1 ] . _iStatFlag ;
do
{
WitchBookLevel ( v2 ) ;
* v3 = StoreStatOk ( ( ItemStruct * ) ( v3 - 89 ) ) ;
v3 + = 92 ;
+ + v2 ;
}
while ( * ( v3 - 87 ) ! = - 1 ) ;
}
}
v5 = v1 ;
v12 = 0 ;
if ( plr [ v5 ] . _pNumInv > 0 )
{
v6 = & plr [ v5 ] . InvList [ 0 ] . _iSpell ;
do
{
if ( ! * ( v6 - 54 ) & & * ( v6 - 1 ) = = 24 )
{
v7 = * v6 ;
v8 = spelldata [ * v6 ] . sMinInt ;
* ( ( _BYTE * ) v6 + 129 ) = v8 ;
v13 = plr [ 0 ] . _pSplLvl [ v7 + v5 * 21720 ] ;
if ( plr [ 0 ] . _pSplLvl [ v7 + v5 * 21720 ] )
{
do
{
v9 = 20 * v8 / 100 + v8 ;
- - v13 ;
v14 = v9 ;
v10 = v9 + 20 * v9 / 100 ;
v8 = - 1 ;
if ( v10 < = 255 )
v8 = v14 ;
else
v13 = 0 ;
}
while ( v13 ) ;
* ( ( _BYTE * ) v6 + 129 ) = v8 ;
}
v6 [ 33 ] = ItemMinStats ( & plr [ v5 ] , ( ItemStruct * ) ( v6 - 56 ) ) ;
}
+ + v12 ;
v6 + = 92 ;
}
while ( v12 < plr [ v5 ] . _pNumInv ) ;
}
}
//----- (0041FD3E) --------------------------------------------------------
void __fastcall CalcPlrInv ( int p , bool Loadgfx )
{
CalcPlrItemMin ( p ) ;
CalcSelfItems ( p ) ;
CalcPlrItemVals ( p , Loadgfx ) ;
CalcPlrItemMin ( p ) ;
if ( p = = myplr )
{
CalcPlrBookVals ( p ) ;
CalcPlrScrolls ( p ) ;
CalcPlrStaff ( p ) ;
if ( p = = myplr & & ! currlevel )
RecalcStoreStats ( ) ;
}
}
//----- (0041FD98) --------------------------------------------------------
void __fastcall SetPlrHandItem ( ItemStruct * h , int idata )
{
ItemDataStruct * pAllItem ; // edi
pAllItem = & AllItemsList [ idata ] ;
memset ( h , 0 , 0x170u ) ;
h - > _itype = pAllItem - > itype ;
h - > _iCurs = pAllItem - > iCurs ;
strcpy ( h - > _iName , pAllItem - > iName ) ;
strcpy ( h - > _iIName , pAllItem - > iName ) ;
h - > _iLoc = pAllItem - > iLoc ;
h - > _iClass = pAllItem - > iClass ;
h - > _iMinDam = pAllItem - > iMinDam ;
h - > _iMaxDam = pAllItem - > iMaxDam ;
h - > _iAC = pAllItem - > iMinAC ;
h - > _iMiscId = pAllItem - > iMiscId ;
h - > _iSpell = pAllItem - > iSpell ;
if ( pAllItem - > iMiscId = = IMISC_STAFF )
h - > _iCharges = 40 ;
h - > _iMaxCharges = h - > _iCharges ;
h - > _iDurability = pAllItem - > iDurability ;
h - > _iMaxDur = pAllItem - > iDurability ;
h - > _iMinStr = pAllItem - > iMinStr ;
h - > _iMinMag = pAllItem - > iMinMag ;
h - > _iMinDex = pAllItem - > iMinDex ;
h - > _ivalue = pAllItem - > iValue ;
h - > _iPrePower = - 1 ;
h - > _iSufPower = - 1 ;
h - > _iMagical = 0 ;
h - > _iIvalue = pAllItem - > iValue ;
h - > IDidx = idata ;
}
//----- (0041FE98) --------------------------------------------------------
void __fastcall GetPlrHandSeed ( ItemStruct * h )
{
h - > _iSeed = GetRndSeed ( ) ;
}
//----- (0041FEA4) --------------------------------------------------------
void __fastcall GetGoldSeed ( int pnum , ItemStruct * h )
{
int v3 ; // edi
signed int v4 ; // esi
int v5 ; // eax
int i ; // ecx
int v7 ; // edx
ItemStruct * v8 ; // ecx
v3 = pnum ;
do
{
v4 = 1 ;
v5 = GetRndSeed ( ) ;
for ( i = 0 ; i < numitems ; + + i )
{
if ( item [ itemactive [ i ] ] . _iSeed = = v5 )
v4 = 0 ;
}
if ( v3 = = myplr )
{
v7 = plr [ v3 ] . _pNumInv ;
if ( v7 > 0 )
{
v8 = plr [ v3 ] . InvList ;
do
{
if ( v8 - > _iSeed = = v5 )
v4 = 0 ;
+ + v8 ;
- - v7 ;
}
while ( v7 ) ;
}
}
}
while ( ! v4 ) ;
h - > _iSeed = v5 ;
}
//----- (0041FF16) --------------------------------------------------------
void __fastcall SetPlrHandSeed ( ItemStruct * h , int iseed )
{
h - > _iSeed = iseed ;
}
//----- (0041FF19) --------------------------------------------------------
void __fastcall SetPlrHandGoldCurs ( ItemStruct * h )
{
int v1 ; // eax
v1 = h - > _ivalue ;
if ( v1 < 2500 )
{
if ( v1 > 1000 )
h - > _iCurs = 5 ;
else
h - > _iCurs = 4 ;
}
else
{
h - > _iCurs = 6 ;
}
}
//----- (0041FF4E) --------------------------------------------------------
void __fastcall CreatePlrItems ( int p )
{
int v1 ; // ebx
int * v2 ; // eax
signed int v3 ; // ecx
int * v4 ; // eax
signed int v5 ; // ecx
int * v6 ; // eax
signed int v7 ; // ecx
int player_numa ; // [esp+Ch] [ebp-4h]
player_numa = p ;
v1 = p ;
v2 = & plr [ p ] . InvBody [ 0 ] . _itype ;
v3 = 7 ;
do
{
* v2 = - 1 ;
v2 + = 92 ;
- - v3 ;
}
while ( v3 ) ;
memset ( plr [ v1 ] . InvGrid , 0 , 0x28u ) ;
v4 = & plr [ v1 ] . InvList [ 0 ] . _itype ;
v5 = 40 ;
do
{
* v4 = - 1 ;
v4 + = 92 ;
- - v5 ;
}
while ( v5 ) ;
plr [ v1 ] . _pNumInv = 0 ;
v6 = & plr [ v1 ] . SpdList [ 0 ] . _itype ;
v7 = 8 ;
do
{
* v6 = - 1 ;
v6 + = 92 ;
- - v7 ;
}
while ( v7 ) ;
switch ( _LOBYTE ( plr [ v1 ] . _pClass ) )
{
case UI_WARRIOR :
SetPlrHandItem ( & plr [ v1 ] . InvBody [ 4 ] , IDI_WARRIOR ) ;
GetPlrHandSeed ( & plr [ v1 ] . InvBody [ 4 ] ) ;
SetPlrHandItem ( & plr [ v1 ] . InvBody [ 5 ] , IDI_WARRSHLD ) ;
GetPlrHandSeed ( & plr [ v1 ] . InvBody [ 5 ] ) ;
SetPlrHandItem ( & plr [ v1 ] . HoldItem , IDI_WARRCLUB ) ;
GetPlrHandSeed ( & plr [ v1 ] . HoldItem ) ;
AutoPlace ( player_numa , 0 , 1 , 3 , 1 ) ;
goto LABEL_13 ;
case UI_ROGUE :
SetPlrHandItem ( & plr [ v1 ] . InvBody [ 4 ] , IDI_ROGUE ) ;
GetPlrHandSeed ( & plr [ v1 ] . InvBody [ 4 ] ) ;
LABEL_13 :
SetPlrHandItem ( plr [ v1 ] . SpdList , IDI_HEAL ) ;
GetPlrHandSeed ( plr [ v1 ] . SpdList ) ;
SetPlrHandItem ( & plr [ v1 ] . SpdList [ 1 ] , IDI_HEAL ) ;
goto LABEL_14 ;
case UI_SORCERER :
SetPlrHandItem ( & plr [ v1 ] . InvBody [ 4 ] , IDI_SORCEROR ) ;
GetPlrHandSeed ( & plr [ v1 ] . InvBody [ 4 ] ) ;
SetPlrHandItem ( plr [ v1 ] . SpdList , IDI_MANA ) ;
GetPlrHandSeed ( plr [ v1 ] . SpdList ) ;
SetPlrHandItem ( & plr [ v1 ] . SpdList [ 1 ] , IDI_MANA ) ;
LABEL_14 :
GetPlrHandSeed ( & plr [ v1 ] . SpdList [ 1 ] ) ;
break ;
}
SetPlrHandItem ( & plr [ v1 ] . HoldItem , IDI_GOLD ) ;
GetPlrHandSeed ( & plr [ v1 ] . HoldItem ) ;
plr [ v1 ] . HoldItem . _iCurs = 4 ;
plr [ v1 ] . HoldItem . _ivalue = 100 ;
plr [ v1 ] . _pGold = 100 ;
qmemcpy ( ( char * ) & plr [ 0 ] . InvList [ plr [ v1 ] . _pNumInv + + ] + v1 * 21720 , & plr [ v1 ] . HoldItem , 0x170u ) ;
plr [ v1 ] . InvGrid [ 30 ] = plr [ v1 ] . _pNumInv ;
CalcPlrItemVals ( player_numa , 0 ) ;
}
//----- (004200F8) --------------------------------------------------------
bool __fastcall ItemSpaceOk ( int i , int j )
{
int v2 ; // eax
int v3 ; // esi
char v4 ; // cl
int v5 ; // ecx
char v6 ; // cl
bool v7 ; // sf
char v8 ; // cl
char v9 ; // al
if ( i < 0 )
return 0 ;
if ( i > = 112 )
return 0 ;
if ( j < 0 )
return 0 ;
if ( j > = 112 )
return 0 ;
v2 = i ;
v3 = 112 * i + j ;
if ( dMonster [ 0 ] [ v3 ] | | dPlayer [ v2 ] [ j ] | | dItem [ v2 ] [ j ] )
return 0 ;
v4 = dObject [ v2 ] [ j ] ;
if ( v4 )
{
v5 = v4 < = 0 ? - 1 - v4 : v4 - 1 ;
if ( object [ v5 ] . _oSolidFlag )
return 0 ;
}
v6 = dObject [ v2 + 1 ] [ j + 1 ] ;
v7 = v6 < 0 ;
if ( v6 > 0 )
{
if ( _LOBYTE ( objectavail [ 30 * v6 + 113 ] ) ) /* check */
return 0 ;
v7 = v6 < 0 ;
}
if ( ! v7 | | ! _LOBYTE ( object [ - ( v6 + 1 ) ] . _oSelFlag ) )
{
v8 = dObject [ v2 + 1 ] [ j ] ;
if ( v8 < = 0 )
return nSolidTable [ dPiece [ 0 ] [ v3 ] ] = = 0 ;
v9 = dObject [ v2 ] [ j + 1 ] ;
if ( v9 < = 0 | | ! _LOBYTE ( objectavail [ 30 * v8 + 113 ] ) | | ! _LOBYTE ( objectavail [ 30 * v9 + 113 ] ) )
return nSolidTable [ dPiece [ 0 ] [ v3 ] ] = = 0 ;
}
return 0 ;
}
//----- (004201F2) --------------------------------------------------------
bool __fastcall GetItemSpace ( int x , int y , char inum )
{
int v3 ; // eax
int v4 ; // edx
char ( * v5 ) [ 3 ] ; // edi
int v6 ; // ebx
char ( * v7 ) [ 3 ] ; // esi
signed int v9 ; // esi
char ( * v10 ) [ 3 ] ; // eax
int v11 ; // ecx
int v12 ; // eax
int v14 ; // ecx
int v15 ; // edx
int v16 ; // eax
int v17 ; // esi
int v18 ; // ecx
int v19 ; // [esp+8h] [ebp-Ch]
int v20 ; // [esp+Ch] [ebp-8h]
char ( * v21 ) [ 3 ] ; // [esp+10h] [ebp-4h]
v3 = y ;
v19 = y ;
v4 = y - 1 ;
v20 = x ;
v5 = itemhold ;
if ( v4 < = v19 + 1 )
{
v21 = itemhold ;
do
{
v6 = x - 1 ;
if ( ( unsigned char ) ( __OFSUB__ ( x - 1 , x + 1 ) ^ 1 ) | ( x - 1 = = x + 1 ) )
{
v7 = v21 ;
do
{
* ( _DWORD * ) v7 = ItemSpaceOk ( v6 , v4 ) ;
v7 + = 4 ;
+ + v6 ;
}
while ( v6 < = v20 + 1 ) ;
v3 = v19 ;
x = v20 ;
}
v21 = ( char ( * ) [ 3 ] ) ( ( char * ) v21 + 4 ) ;
+ + v4 ;
}
while ( v4 < = v3 + 1 ) ;
}
v9 = 0 ;
do
{
v10 = v5 ;
v11 = 3 ;
do
{
if ( * ( _DWORD * ) v10 )
v9 = 1 ;
v10 + = 4 ;
- - v11 ;
}
while ( v11 ) ;
v5 = ( char ( * ) [ 3 ] ) ( ( char * ) v5 + 4 ) ;
}
while ( ( signed int ) v5 < ( signed int ) & itemhold [ 3 ] [ 0 ] ) ;
_LOBYTE ( v11 ) = 13 ;
v12 = random ( v11 , 15 ) + 1 ;
if ( ! v9 )
return 0 ;
v14 = 0 ;
v15 = 0 ;
if ( v12 > 0 )
{
while ( 1 )
{
if ( * ( _DWORD * ) & itemhold [ 0 ] [ 4 * ( v15 + 2 * v14 + v14 ) ] )
- - v12 ;
if ( v12 < = 0 )
break ;
if ( + + v14 = = 3 )
{
v14 = 0 ;
if ( + + v15 = = 3 )
v15 = 0 ;
}
}
}
v16 = v14 + v20 - 1 ;
v17 = v15 + v19 - 1 ;
v18 = inum ;
item [ v18 ] . _ix = v16 ;
dItem [ v16 ] [ v17 ] = inum + 1 ;
item [ v18 ] . _iy = v17 ;
return 1 ;
}
//----- (004202E8) --------------------------------------------------------
void __fastcall GetSuperItemSpace ( int x , int y , char inum )
{
signed int v4 ; // edi
signed int v5 ; // ebx
int v6 ; // edx
int v7 ; // esi
int v9 ; // eax
int v10 ; // [esp+Ch] [ebp-10h]
int v11 ; // [esp+10h] [ebp-Ch]
signed int v12 ; // [esp+14h] [ebp-8h]
signed int v13 ; // [esp+18h] [ebp-4h]
v11 = y ;
v10 = x ;
if ( ! GetItemSpace ( x , y , inum ) )
{
v13 = 2 ;
v4 = - 2 ;
do
{
v5 = v4 ;
if ( v4 < = v13 )
{
while ( 2 )
{
v12 = v4 ;
v6 = v5 + v11 ;
v7 = v4 + v10 ;
do
{
if ( ItemSpaceOk ( v7 , v6 ) )
{
v9 = inum ;
item [ v9 ] . _ix = v7 ;
item [ v9 ] . _iy = v6 ;
dItem [ v7 ] [ v6 ] = inum + 1 ;
return ;
}
+ + v12 ;
+ + v7 ;
}
while ( v12 < = v13 ) ;
if ( + + v5 < = v13 )
continue ;
break ;
}
}
+ + v13 ;
- - v4 ;
}
while ( v4 > - 50 ) ;
}
}
//----- (00420376) --------------------------------------------------------
void __fastcall GetSuperItemLoc ( int x , int y , int * xx , int * yy )
{
signed int v4 ; // edi
signed int v5 ; // ebx
int v6 ; // esi
int v8 ; // [esp+Ch] [ebp-10h]
int v9 ; // [esp+10h] [ebp-Ch]
signed int v10 ; // [esp+14h] [ebp-8h]
signed int v11 ; // [esp+18h] [ebp-4h]
v9 = y ;
v8 = x ;
v11 = 1 ;
v4 = - 1 ;
while ( 1 )
{
v5 = v4 ;
if ( v4 < = v11 )
break ;
LABEL_7 :
+ + v11 ;
if ( - - v4 < = - 50 )
return ;
}
LABEL_3 :
v10 = v4 ;
* yy = v5 + v9 ;
v6 = v4 + v8 ;
while ( 1 )
{
* xx = v6 ;
if ( ItemSpaceOk ( v6 , * yy ) )
break ;
+ + v10 ;
+ + v6 ;
if ( v10 > v11 )
{
if ( + + v5 < = v11 )
goto LABEL_3 ;
goto LABEL_7 ;
}
}
}
//----- (004203E0) --------------------------------------------------------
void __fastcall CalcItemValue ( int i )
{
int v1 ; // ecx
int v2 ; // esi
bool v3 ; // sf
int v4 ; // esi
v1 = i ;
v2 = item [ v1 ] . _iVMult1 + item [ v1 ] . _iVMult2 ;
v3 = v2 < 0 ;
if ( v2 > 0 )
{
v2 * = item [ v1 ] . _ivalue ;
v3 = v2 < 0 ;
}
if ( v3 )
v2 = item [ v1 ] . _ivalue / v2 ;
v4 = item [ v1 ] . _iVAdd1 + item [ v1 ] . _iVAdd2 + v2 ;
if ( v4 < = 0 )
v4 = 1 ;
item [ v1 ] . _iIvalue = v4 ;
}
//----- (0042042C) --------------------------------------------------------
void __fastcall GetBookSpell ( int i , int lvl )
{
int v2 ; // edi
int v3 ; // esi
int v4 ; // eax
int v5 ; // edx
signed int v6 ; // ecx
int v7 ; // esi
const char * * v8 ; // ebx
int v9 ; // eax
char v10 ; // al
int v11 ; // [esp+8h] [ebp-4h]
v2 = lvl ;
v3 = i ;
if ( ! lvl )
v2 = lvl + 1 ;
_LOBYTE ( i ) = 14 ;
v4 = random ( i , 37 ) + 1 ;
LABEL_13 :
v6 = 1 ;
while ( v4 > 0 )
{
v5 = spelldata [ v6 ] . sBookLvl ;
if ( v5 ! = - 1 & & v2 > = v5 )
{
- - v4 ;
v11 = v6 ;
}
+ + v6 ;
if ( gbMaxPlayers = = 1 )
{
if ( v6 = = SPL_RESURRECT )
v6 = SPL_TELEKINESIS ;
if ( v6 = = SPL_HEALOTHER )
v6 = SPL_FLARE ;
}
if ( v6 = = 37 )
goto LABEL_13 ;
}
v7 = v3 ;
v8 = ( const char * * ) & spelldata [ v11 ] . sNameText ;
strcat ( item [ v7 ] . _iName , * v8 ) ;
strcat ( item [ v7 ] . _iIName , * v8 ) ;
item [ v7 ] . _iSpell = v11 ;
item [ v7 ] . _iMinMag = spelldata [ v11 ] . sMinInt ;
v9 = spelldata [ v11 ] . sBookCost ;
item [ v7 ] . _ivalue + = v9 ;
item [ v7 ] . _iIvalue + = v9 ;
v10 = spelldata [ v11 ] . sType ;
if ( v10 = = STYPE_FIRE )
item [ v7 ] . _iCurs = 87 ; // Red Book
if ( v10 = = STYPE_LIGHTNING )
item [ v7 ] . _iCurs = 88 ; // Blue Book
if ( v10 = = STYPE_MAGIC )
item [ v7 ] . _iCurs = 86 ; // Black Book
}
// 679660: using guessed type char gbMaxPlayers;
//----- (00420514) --------------------------------------------------------
void __fastcall GetStaffPower ( int i , int lvl , int bs , unsigned char onlygood )
{
int v4 ; // esi
int v5 ; // ebx
int v6 ; // edx
int v7 ; // ecx
int v9 ; // edi
int v10 ; // ecx
int v11 ; // ST14_4
int v12 ; // esi
char * v13 ; // edi
int l [ 256 ] ; // [esp+Ch] [ebp-484h]
char istr [ 128 ] ; // [esp+40Ch] [ebp-84h]
int ia ; // [esp+48Ch] [ebp-4h]
char * v17 ; // [esp+49Ch] [ebp+Ch]
v4 = lvl ;
ia = i ;
_LOBYTE ( i ) = 15 ;
v5 = - 1 ;
if ( ! random ( i , 10 ) | | onlygood )
{
v6 = 0 ;
v7 = 0 ;
if ( PL_Prefix [ 0 ] . PLPower ! = - 1 )
{
do
{
if ( PL_Prefix [ v7 ] . PLIType & 0x100 & & PL_Prefix [ v7 ] . PLMinLvl < = v4 & & ( ! onlygood | | PL_Prefix [ v7 ] . PLOk ) )
{
l [ v6 + + ] = v7 ;
if ( PL_Prefix [ v7 ] . PLDouble )
l [ v6 + + ] = v7 ;
}
+ + v7 ;
}
while ( PL_Prefix [ v7 ] . PLPower ! = - 1 ) ;
if ( v6 )
{
_LOBYTE ( v7 ) = 16 ;
v5 = l [ random ( v7 , v6 ) ] ;
v9 = ia ;
v17 = item [ ia ] . _iIName ;
sprintf ( istr , " %s %s " , PL_Prefix [ v5 ] . PLName , item [ ia ] . _iIName ) ;
strcpy ( v17 , istr ) ;
v10 = ia ;
v11 = PL_Prefix [ v5 ] . PLMultVal ;
item [ v9 ] . _iMagical = 1 ;
SaveItemPower (
v10 ,
PL_Prefix [ v5 ] . PLPower ,
PL_Prefix [ v5 ] . PLParam1 ,
PL_Prefix [ v5 ] . PLParam2 ,
PL_Prefix [ v5 ] . PLMinVal ,
PL_Prefix [ v5 ] . PLMaxVal ,
v11 ) ;
item [ v9 ] . _iPrePower = PL_Prefix [ v5 ] . PLPower ;
}
}
}
v12 = ia ;
v13 = item [ ia ] . _iIName ;
if ( ! control_WriteStringToBuffer ( item [ ia ] . _iIName ) )
{
strcpy ( v13 , AllItemsList [ item [ v12 ] . IDidx ] . iSName ) ;
if ( v5 ! = - 1 )
{
sprintf ( istr , " %s %s " , PL_Prefix [ v5 ] . PLName , v13 ) ;
strcpy ( v13 , istr ) ;
}
sprintf ( istr , " %s of %s " , v13 , spelldata [ bs ] . sNameText ) ;
strcpy ( v13 , istr ) ;
if ( ! item [ v12 ] . _iMagical )
strcpy ( item [ v12 ] . _iName , v13 ) ;
}
CalcItemValue ( ia ) ;
}
// 420514: using guessed type int var_484[256];
//----- (004206E5) --------------------------------------------------------
void __fastcall GetStaffSpell ( int i , int lvl , unsigned char onlygood )
{
int l ; // esi
int rv ; // eax
int s ; // ecx
int minc ; // ebx
int maxc ; // edx
int v ; // eax
char istr [ 64 ] ; // [esp+4h] [ebp-4Ch]
int bs ; // [esp+4Ch] [ebp-4h]
if ( random ( 17 , 4 ) )
{
l = lvl > > 1 ;
if ( ! l )
l = 1 ;
rv = random ( 18 , 37 ) + 1 ;
LABEL_15 :
s = 1 ;
while ( rv > 0 )
{
if ( spelldata [ s ] . sStaffLvl ! = - 1 & & l > = spelldata [ s ] . sStaffLvl )
{
- - rv ;
bs = s ;
}
+ + s ;
if ( gbMaxPlayers = = 1 )
{
if ( s = = SPL_RESURRECT )
s = SPL_TELEKINESIS ;
if ( s = = SPL_HEALOTHER )
s = SPL_FLARE ;
}
if ( s = = 37 )
goto LABEL_15 ;
}
sprintf ( istr , " %s of %s " , item [ i ] . _iName , spelldata [ bs ] . sNameText ) ;
if ( ! control_WriteStringToBuffer ( istr ) )
sprintf ( istr , " Staff of %s " , spelldata [ bs ] . sNameText ) ;
strcpy ( item [ i ] . _iName , istr ) ;
strcpy ( item [ i ] . _iIName , istr ) ;
minc = spelldata [ bs ] . sStaffMin ;
maxc = spelldata [ bs ] . sStaffMax - minc + 1 ;
item [ i ] . _iSpell = bs ;
v = random ( 19 , maxc ) + minc ;
item [ i ] . _iMinMag = spelldata [ bs ] . sMinInt ;
item [ i ] . _iCharges = v ;
item [ i ] . _iMaxCharges = v ;
v = ( v * spelldata [ bs ] . sStaffCost ) / 5 ;
item [ i ] . _ivalue + = v ;
item [ i ] . _iIvalue + = v ;
GetStaffPower ( i , lvl , bs , onlygood ) ;
}
else
{
GetItemPower ( i , lvl > > 1 , lvl , 256 , onlygood ) ;
}
}
// 679660: using guessed type char gbMaxPlayers;
//----- (0042084A) --------------------------------------------------------
void __fastcall GetItemAttrs ( int i , int idata , int lvl )
{
int rndv ; // eax
item [ i ] . _itype = AllItemsList [ idata ] . itype ;
item [ i ] . _iCurs = AllItemsList [ idata ] . iCurs ;
strcpy ( item [ i ] . _iName , AllItemsList [ idata ] . iName ) ;
strcpy ( item [ i ] . _iIName , AllItemsList [ idata ] . iName ) ;
item [ i ] . _iLoc = AllItemsList [ idata ] . iLoc ;
item [ i ] . _iClass = AllItemsList [ idata ] . iClass ;
item [ i ] . _iMinDam = AllItemsList [ idata ] . iMinDam ;
item [ i ] . _iMaxDam = AllItemsList [ idata ] . iMaxDam ;
item [ i ] . _iMiscId = AllItemsList [ idata ] . iMiscId ;
item [ i ] . _iAC = AllItemsList [ idata ] . iMinAC + random ( 20 , AllItemsList [ idata ] . iMaxAC - AllItemsList [ idata ] . iMinAC + 1 ) ;
item [ i ] . _iFlags = AllItemsList [ idata ] . iFlags ;
item [ i ] . _iSpell = AllItemsList [ idata ] . iSpell ;
item [ i ] . _ivalue = AllItemsList [ idata ] . iValue ;
item [ i ] . _iIvalue = AllItemsList [ idata ] . iValue ;
item [ i ] . _iMagical = 0 ;
item [ i ] . _iDurability = AllItemsList [ idata ] . iDurability ;
item [ i ] . _iMaxDur = AllItemsList [ idata ] . iDurability ;
item [ i ] . _iVAdd1 = 0 ;
item [ i ] . _iMinStr = AllItemsList [ idata ] . iMinStr ;
item [ i ] . _iMinMag = AllItemsList [ idata ] . iMinMag ;
item [ i ] . _iMinDex = AllItemsList [ idata ] . iMinDex ;
item [ i ] . _iVMult1 = 0 ;
item [ i ] . _iVAdd2 = 0 ;
item [ i ] . _iVMult2 = 0 ;
item [ i ] . _iPLDam = 0 ;
item [ i ] . _iPLToHit = 0 ;
item [ i ] . _iPLAC = 0 ;
item [ i ] . _iPLStr = 0 ;
item [ i ] . _iPLMag = 0 ;
item [ i ] . _iPLDex = 0 ;
item [ i ] . _iPLVit = 0 ;
item [ i ] . _iCharges = 0 ;
item [ i ] . _iMaxCharges = 0 ;
item [ i ] . _iPLFR = 0 ;
item [ i ] . _iPLLR = 0 ;
item [ i ] . _iPLMR = 0 ;
item [ i ] . IDidx = idata ;
item [ i ] . _iPLDamMod = 0 ;
item [ i ] . _iPLGetHit = 0 ;
item [ i ] . _iPLLight = 0 ;
item [ i ] . _iSplLvlAdd = 0 ;
item [ i ] . _iPrePower = - 1 ;
item [ i ] . _iSufPower = - 1 ;
item [ i ] . _iRequest = 0 ;
item [ i ] . _iFMinDam = 0 ;
item [ i ] . _iFMaxDam = 0 ;
item [ i ] . _iLMinDam = 0 ;
item [ i ] . _iLMaxDam = 0 ;
item [ i ] . _iPLEnAc = 0 ;
item [ i ] . _iPLMana = 0 ;
item [ i ] . _iPLHP = 0 ;
if ( AllItemsList [ idata ] . iMiscId = = IMISC_BOOK )
GetBookSpell ( i , lvl ) ;
if ( item [ i ] . _itype = = ITYPE_GOLD )
{
if ( gnDifficulty ) /* clean this up, NORMAL */
rndv = lvl ;
else
rndv = 5 * currlevel + random ( 21 , 10 * currlevel ) ;
if ( gnDifficulty = = DIFF_NIGHTMARE )
rndv = 5 * ( currlevel + 16 ) + random ( 21 , 10 * ( currlevel + 16 ) ) ;
if ( gnDifficulty = = DIFF_HELL )
rndv = 5 * ( currlevel + 32 ) + random ( 21 , 10 * ( currlevel + 32 ) ) ;
if ( leveltype = = 4 )
rndv + = rndv > > 3 ;
if ( rndv > 5000 )
rndv = 5000 ;
item [ i ] . _ivalue = rndv ;
if ( rndv < 2500 )
item [ i ] . _iCurs = ( rndv > 1000 ) + 4 ;
else
item [ i ] . _iCurs = 6 ;
}
}
// 5BB1ED: using guessed type char leveltype;
//----- (00420B17) --------------------------------------------------------
int __fastcall RndPL ( int param1 , int param2 )
{
return param1 + random ( 22 , param2 - param1 + 1 ) ;
}
//----- (00420B28) --------------------------------------------------------
int __fastcall PLVal ( int pv , int p1 , int p2 , int minv , int maxv )
{
if ( p1 = = p2 )
return minv ;
if ( minv = = maxv )
return minv ;
return minv + ( maxv - minv ) * ( 100 * ( pv - p1 ) / ( p2 - p1 ) ) / 100 ;
}
//----- (00420B68) --------------------------------------------------------
void __fastcall SaveItemPower ( int i , int power , int param1 , int param2 , int minval , int maxval , int multval )
{
int v7 ; // edi
int v8 ; // esi
int v9 ; // eax
int v10 ; // ebx
int * v11 ; // eax
int * v12 ; // eax
int v13 ; // edi
int v14 ; // eax
int v15 ; // edi
int v16 ; // eax
int v17 ; // eax
int v18 ; // ecx
int v19 ; // edx
int v20 ; // edi
int * v21 ; // edx
int v22 ; // eax
int v23 ; // eax
int v24 ; // eax
int v25 ; // eax
int v26 ; // eax
int v27 ; // eax
int v28 ; // ecx
int * v29 ; // eax
int v30 ; // ecx
int * v31 ; // eax
int v32 ; // ecx
int v33 ; // eax
int v34 ; // ST18_4
int v35 ; // eax
int v36 ; // ecx
int v37 ; // edx
signed int v38 ; // ecx
int v39 ; // eax
int v40 ; // eax
int v41 ; // ecx
int * v42 ; // eax
int v43 ; // esi
v7 = power ;
v8 = i ;
v9 = RndPL ( param1 , param2 ) ;
v10 = v9 ;
switch ( v7 )
{
case IPL_TOHIT :
v11 = & item [ v8 ] . _iPLToHit ;
goto LABEL_115 ;
case IPL_TOHIT_CURSE :
v12 = & item [ v8 ] . _iPLToHit ;
goto LABEL_62 ;
case IPL_DAMP :
v11 = & item [ v8 ] . _iPLDam ;
goto LABEL_115 ;
case IPL_DAMP_CURSE :
v12 = & item [ v8 ] . _iPLDam ;
goto LABEL_62 ;
case IPL_TOHIT_DAMP :
v10 = RndPL ( param1 , param2 ) ;
v13 = v8 ;
item [ v13 ] . _iPLDam + = v10 ;
if ( param1 = = 20 )
v14 = RndPL ( 1 , 5 ) ;
else
v14 = param1 ;
if ( param1 = = 36 )
v14 = RndPL ( 6 , 10 ) ;
if ( param1 = = 51 )
v14 = RndPL ( 11 , 15 ) ;
if ( param1 = = 66 )
v14 = RndPL ( 16 , 20 ) ;
if ( param1 = = 81 )
v14 = RndPL ( 21 , 30 ) ;
if ( param1 = = 96 )
v14 = RndPL ( 31 , 40 ) ;
if ( param1 = = 111 )
v14 = RndPL ( 41 , 50 ) ;
if ( param1 = = 126 )
v14 = RndPL ( 51 , 75 ) ;
if ( param1 = = 151 )
v14 = RndPL ( 76 , 100 ) ;
item [ v13 ] . _iPLToHit + = v14 ;
break ;
case IPL_TOHIT_DAMP_CURSE :
v15 = v8 ;
item [ v15 ] . _iPLDam - = v9 ;
if ( param1 = = 25 )
v16 = RndPL ( 1 , 5 ) ;
else
v16 = param1 ;
if ( param1 = = 50 )
v16 = RndPL ( 6 , 10 ) ;
item [ v15 ] . _iPLToHit - = v16 ;
break ;
case IPL_ACP :
v11 = & item [ v8 ] . _iPLAC ;
goto LABEL_115 ;
case IPL_ACP_CURSE :
v12 = & item [ v8 ] . _iPLAC ;
goto LABEL_62 ;
case IPL_FIRERES :
v11 = & item [ v8 ] . _iPLFR ;
goto LABEL_115 ;
case IPL_LIGHTRES :
v11 = & item [ v8 ] . _iPLLR ;
goto LABEL_115 ;
case IPL_MAGICRES :
v11 = & item [ v8 ] . _iPLMR ;
goto LABEL_115 ;
case IPL_ALLRES :
v17 = v8 ;
item [ v17 ] . _iPLFR + = v10 ;
v18 = item [ v8 ] . _iPLFR ;
item [ v17 ] . _iPLLR + = v10 ;
item [ v17 ] . _iPLMR + = v10 ;
v19 = item [ v8 ] . _iPLLR ;
v20 = item [ v8 ] . _iPLMR ;
if ( v18 < 0 )
item [ v17 ] . _iPLFR = 0 ;
if ( v19 < 0 )
item [ v17 ] . _iPLLR = 0 ;
if ( v20 < 0 )
item [ v17 ] . _iPLMR = 0 ;
break ;
case IPL_SPLLVLADD :
item [ v8 ] . _iSplLvlAdd = v9 ;
break ;
case IPL_CHARGES :
v21 = & item [ v8 ] . _iCharges ;
v22 = param1 * * v21 ;
* v21 = v22 ;
item [ v8 ] . _iMaxCharges = v22 ;
break ;
case IPL_FIREDAM :
v24 = v8 ;
item [ v24 ] . _iFlags | = 0x10u ;
goto LABEL_77 ;
case IPL_LIGHTDAM :
v25 = v8 ;
item [ v25 ] . _iFlags | = 0x20u ;
goto LABEL_79 ;
case IPL_STR :
v11 = & item [ v8 ] . _iPLStr ;
goto LABEL_115 ;
case IPL_STR_CURSE :
v12 = & item [ v8 ] . _iPLStr ;
goto LABEL_62 ;
case IPL_MAG :
v11 = & item [ v8 ] . _iPLMag ;
goto LABEL_115 ;
case IPL_MAG_CURSE :
v12 = & item [ v8 ] . _iPLMag ;
goto LABEL_62 ;
case IPL_DEX :
v11 = & item [ v8 ] . _iPLDex ;
goto LABEL_115 ;
case IPL_DEX_CURSE :
v12 = & item [ v8 ] . _iPLDex ;
goto LABEL_62 ;
case IPL_VIT :
v11 = & item [ v8 ] . _iPLVit ;
goto LABEL_115 ;
case IPL_VIT_CURSE :
v12 = & item [ v8 ] . _iPLVit ;
goto LABEL_62 ;
case IPL_ATTRIBS :
v26 = v8 ;
item [ v26 ] . _iPLStr + = v10 ;
item [ v26 ] . _iPLMag + = v10 ;
item [ v26 ] . _iPLDex + = v10 ;
item [ v26 ] . _iPLVit + = v10 ;
break ;
case IPL_ATTRIBS_CURSE :
v27 = v8 ;
item [ v27 ] . _iPLStr - = v10 ;
item [ v27 ] . _iPLMag - = v10 ;
item [ v27 ] . _iPLDex - = v10 ;
item [ v27 ] . _iPLVit - = v10 ;
break ;
case IPL_GETHIT :
v11 = & item [ v8 ] . _iPLGetHit ;
goto LABEL_115 ;
case IPL_GETHIT_CURSE :
v12 = & item [ v8 ] . _iPLGetHit ;
goto LABEL_62 ;
case IPL_LIFE :
v28 = v9 < < 6 ;
v29 = & item [ v8 ] . _iPLHP ;
goto LABEL_73 ;
case IPL_LIFE_CURSE :
v30 = v9 < < 6 ;
v31 = & item [ v8 ] . _iPLHP ;
goto LABEL_75 ;
case IPL_MANA :
item [ v8 ] . _iPLMana + = v9 < < 6 ;
goto LABEL_92 ;
case IPL_MANA_CURSE :
item [ v8 ] . _iPLMana - = v9 < < 6 ;
goto LABEL_92 ;
case IPL_DUR :
v32 = v8 ;
v33 = item [ v8 ] . _iMaxDur ;
v34 = v33 ;
v35 = v10 * v33 / 100 ;
item [ v32 ] . _iDurability + = v35 ;
item [ v32 ] . _iMaxDur = v35 + v34 ;
break ;
case IPL_DUR_CURSE :
v36 = v8 ;
v37 = item [ v8 ] . _iMaxDur - v9 * item [ v8 ] . _iMaxDur / 100 ;
item [ v8 ] . _iMaxDur = v37 ;
if ( v37 < 1 )
item [ v36 ] . _iMaxDur = 1 ;
item [ v36 ] . _iDurability = item [ v36 ] . _iMaxDur ;
break ;
case IPL_INDESTRUCTIBLE :
v38 = 255 ;
goto LABEL_119 ;
case IPL_LIGHT :
v28 = param1 ;
v29 = & item [ v8 ] . _iPLLight ;
LABEL_73 :
* v29 + = v28 ;
break ;
case IPL_LIGHT_CURSE :
v30 = param1 ;
v31 = & item [ v8 ] . _iPLLight ;
LABEL_75 :
* v31 - = v30 ;
break ;
case IPL_FIRE_ARROWS :
v24 = v8 ;
item [ v24 ] . _iFlags | = 8u ;
LABEL_77 :
item [ v24 ] . _iFMinDam = param1 ;
item [ v24 ] . _iFMaxDam = param2 ;
break ;
case IPL_LIGHT_ARROWS :
v25 = v8 ;
_HIBYTE ( item [ v8 ] . _iFlags ) | = 2u ;
LABEL_79 :
item [ v25 ] . _iLMinDam = param1 ;
item [ v25 ] . _iLMaxDam = param2 ;
break ;
case IPL_INVCURS :
item [ v8 ] . _iCurs = param1 ;
break ;
case IPL_THORNS :
_HIBYTE ( item [ v8 ] . _iFlags ) | = 4u ;
break ;
case IPL_NOMANA :
_HIBYTE ( item [ v8 ] . _iFlags ) | = 8u ;
goto LABEL_92 ;
case IPL_NOHEALPLR :
BYTE1 ( item [ v8 ] . _iFlags ) | = 1u ;
break ;
case IPL_ABSHALFTRAP :
_HIBYTE ( item [ v8 ] . _iFlags ) | = 0x10u ;
break ;
case IPL_KNOCKBACK :
BYTE1 ( item [ v8 ] . _iFlags ) | = 8u ;
break ;
case IPL_NOHEALMON :
BYTE1 ( item [ v8 ] . _iFlags ) | = 0x10u ;
break ;
case IPL_STEALMANA :
if ( param1 = = 3 )
BYTE1 ( item [ v8 ] . _iFlags ) | = 0x20u ;
if ( param1 = = 5 )
BYTE1 ( item [ v8 ] . _iFlags ) | = 0x40u ;
LABEL_92 :
drawmanaflag = 1 ;
break ;
case IPL_STEALLIFE :
if ( param1 = = 3 )
BYTE1 ( item [ v8 ] . _iFlags ) | = 0x80u ;
if ( param1 = = 5 )
BYTE2 ( item [ v8 ] . _iFlags ) | = 1u ;
drawhpflag = 1 ;
break ;
case IPL_TARGAC :
v11 = & item [ v8 ] . _iPLEnAc ;
goto LABEL_115 ;
case IPL_FASTATTACK :
if ( param1 = = 1 )
BYTE2 ( item [ v8 ] . _iFlags ) | = 2u ;
if ( param1 = = 2 )
BYTE2 ( item [ v8 ] . _iFlags ) | = 4u ;
if ( param1 = = 3 )
BYTE2 ( item [ v8 ] . _iFlags ) | = 8u ;
if ( param1 = = 4 )
BYTE2 ( item [ v8 ] . _iFlags ) | = 0x10u ;
break ;
case IPL_FASTRECOVER :
if ( param1 = = 1 )
BYTE2 ( item [ v8 ] . _iFlags ) | = 0x20u ;
if ( param1 = = 2 )
BYTE2 ( item [ v8 ] . _iFlags ) | = 0x40u ;
if ( param1 = = 3 )
BYTE2 ( item [ v8 ] . _iFlags ) | = 0x80u ;
break ;
case IPL_FASTBLOCK :
_HIBYTE ( item [ v8 ] . _iFlags ) | = 1u ;
break ;
case IPL_DAMMOD :
v11 = & item [ v8 ] . _iPLDamMod ;
LABEL_115 :
* v11 + = v10 ;
break ;
case IPL_RNDARROWVEL :
item [ v8 ] . _iFlags | = 4u ;
break ;
case IPL_SETDAM :
v39 = v8 ;
item [ v39 ] . _iMinDam = param1 ;
item [ v39 ] . _iMaxDam = param2 ;
break ;
case IPL_SETDUR :
v38 = param1 ;
LABEL_119 :
v40 = v8 ;
item [ v40 ] . _iDurability = v38 ;
item [ v40 ] . _iMaxDur = v38 ;
break ;
case IPL_NOMINSTR :
item [ v8 ] . _iMinStr = 0 ;
break ;
case IPL_SPELL :
v23 = v8 ;
item [ v23 ] . _iSpell = param1 ;
item [ v23 ] . _iCharges = param1 ;
item [ v23 ] . _iMaxCharges = param2 ;
break ;
case IPL_FASTSWING :
BYTE2 ( item [ v8 ] . _iFlags ) | = 8u ;
break ;
case IPL_ONEHAND :
item [ v8 ] . _iLoc = ILOC_ONEHAND ;
break ;
case IPL_3XDAMVDEM :
_HIBYTE ( item [ v8 ] . _iFlags ) | = 0x40u ;
break ;
case IPL_ALLRESZERO :
_HIBYTE ( item [ v8 ] . _iFlags ) | = 0x80u ;
break ;
case IPL_DRAINLIFE :
item [ v8 ] . _iFlags | = 0x40u ;
break ;
case IPL_RNDSTEALLIFE :
item [ v8 ] . _iFlags | = 2u ;
break ;
case IPL_INFRAVISION :
item [ v8 ] . _iFlags | = 1u ;
break ;
case IPL_SETAC :
item [ v8 ] . _iAC = v9 ;
break ;
case IPL_ADDACLIFE :
item [ v8 ] . _iPLHP = ( plr [ myplr ] . _pIBonusAC + plr [ myplr ] . _pIAC + plr [ myplr ] . _pDexterity / 5 ) < < 6 ;
break ;
case IPL_ADDMANAAC :
item [ v8 ] . _iAC + = ( plr [ myplr ] . _pMaxManaBase > > 6 ) / 10 ;
break ;
case IPL_FIRERESCLVL :
v41 = 30 - plr [ myplr ] . _pLevel ;
v42 = & item [ v8 ] . _iPLFR ;
* v42 = v41 ;
if ( v41 < 0 )
* v42 = 0 ;
break ;
case IPL_AC_CURSE :
v12 = & item [ v8 ] . _iAC ;
LABEL_62 :
* v12 - = v10 ;
break ;
default :
break ;
}
v43 = v8 ;
if ( item [ v43 ] . _iVAdd1 | | item [ v43 ] . _iVMult1 )
{
item [ v43 ] . _iVAdd2 = PLVal ( v10 , param1 , param2 , minval , maxval ) ;
item [ v43 ] . _iVMult2 = multval ;
}
else
{
item [ v43 ] . _iVAdd1 = PLVal ( v10 , param1 , param2 , minval , maxval ) ;
item [ v43 ] . _iVMult1 = multval ;
}
}
//----- (004215EF) --------------------------------------------------------
void __fastcall GetItemPower ( int i , int minlvl , int maxlvl , int flgs , int onlygood )
{
//int v6; // ecx
int pre ; // esi
//int v9; // ecx
unsigned char goe ; // bl
int v11 ; // edx
int v14 ; // ecx
int l [ 256 ] ; // [esp+4h] [ebp-494h]
char istr [ 128 ] ; // [esp+404h] [ebp-94h]
int post ; // [esp+488h] [ebp-10h]
int sufidx ; // [esp+48Ch] [ebp-Ch]
int preidx ; // [esp+490h] [ebp-8h]
pre = random ( 23 , 4 ) ;
post = random ( 23 , 3 ) ;
if ( pre & & ! post )
{
if ( random ( 23 , 2 ) )
post = 1 ;
else
pre = 0 ;
}
preidx = - 1 ;
sufidx = - 1 ;
goe = 0 ;
if ( ! onlygood )
{
if ( random ( 0 , 3 ) )
onlygood = 1 ;
}
if ( ! pre )
{
v11 = 0 ;
if ( PL_Prefix [ 0 ] . PLPower ! = - 1 )
{
v14 = 0 ;
do
{
if ( flgs & PL_Prefix [ v14 ] . PLIType )
{
if ( PL_Prefix [ v14 ] . PLMinLvl > = minlvl & & PL_Prefix [ v14 ] . PLMinLvl < = maxlvl & & ( ! onlygood | | PL_Prefix [ v14 ] . PLOk ) & & ( flgs ! = 256 | | PL_Prefix [ v14 ] . PLPower ! = 15 ) )
{
l [ v11 + + ] = v14 ;
if ( PL_Prefix [ v14 ] . PLDouble )
l [ v11 + + ] = v14 ;
}
}
v14 + + ;
}
while ( PL_Prefix [ v14 ] . PLPower ! = - 1 ) ;
if ( v11 )
{
preidx = l [ random ( 23 , v11 ) ] ;
sprintf ( istr , " %s %s " , PL_Prefix [ preidx ] . PLName , item [ i ] . _iIName ) ;
strcpy ( item [ i ] . _iIName , istr ) ;
item [ i ] . _iMagical = 1 ;
SaveItemPower (
i ,
PL_Prefix [ preidx ] . PLPower ,
PL_Prefix [ preidx ] . PLParam1 ,
PL_Prefix [ preidx ] . PLParam2 ,
PL_Prefix [ preidx ] . PLMinVal ,
PL_Prefix [ preidx ] . PLMaxVal ,
PL_Prefix [ preidx ] . PLMultVal ) ;
goe = PL_Prefix [ preidx ] . PLGOE ;
item [ i ] . _iPrePower = PL_Prefix [ preidx ] . PLPower ;
}
}
}
if ( post )
{
v11 = 0 ;
if ( PL_Suffix [ 0 ] . PLPower ! = - 1 )
{
v14 = 0 ;
do
{
if ( flgs & PL_Suffix [ v14 ] . PLIType )
{
if ( PL_Suffix [ v14 ] . PLMinLvl > = minlvl & & PL_Suffix [ v14 ] . PLMinLvl < = maxlvl & & ( goe | PL_Suffix [ v14 ] . PLGOE ) ! = 0x11 & & ( ! onlygood | | PL_Suffix [ v14 ] . PLOk ) )
l [ v11 + + ] = v14 ;
}
v14 + + ;
}
while ( PL_Suffix [ v14 ] . PLPower ! = - 1 ) ;
if ( v11 )
{
sufidx = l [ random ( 23 , v11 ) ] ;
sprintf ( istr , " %s of %s " , item [ i ] . _iIName , PL_Suffix [ sufidx ] . PLName ) ;
strcpy ( item [ i ] . _iIName , istr ) ;
item [ i ] . _iMagical = 1 ;
SaveItemPower (
i ,
PL_Suffix [ sufidx ] . PLPower ,
PL_Suffix [ sufidx ] . PLParam1 ,
PL_Suffix [ sufidx ] . PLParam2 ,
PL_Suffix [ sufidx ] . PLMinVal ,
PL_Suffix [ sufidx ] . PLMaxVal ,
PL_Suffix [ sufidx ] . PLMultVal ) ;
item [ i ] . _iSufPower = PL_Suffix [ sufidx ] . PLPower ;
}
}
}
if ( ! control_WriteStringToBuffer ( item [ i ] . _iIName ) )
{
strcpy ( item [ i ] . _iIName , AllItemsList [ item [ i ] . IDidx ] . iSName ) ;
if ( preidx ! = - 1 )
{
sprintf ( istr , " %s %s " , PL_Prefix [ preidx ] . PLName , item [ i ] . _iIName ) ;
strcpy ( item [ i ] . _iIName , istr ) ;
}
if ( sufidx ! = - 1 )
{
sprintf ( istr , " %s of %s " , item [ i ] . _iIName , PL_Suffix [ sufidx ] . PLName ) ;
strcpy ( item [ i ] . _iIName , istr ) ;
}
}
if ( preidx ! = - 1 | | sufidx ! = - 1 )
CalcItemValue ( i ) ;
}
// 4215EF: using guessed type int var_494[256];
//----- (0042191C) --------------------------------------------------------
void __fastcall GetItemBonus ( int i , int idata , int minlvl , int maxlvl , int onlygood )
{
if ( item [ i ] . _iClass ! = ICLASS_GOLD )
{
if ( minlvl > 25 )
minlvl = 25 ;
switch ( item [ i ] . _itype )
{
case ITYPE_SWORD :
case ITYPE_AXE :
case ITYPE_MACE :
GetItemPower ( i , minlvl , maxlvl , 0x1000 , onlygood ) ;
break ;
case ITYPE_BOW :
GetItemPower ( i , minlvl , maxlvl , 0x10 , onlygood ) ;
break ;
case ITYPE_SHIELD :
GetItemPower ( i , minlvl , maxlvl , 0x10000 , onlygood ) ;
break ;
case ITYPE_LARMOR :
case ITYPE_HELM :
case ITYPE_MARMOR :
case ITYPE_HARMOR :
GetItemPower ( i , minlvl , maxlvl , 0x100000 , onlygood ) ;
break ;
case ITYPE_STAFF :
GetStaffSpell ( i , maxlvl , onlygood ) ;
break ;
case ITYPE_RING :
case ITYPE_AMULET :
GetItemPower ( i , minlvl , maxlvl , 1 , onlygood ) ;
break ;
default :
return ;
}
}
}
//----- (004219C1) --------------------------------------------------------
void __fastcall SetupItem ( int i )
{
int it ; // eax
int il ; // eax
it = ItemCAnimTbl [ item [ i ] . _iCurs ] ;
item [ i ] . _iAnimWidth = 96 ;
item [ i ] . _iAnimXOff = 16 ;
il = ItemAnimLs [ it ] ;
item [ i ] . ItemFrame = Item2Frm [ it ] ;
item [ i ] . _iAnimLen = il ;
item [ i ] . _iIdentified = 0 ;
item [ i ] . _iPostDraw = 0 ;
if ( ! plr [ myplr ] . pLvlLoad )
{
item [ i ] . _iSelFlag = 0 ;
il = 1 ;
item [ i ] . _iAnimFlag = 1 ;
}
else
{
item [ i ] . _iAnimFlag = 0 ;
item [ i ] . _iSelFlag = 1 ;
}
item [ i ] . _iAnimFrame = il ;
}
//----- (00421A4B) --------------------------------------------------------
int __fastcall RndItem ( int m )
{
int ri ; // esi
int i ; // edx
int ril [ 512 ] ; // [esp+4h] [ebp-800h]
if ( monster [ m ] . MData - > mTreasure & 0x8000 )
return - 1 - ( monster [ m ] . MData - > mTreasure & 0xFFF ) ;
if ( monster [ m ] . MData - > mTreasure & 0x4000 )
return 0 ;
if ( random ( 24 , 100 ) > 40 )
return 0 ;
if ( random ( 24 , 100 ) > 25 )
return 1 ;
ri = 0 ;
i = 0 ;
if ( AllItemsList [ 0 ] . iLoc ! = - 1 )
{
do
{
if ( AllItemsList [ i ] . iRnd = = 2 & & monster [ m ] . mLevel > = AllItemsList [ i ] . iMinMLvl )
ril [ ri + + ] = i ;
if ( AllItemsList [ i ] . iRnd & & monster [ m ] . mLevel > = AllItemsList [ i ] . iMinMLvl )
ril [ ri + + ] = i ;
if ( AllItemsList [ i ] . iSpell = = SPL_RESURRECT & & gbMaxPlayers = = 1 )
- - ri ;
if ( AllItemsList [ i ] . iSpell = = SPL_HEALOTHER & & gbMaxPlayers = = 1 )
- - ri ;
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 24 , ri ) ] + 1 ;
}
// 679660: using guessed type char gbMaxPlayers;
// 421A4B: using guessed type int var_800[512];
//----- (00421B32) --------------------------------------------------------
int __fastcall RndUItem ( int m )
{
int ri ; // edx
int i ; // ebp
bool okflag ; // edi
int ril [ 512 ] ; // [esp+0h] [ebp-800h]
if ( m ! = - 1 )
{
if ( monster [ m ] . MData - > mTreasure < 0 & & gbMaxPlayers = = 1 )
return - 1 - ( monster [ m ] . MData - > mTreasure & 0xFFF ) ;
}
ri = 0 ;
i = 0 ;
if ( AllItemsList [ 0 ] . iLoc ! = - 1 )
{
do
{
okflag = 1 ;
if ( ! AllItemsList [ i ] . iRnd )
okflag = 0 ;
if ( m = = - 1 )
{
if ( 2 * currlevel - AllItemsList [ i ] . iMinMLvl < 0 )
okflag = 0 ;
}
else
{
if ( monster [ m ] . mLevel - AllItemsList [ i ] . iMinMLvl < 0 )
okflag = 0 ;
}
if ( ! AllItemsList [ i ] . itype )
okflag = 0 ;
if ( AllItemsList [ i ] . itype = = ITYPE_GOLD )
okflag = 0 ;
if ( AllItemsList [ i ] . itype = = ITYPE_0E )
okflag = 0 ;
if ( AllItemsList [ i ] . iMiscId = = IMISC_BOOK )
okflag = 1 ;
if ( AllItemsList [ i ] . iSpell = = SPL_RESURRECT & & gbMaxPlayers = = 1 )
okflag = 0 ;
if ( AllItemsList [ i ] . iSpell = = SPL_HEALOTHER & & gbMaxPlayers = = 1 )
okflag = 0 ;
if ( okflag )
ril [ ri + + ] = i ;
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 25 , ri ) ] ;
}
// 679660: using guessed type char gbMaxPlayers;
// 421B32: using guessed type int var_800[512];
//----- (00421C2A) --------------------------------------------------------
int __cdecl RndAllItems ( )
{
int ri ; // esi
int i ; // edi
int ril [ 512 ] ; // [esp+0h] [ebp-800h]
if ( random ( 26 , 100 ) > 25 )
return 0 ;
ri = 0 ;
i = 0 ;
if ( AllItemsList [ 0 ] . iLoc ! = - 1 )
{
do
{
if ( AllItemsList [ i ] . iRnd & & 2 * currlevel > = AllItemsList [ i ] . iMinMLvl )
ril [ ri + + ] = i ;
if ( AllItemsList [ i ] . iSpell = = SPL_RESURRECT & & gbMaxPlayers = = 1 )
- - ri ;
if ( AllItemsList [ i ] . iSpell = = SPL_HEALOTHER & & gbMaxPlayers = = 1 )
- - ri ;
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 26 , ri ) ] ;
}
// 679660: using guessed type char gbMaxPlayers;
// 421C2A: using guessed type int var_800[512];
//----- (00421CB7) --------------------------------------------------------
int __fastcall RndTypeItems ( int itype , int imid )
{
int i ; // edi
bool okflag ; // esi
int ril [ 512 ] ; // [esp+4h] [ebp-80Ch]
int ri ; // [esp+80Ch] [ebp-4h]
ri = 0 ;
i = 0 ;
if ( AllItemsList [ 0 ] . iLoc ! = - 1 )
{
do
{
okflag = 1 ;
if ( ! AllItemsList [ i ] . iRnd )
okflag = 0 ;
if ( 2 * currlevel < AllItemsList [ i ] . iMinMLvl )
okflag = 0 ;
if ( AllItemsList [ i ] . itype ! = itype )
okflag = 0 ;
if ( imid ! = - 1 & & AllItemsList [ i ] . iMiscId ! = imid )
okflag = 0 ;
if ( okflag )
ril [ ri + + ] = i ;
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 27 , ri ) ] ;
}
// 421CB7: using guessed type int var_80C[512];
//----- (00421D41) --------------------------------------------------------
int __fastcall CheckUnique ( int i , int lvl , int uper , bool recreate )
{
int numu ; // ebx
int j ; // esi
int idata ; // eax
char uok [ 128 ] ; // [esp+8h] [ebp-84h]
if ( random ( 28 , 100 ) > uper )
return - 1 ;
numu = 0 ;
memset ( uok , 0 , 0x80u ) ;
if ( UniqueItemList [ 0 ] . UIItemId = = - 1 )
return - 1 ;
j = 0 ;
do
{
if ( UniqueItemList [ j ] . UIItemId = = AllItemsList [ item [ i ] . IDidx ] . iItemId
& & lvl > = UniqueItemList [ j ] . UIMinLvl
& & ( recreate | | ! UniqueItemFlag [ j ] | | gbMaxPlayers ! = 1 ) )
{
uok [ j ] = 1 ;
+ + numu ;
}
j + + ;
}
while ( UniqueItemList [ j ] . UIItemId ! = - 1 ) ;
if ( ! numu )
return - 1 ;
random ( 29 , 10 ) ;
idata = 0 ;
if ( numu > 0 )
{
while ( 1 )
{
if ( uok [ idata ] )
- - numu ;
if ( numu < = 0 )
break ;
if ( + + idata = = 128 )
idata = 0 ;
}
}
return idata ;
}
// 679660: using guessed type char gbMaxPlayers;
// 421D41: using guessed type char var_84[128];
//----- (00421E11) --------------------------------------------------------
void __fastcall GetUniqueItem ( int i , int uid )
{
UniqueItemFlag [ uid ] = 1 ;
SaveItemPower ( i , UniqueItemList [ uid ] . UIPower1 , UniqueItemList [ uid ] . UIParam1 , UniqueItemList [ uid ] . UIParam2 , 0 , 0 , 1 ) ;
if ( UniqueItemList [ uid ] . UINumPL > 1 )
SaveItemPower ( i , UniqueItemList [ uid ] . UIPower2 , UniqueItemList [ uid ] . UIParam3 , UniqueItemList [ uid ] . UIParam4 , 0 , 0 , 1 ) ;
if ( UniqueItemList [ uid ] . UINumPL > 2 )
SaveItemPower ( i , UniqueItemList [ uid ] . UIPower3 , UniqueItemList [ uid ] . UIParam5 , UniqueItemList [ uid ] . UIParam6 , 0 , 0 , 1 ) ;
if ( UniqueItemList [ uid ] . UINumPL > 3 )
SaveItemPower ( i , UniqueItemList [ uid ] . UIPower4 , UniqueItemList [ uid ] . UIParam7 , UniqueItemList [ uid ] . UIParam8 , 0 , 0 , 1 ) ;
if ( UniqueItemList [ uid ] . UINumPL > 4 )
SaveItemPower ( i , UniqueItemList [ uid ] . UIPower5 , UniqueItemList [ uid ] . UIParam9 , UniqueItemList [ uid ] . UIParam10 , 0 , 0 , 1 ) ;
if ( UniqueItemList [ uid ] . UINumPL > 5 )
SaveItemPower ( i , UniqueItemList [ uid ] . UIPower6 , UniqueItemList [ uid ] . UIParam11 , UniqueItemList [ uid ] . UIParam12 , 0 , 0 , 1 ) ;
strcpy ( item [ i ] . _iIName , UniqueItemList [ uid ] . UIName ) ;
item [ i ] . _iIvalue = UniqueItemList [ uid ] . UIValue ;
if ( item [ i ] . _iMiscId = = IMISC_UNIQUE )
item [ i ] . _iSeed = uid ;
item [ i ] . _iCreateInfo | = 0x0200 ;
item [ i ] . _iUid = uid ;
item [ i ] . _iMagical = 2 ;
}
//----- (00421F5C) --------------------------------------------------------
void __fastcall SpawnUnique ( int uid , int x , int y )
{
int ii ; // esi
int itype ; // edx
if ( numitems < 127 )
{
ii = itemavail [ 0 ] ;
GetSuperItemSpace ( x , y , itemavail [ 0 ] ) ;
itype = 0 ;
itemactive [ numitems ] = ii ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
if ( AllItemsList [ 0 ] . iItemId ! = UniqueItemList [ uid ] . UIItemId )
{
while ( AllItemsList [ itype ] . iItemId ! = UniqueItemList [ uid ] . UIItemId )
{
itype + + ;
}
}
GetItemAttrs ( ii , itype , currlevel ) ;
GetUniqueItem ( ii , uid ) ;
SetupItem ( ii ) ;
+ + numitems ;
}
}
// 421F5C: could not find valid save-restore pair for esi
//----- (00421FE6) --------------------------------------------------------
void __fastcall ItemRndDur ( int ii )
{
if ( item [ ii ] . _iDurability & & item [ ii ] . _iDurability ! = 255 )
item [ ii ] . _iDurability = random ( 0 , item [ ii ] . _iMaxDur > > 1 ) + ( item [ ii ] . _iMaxDur > > 2 ) + 1 ;
}
//----- (00422024) --------------------------------------------------------
void __fastcall SetupAllItems ( int ii , int idx , int iseed , int lvl , int uper , int onlygood , int recreate , int pregen )
{
int iblvl ; // edi
int uid ; // eax
item [ ii ] . _iSeed = iseed ;
SetRndSeed ( iseed ) ;
GetItemAttrs ( ii , idx , lvl > > 1 ) ;
item [ ii ] . _iCreateInfo = lvl ;
if ( pregen )
item [ ii ] . _iCreateInfo = lvl | 0x8000 ;
if ( onlygood )
item [ ii ] . _iCreateInfo | = 0x40 ;
if ( uper = = 15 )
item [ ii ] . _iCreateInfo | = 0x80 ;
else if ( uper = = 1 )
item [ ii ] . _iCreateInfo | = 0x0100 ;
if ( item [ ii ] . _iMiscId = = IMISC_UNIQUE )
{
if ( item [ ii ] . _iLoc ! = ILOC_UNEQUIPABLE )
GetUniqueItem ( ii , iseed ) ;
}
else
{
iblvl = - 1 ;
if ( random ( 32 , 100 ) > 10 & & random ( 33 , 100 ) > lvl | | ( iblvl = lvl , lvl = = - 1 ) )
{
if ( item [ ii ] . _iMiscId ! = IMISC_STAFF | | ( iblvl = lvl , lvl = = - 1 ) )
{
if ( item [ ii ] . _iMiscId ! = IMISC_RING | | ( iblvl = lvl , lvl = = - 1 ) )
{
if ( item [ ii ] . _iMiscId = = IMISC_AMULET )
iblvl = lvl ;
}
}
}
if ( onlygood )
iblvl = lvl ;
if ( uper = = 15 )
iblvl = lvl + 4 ;
if ( iblvl ! = - 1 )
{
uid = CheckUnique ( ii , iblvl , uper , recreate ) ;
if ( uid = = - 1 )
{
GetItemBonus ( ii , idx , iblvl > > 1 , iblvl , onlygood ) ;
}
else
{
GetUniqueItem ( ii , uid ) ;
item [ ii ] . _iCreateInfo | = 0x0200 ;
}
}
if ( item [ ii ] . _iMagical ! = 2 )
ItemRndDur ( ii ) ;
}
SetupItem ( ii ) ;
}
//----- (0042217A) --------------------------------------------------------
void __fastcall SpawnItem ( int m , int x , int y , unsigned char sendmsg )
{
int ii ; // edi
int onlygood ; // [esp+Ch] [ebp-Ch]
int idx ; // [esp+14h] [ebp-4h]
if ( ! monster [ m ] . _uniqtype & & ( monster [ m ] . MData - > mTreasure > = 0 | | gbMaxPlayers = = 1 ) )
{
if ( quests [ 1 ] . _qactive = = 2 & & quests [ 1 ] . _qvar1 = = 5 )
{
idx = 18 ; // Brain
quests [ 1 ] . _qvar1 = 6 ;
goto LABEL_13 ;
}
idx = RndItem ( m ) ;
if ( ! idx )
return ;
if ( idx > 0 )
{
onlygood = 0 ;
idx - - ;
goto LABEL_13 ;
}
LABEL_10 :
SpawnUnique ( - 1 - idx , x , y ) ;
return ;
}
idx = RndUItem ( m ) ;
if ( idx < 0 )
goto LABEL_10 ;
onlygood = 1 ;
LABEL_13 :
if ( numitems < 127 )
{
ii = itemavail [ 0 ] ;
GetSuperItemSpace ( x , y , itemavail [ 0 ] ) ;
itemactive [ numitems ] = ii ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
if ( ! monster [ m ] . _uniqtype )
SetupAllItems ( ii , idx , GetRndSeed ( ) , monster [ m ] . MData - > mLevel , 1 , onlygood , 0 , 0 ) ;
else
SetupAllItems ( ii , idx , GetRndSeed ( ) , monster [ m ] . MData - > mLevel , 15 , onlygood , 0 , 0 ) ;
+ + numitems ;
if ( sendmsg )
NetSendCmdDItem ( 0 , ii ) ;
}
}
// 679660: using guessed type char gbMaxPlayers;
//----- (00422290) --------------------------------------------------------
void __fastcall CreateItem ( int uid , int x , int y )
{
int ii ; // esi
int idx ; // edx
if ( numitems < 127 )
{
ii = itemavail [ 0 ] ;
GetSuperItemSpace ( x , y , itemavail [ 0 ] ) ;
idx = 0 ;
itemactive [ numitems ] = ii ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
if ( AllItemsList [ 0 ] . iItemId ! = UniqueItemList [ uid ] . UIItemId )
{
while ( AllItemsList [ idx ] . iItemId ! = UniqueItemList [ uid ] . UIItemId )
{
idx + + ;
}
}
GetItemAttrs ( ii , idx , currlevel ) ;
GetUniqueItem ( ii , uid ) ;
SetupItem ( ii ) ;
+ + numitems ;
item [ ii ] . _iMagical = 2 ;
}
}
// 422290: could not find valid save-restore pair for esi
//----- (0042232B) --------------------------------------------------------
void __fastcall CreateRndItem ( int x , int y , unsigned char onlygood , unsigned char sendmsg , int delta )
{
int idx ; // edi
int ii ; // esi
if ( onlygood )
idx = RndUItem ( - 1 ) ;
else
idx = RndAllItems ( ) ;
if ( numitems < 127 )
{
ii = itemavail [ 0 ] ;
GetSuperItemSpace ( x , y , itemavail [ 0 ] ) ;
itemactive [ numitems ] = ii ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
SetupAllItems ( ii , idx , GetRndSeed ( ) , 2 * currlevel , 1 , onlygood , 0 , delta ) ;
if ( sendmsg )
NetSendCmdDItem ( 0 , ii ) ;
if ( delta )
DeltaAddItem ( ii ) ;
+ + numitems ;
}
}
//----- (004223D0) --------------------------------------------------------
void __fastcall SetupAllUseful ( int ii , int iseed , int lvl )
{
int idx ; // esi
item [ ii ] . _iSeed = iseed ;
SetRndSeed ( iseed ) ;
idx = 25 - ( random ( 34 , 2 ) ! = 0 ) ;
if ( lvl > 1 )
{
if ( ! random ( 34 , 3 ) )
idx = 27 ; // unique?
}
GetItemAttrs ( ii , idx , lvl ) ;
item [ ii ] . _iCreateInfo = lvl + 0x180 ;
SetupItem ( ii ) ;
}
//----- (0042243D) --------------------------------------------------------
void __fastcall CreateRndUseful ( int pnum , int x , int y , unsigned char sendmsg )
{
int ii ; // esi
if ( numitems < 127 )
{
ii = itemavail [ 0 ] ;
GetSuperItemSpace ( x , y , itemavail [ 0 ] ) ;
itemactive [ numitems ] = ii ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
SetupAllUseful ( ii , GetRndSeed ( ) , currlevel ) ;
if ( sendmsg )
NetSendCmdDItem ( 0 , ii ) ;
+ + numitems ;
}
}
//----- (004224A6) --------------------------------------------------------
void __fastcall CreateTypeItem ( int x , int y , unsigned char onlygood , int itype , int imisc , int sendmsg , int delta )
{
int idx ; // edi
int ii ; // esi
if ( itype = = ITYPE_GOLD )
idx = 0 ;
else
idx = RndTypeItems ( itype , imisc ) ;
if ( numitems < 127 )
{
ii = itemavail [ 0 ] ;
GetSuperItemSpace ( x , y , itemavail [ 0 ] ) ;
itemactive [ numitems ] = ii ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
SetupAllItems ( ii , idx , GetRndSeed ( ) , 2 * currlevel , 1 , onlygood , 0 , delta ) ;
if ( sendmsg )
NetSendCmdDItem ( 0 , ii ) ;
if ( delta )
DeltaAddItem ( ii ) ;
+ + numitems ;
}
}
//----- (0042254A) --------------------------------------------------------
void __fastcall RecreateItem ( int ii , int idx , unsigned short ic , int iseed , int ivalue )
{
int uper ; // esi
int onlygood ; // edx
int recreate ; // ebx
int pregen ; // edi
if ( idx )
{
if ( ic )
{
if ( ic & 0x7C00 )
{
RecreateTownItem ( ii , idx , ic , iseed , ivalue ) ;
}
else if ( ( ic & 0x0180 ) = = 0x0180 )
{
SetupAllUseful ( ii , iseed , ic & 0x3F ) ;
}
else
{
uper = 0 ;
onlygood = 0 ;
recreate = 0 ;
pregen = 0 ;
if ( ic & 0x0100 )
uper = 1 ;
if ( ic & 0x80 )
uper = 15 ;
if ( ic & 0x40 )
onlygood = 1 ;
if ( ic & 0x0200 )
recreate = 1 ;
if ( ic & 0x8000 )
pregen = 1 ;
SetupAllItems ( ii , idx , iseed , ic & 0x3F , uper , onlygood , recreate , pregen ) ;
}
}
else
{
SetPlrHandItem ( & item [ ii ] , idx ) ;
SetPlrHandSeed ( & item [ ii ] , iseed ) ;
}
}
else
{
SetPlrHandItem ( & item [ ii ] , IDI_GOLD ) ;
item [ ii ] . _iSeed = iseed ;
item [ ii ] . _iCreateInfo = ic ;
item [ ii ] . _ivalue = ivalue ;
if ( ivalue < 2500 )
{
if ( ivalue > 1000 )
item [ ii ] . _iCurs = 5 ;
else
item [ ii ] . _iCurs = 4 ;
}
else
{
item [ ii ] . _iCurs = 6 ;
}
}
}
//----- (0042265C) --------------------------------------------------------
void __fastcall RecreateEar ( int ii , unsigned short ic , int iseed , unsigned char Id , int dur , int mdur , int ch , int mch , int ivalue , int ibuff )
{
SetPlrHandItem ( & item [ ii ] , IDI_EAR ) ;
tempstr [ 0 ] = ( ic > > 8 ) & 0x7F ;
tempstr [ 1 ] = ic & 0x7F ;
tempstr [ 2 ] = ( iseed > > 24 ) & 0x7F ;
tempstr [ 3 ] = ( iseed > > 16 ) & 0x7F ;
tempstr [ 4 ] = ( iseed > > 8 ) & 0x7F ;
tempstr [ 5 ] = iseed & 0x7F ;
tempstr [ 6 ] = Id & 0x7F ;
tempstr [ 7 ] = dur & 0x7F ;
tempstr [ 8 ] = mdur & 0x7F ;
tempstr [ 9 ] = ch & 0x7F ;
tempstr [ 10 ] = mch & 0x7F ;
tempstr [ 11 ] = ( ivalue > > 8 ) & 0x7F ;
tempstr [ 12 ] = ( ibuff > > 24 ) & 0x7F ;
tempstr [ 13 ] = ( ibuff > > 16 ) & 0x7F ;
tempstr [ 14 ] = ( ibuff > > 8 ) & 0x7F ;
tempstr [ 15 ] = ibuff & 0x7F ;
tempstr [ 16 ] = ' \0 ' ;
sprintf ( item [ ii ] . _iName , " Ear of %s " , tempstr ) ;
item [ ii ] . _iCurs = ( ( ivalue > > 6 ) & 3 ) + 19 ;
item [ ii ] . _iCreateInfo = ic ;
item [ ii ] . _ivalue = ivalue & 0x3F ;
item [ ii ] . _iSeed = iseed ;
}
//----- (00422795) --------------------------------------------------------
void __fastcall SpawnQuestItem ( int itemid , int x , int y , int randarea , int selflag )
{
int i ; // ebx
BOOL failed ; // eax
int j ; // esi
int v12 ; // ebx
int v13 ; // esi
int tries ; // [esp+10h] [ebp-4h]
if ( randarea )
{
tries = 0 ;
while ( 1 )
{
LABEL_3 :
if ( + + tries > 1000 & & randarea > 1 )
- - randarea ;
x = random ( 0 , 112 ) ;
y = random ( 0 , 112 ) ;
i = 0 ;
failed = 0 ;
if ( randarea < = 0 )
break ;
while ( ! failed )
{
for ( j = 0 ; j < randarea ; j + + )
{
if ( failed )
break ;
failed = ItemSpaceOk ( i + x , j + y ) = = 0 ;
}
if ( + + i > = randarea )
{
if ( failed )
goto LABEL_3 ;
goto LABEL_13 ;
}
}
}
}
LABEL_13 :
if ( numitems < 127 )
{
v12 = itemavail [ 0 ] ;
v13 = itemavail [ 0 ] ;
item [ v13 ] . _ix = x ;
itemactive [ numitems ] = v12 ;
item [ v13 ] . _iy = y ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ; /* double check */
dItem [ x ] [ y ] = v12 + 1 ;
GetItemAttrs ( v12 , itemid , currlevel ) ;
SetupItem ( v12 ) ;
item [ v13 ] . _iPostDraw = 1 ;
if ( selflag )
{
item [ v13 ] . _iAnimFlag = 0 ;
item [ v13 ] . _iSelFlag = selflag ;
item [ v13 ] . _iAnimFrame = item [ v13 ] . _iAnimLen ;
}
+ + numitems ;
}
}
//----- (004228B1) --------------------------------------------------------
void __cdecl SpawnRock ( )
{
BOOL v0 ; // edx
int v1 ; // eax
int v2 ; // ecx
BOOL v3 ; // ebx
int v4 ; // ebx
int v5 ; // ecx
int v6 ; // esi
int * v7 ; // edx
int v8 ; // eax
int v9 ; // edi
int v10 ; // ST04_4
//int v11; // [esp+8h] [ebp-4h]
v0 = 0 ;
v1 = 0 ;
if ( nobjects > 0 )
{
v2 = 0 ; //v11; /* chceck */
while ( ! v0 )
{
v2 = objectactive [ v1 ] ;
v3 = object [ objectactive [ v1 + + ] ] . _otype = = OBJ_STAND ;
v0 = v3 ;
if ( v1 > = nobjects )
{
if ( ! v3 )
return ;
break ;
}
}
v4 = itemavail [ 0 ] ;
v5 = v2 ;
v6 = itemavail [ 0 ] ;
v7 = & itemavail [ - numitems + 126 ] ;
itemactive [ numitems ] = itemavail [ 0 ] ;
v8 = object [ v5 ] . _ox ;
item [ v6 ] . _ix = v8 ;
v9 = object [ v5 ] . _oy ;
itemavail [ 0 ] = * v7 ;
dItem [ v8 ] [ v9 ] = v4 + 1 ;
v10 = currlevel ;
item [ v6 ] . _iy = v9 ;
GetItemAttrs ( v4 , IDI_ROCK , v10 ) ;
SetupItem ( v4 ) ;
+ + numitems ;
item [ v6 ] . _iSelFlag = 2 ;
item [ v6 ] . _iPostDraw = 1 ;
item [ v6 ] . _iAnimFrame = 11 ;
}
}
//----- (00422989) --------------------------------------------------------
void __fastcall RespawnItem ( int i , bool FlipFlag )
{
int it ; // ecx
int il ; // eax
item [ i ] . _iAnimWidth = 96 ;
item [ i ] . _iAnimXOff = 16 ;
it = ItemCAnimTbl [ item [ i ] . _iCurs ] ;
il = ItemAnimLs [ it ] ;
item [ i ] . _iAnimLen = il ;
item [ i ] . ItemFrame = Item2Frm [ it ] ;
item [ i ] . _iPostDraw = 0 ;
item [ i ] . _iRequest = 0 ;
if ( FlipFlag )
{
item [ i ] . _iSelFlag = 0 ;
il = 1 ;
item [ i ] . _iAnimFlag = 1 ;
}
else
{
item [ i ] . _iAnimFlag = 0 ;
item [ i ] . _iSelFlag = 1 ;
}
item [ i ] . _iAnimFrame = il ;
if ( item [ i ] . _iCurs = = 76 ) // Magic Rock
{
item [ i ] . _iSelFlag = 1 ;
PlaySfxLoc ( ItemDropSnds [ it ] , item [ i ] . _ix , item [ i ] . _iy ) ;
}
if ( item [ i ] . _iCurs = = 126 ) // Tavern Sign
item [ i ] . _iSelFlag = 1 ;
if ( item [ i ] . _iCurs = = 140 ) // Anvil of Fury
item [ i ] . _iSelFlag = 1 ;
}
//----- (00422A50) --------------------------------------------------------
void __fastcall DeleteItem ( int ii , int i )
{
int v2 ; // eax
bool v3 ; // zf
bool v4 ; // sf
v2 = numitems - 1 ;
v3 = numitems = = 1 ;
v4 = numitems - 1 < 0 ;
itemavail [ - numitems + 127 ] = ii ;
numitems = v2 ;
if ( ! v4 & & ! v3 & & i ! = v2 )
itemactive [ i ] = itemactive [ v2 ] ;
}
//----- (00422A84) --------------------------------------------------------
void __cdecl ItemDoppel ( )
{
int idoppelx ; // esi
ItemStruct * i ; // edx
if ( gbMaxPlayers ! = 1 )
{
for ( idoppelx = 16 ; idoppelx < 96 ; idoppelx + + )
{
if ( dItem [ idoppelx ] [ idoppely ] )
{
i = & item [ dItem [ idoppelx ] [ idoppely ] - 1 ] ;
if ( i - > _ix ! = idoppelx | | i - > _iy ! = idoppely )
dItem [ idoppelx ] [ idoppely ] = 0 ;
}
}
if ( idoppely + + = = 95 )
idoppely = 16 ;
}
}
// 492EAC: using guessed type int idoppely;
// 679660: using guessed type char gbMaxPlayers;
//----- (00422ADE) --------------------------------------------------------
void __cdecl ProcessItems ( )
{
int i ; // edi
int ii ; // esi
for ( i = 0 ; i < numitems ; i + + )
{
ii = itemactive [ i ] ;
if ( item [ ii ] . _iAnimFlag )
{
item [ ii ] . _iAnimFrame + + ;
if ( item [ ii ] . _iCurs = = 76 ) // Magic Rock
{
if ( item [ ii ] . _iSelFlag = = 1 & & item [ ii ] . _iAnimFrame = = 11 )
item [ ii ] . _iAnimFrame = 1 ;
if ( item [ ii ] . _iSelFlag = = 2 & & item [ ii ] . _iAnimFrame = = 21 )
item [ ii ] . _iAnimFrame = 11 ;
}
else
{
if ( item [ ii ] . _iAnimFrame = = item [ ii ] . _iAnimLen > > 1 )
PlaySfxLoc ( ItemDropSnds [ ItemCAnimTbl [ item [ ii ] . _iCurs ] ] , item [ ii ] . _ix , item [ ii ] . _iy ) ;
if ( item [ ii ] . _iAnimFrame > = item [ ii ] . _iAnimLen )
{
item [ ii ] . _iAnimFlag = 0 ;
item [ ii ] . _iAnimFrame = item [ ii ] . _iAnimLen ;
item [ ii ] . _iSelFlag = 1 ;
}
}
}
}
ItemDoppel ( ) ;
}
//----- (00422BB2) --------------------------------------------------------
void __cdecl FreeItemGFX ( )
{
int i ; // esi
void * v1 ; // ecx
for ( i = 0 ; i < 35 ; i + + )
{
v1 = ( void * ) Item2Frm [ i ] ;
Item2Frm [ i ] = 0 ;
mem_free_dbg ( v1 ) ;
}
}
//----- (00422BCF) --------------------------------------------------------
void __fastcall GetItemFrm ( int i )
{
item [ i ] . ItemFrame = Item2Frm [ ItemCAnimTbl [ item [ i ] . _iCurs ] ] ;
}
//----- (00422BF0) --------------------------------------------------------
void __fastcall GetItemStr ( int i )
{
int nGold ; // esi
if ( item [ i ] . _itype = = ITYPE_GOLD )
{
nGold = item [ i ] . _ivalue ;
sprintf ( infostr , " %i gold %s " , nGold , get_pieces_str ( nGold ) ) ;
}
else
{
if ( ! item [ i ] . _iIdentified )
strcpy ( infostr , item [ i ] . _iName ) ;
else
strcpy ( infostr , item [ i ] . _iIName ) ;
if ( item [ i ] . _iMagical = = 1 )
infoclr = COL_BLUE ;
if ( item [ i ] . _iMagical = = 2 )
infoclr = COL_GOLD ;
}
}
// 4B883C: using guessed type int infoclr;
//----- (00422C63) --------------------------------------------------------
void __fastcall CheckIdentify ( int pnum , int cii )
{
ItemStruct * pi ; // esi
pi = & plr [ pnum ] . InvBody [ cii ] ;
pi - > _iIdentified = 1 ;
CalcPlrInv ( pnum , 1 ) ;
if ( pnum = = myplr )
SetCursor ( CURSOR_HAND ) ;
}
//----- (00422C9C) --------------------------------------------------------
void __fastcall DoRepair ( int pnum , int cii )
{
PlayerStruct * p ; // eax
ItemStruct * pi ; // esi
p = & plr [ pnum ] ;
pi = & p - > InvBody [ cii ] ;
PlaySfxLoc ( IS_REPAIR , p - > WorldX , p - > WorldY ) ;
RepairItem ( pi , p - > _pLevel ) ;
CalcPlrInv ( pnum , 1 ) ;
if ( pnum = = myplr )
SetCursor ( CURSOR_HAND ) ;
}
//----- (00422CF6) --------------------------------------------------------
void __fastcall RepairItem ( ItemStruct * i , int lvl )
{
int rep ; // edi
int d ; // eax
if ( i - > _iDurability ! = i - > _iMaxDur )
{
if ( i - > _iMaxDur > 0 )
{
rep = 0 ;
while ( 1 )
{
rep + = lvl + random ( 37 , lvl ) ;
d = i - > _iMaxDur / ( lvl + 9 ) ;
if ( d < 1 )
d = 1 ;
if ( i - > _iMaxDur = = d )
break ;
i - > _iMaxDur - = d ;
if ( rep + i - > _iDurability > = i - > _iMaxDur )
{
i - > _iDurability + = rep ;
if ( i - > _iDurability > i - > _iMaxDur )
i - > _iDurability = i - > _iMaxDur ;
return ;
}
}
}
i - > _itype = - 1 ;
}
}
//----- (00422D6C) --------------------------------------------------------
void __fastcall DoRecharge ( int pnum , int cii )
{
PlayerStruct * p ; // eax
ItemStruct * pi ; // esi
p = & plr [ pnum ] ;
pi = & p - > InvBody [ cii ] ;
if ( pi - > _itype = = ITYPE_STAFF & & pi - > _iSpell )
{
RechargeItem ( pi , random ( 38 , p - > _pLevel / spelldata [ pi - > _iSpell ] . sBookLvl ) + 1 ) ;
CalcPlrInv ( pnum , 1 ) ;
}
if ( pnum = = myplr )
SetCursor ( CURSOR_HAND ) ;
}
//----- (00422DDD) --------------------------------------------------------
void __fastcall RechargeItem ( ItemStruct * i , int r )
{
if ( i - > _iCharges ! = i - > _iMaxCharges )
{
while ( 1 )
{
if ( i - > _iMaxCharges - - = = 1 )
break ;
i - > _iCharges + = r ;
if ( i - > _iCharges > = i - > _iMaxCharges )
{
if ( i - > _iCharges > i - > _iMaxCharges )
i - > _iCharges = i - > _iMaxCharges ;
return ;
}
}
}
}
//----- (00422E14) --------------------------------------------------------
void __fastcall PrintItemOil ( char IDidx )
{
switch ( IDidx )
{
case IMISC_FULLHEAL :
strcpy ( tempstr , " fully recover life " ) ;
break ;
case IMISC_HEAL :
strcpy ( tempstr , " recover partial life " ) ;
break ;
case IMISC_OLDHEAL :
strcpy ( tempstr , " recover life " ) ;
break ;
case IMISC_DEADHEAL :
strcpy ( tempstr , " deadly heal " ) ;
break ;
case IMISC_MANA :
strcpy ( tempstr , " recover mana " ) ;
break ;
case IMISC_FULLMANA :
strcpy ( tempstr , " fully recover mana " ) ;
break ;
case IMISC_ELIXSTR :
strcpy ( tempstr , " increase strength " ) ;
break ;
case IMISC_ELIXMAG :
strcpy ( tempstr , " increase magic " ) ;
break ;
case IMISC_ELIXDEX :
strcpy ( tempstr , " increase dexterity " ) ;
break ;
case IMISC_ELIXVIT :
strcpy ( tempstr , " increase vitality " ) ;
break ;
case IMISC_ELIXWEAK :
case IMISC_ELIXDIS :
strcpy ( tempstr , " decrease strength " ) ;
break ;
case IMISC_ELIXCLUM :
strcpy ( tempstr , " decrease dexterity " ) ;
break ;
case IMISC_ELIXSICK :
strcpy ( tempstr , " decrease vitality " ) ;
break ;
case IMISC_REJUV :
strcpy ( tempstr , " recover life and mana " ) ;
break ;
case IMISC_FULLREJUV :
strcpy ( tempstr , " fully recover life and mana " ) ;
break ;
default :
return ;
}
AddPanelString ( tempstr , 1 ) ;
}
//----- (00422EF4) --------------------------------------------------------
void __fastcall PrintItemPower ( char plidx , ItemStruct * x )
{
ItemStruct * v2 ; // esi
int * v3 ; // esi
int * v4 ; // esi
int v5 ; // esi
const char * v6 ; // [esp-4h] [ebp-Ch]
const char * v7 ; // [esp-4h] [ebp-Ch]
const char * v8 ; // [esp-4h] [ebp-Ch]
const char * v9 ; // [esp-4h] [ebp-Ch]
v2 = x ;
switch ( plidx )
{
case IPL_TOHIT :
case IPL_TOHIT_CURSE :
sprintf ( tempstr , " chance to hit : %+i%% " , x - > _iPLToHit ) ;
return ;
case IPL_DAMP :
case IPL_DAMP_CURSE :
sprintf ( tempstr , " %+i%% damage " , x - > _iPLDam ) ;
return ;
case IPL_TOHIT_DAMP :
case IPL_TOHIT_DAMP_CURSE :
sprintf ( tempstr , " to hit: %+i%%, %+i%% damage " , x - > _iPLToHit , x - > _iPLDam ) ;
return ;
case IPL_ACP :
case IPL_ACP_CURSE :
sprintf ( tempstr , " %+i%% armor " , x - > _iPLAC ) ;
return ;
case IPL_FIRERES :
if ( x - > _iPLFR < 75 )
sprintf ( tempstr , " Resist Fire : %+i%% " , x - > _iPLFR ) ;
if ( v2 - > _iPLFR > = 75 )
{
v6 = " Resist Fire : 75%% MAX " ;
goto LABEL_11 ;
}
return ;
case IPL_LIGHTRES :
if ( x - > _iPLLR < 75 )
sprintf ( tempstr , " Resist Lightning : %+i%% " , x - > _iPLLR ) ;
if ( v2 - > _iPLLR > = 75 )
{
v6 = " Resist Lightning : 75%% MAX " ;
goto LABEL_11 ;
}
return ;
case IPL_MAGICRES :
if ( x - > _iPLMR < 75 )
sprintf ( tempstr , " Resist Magic : %+i%% " , x - > _iPLMR ) ;
if ( v2 - > _iPLMR > = 75 )
{
v6 = " Resist Magic : 75%% MAX " ;
goto LABEL_11 ;
}
return ;
case IPL_ALLRES :
if ( x - > _iPLFR < 75 )
sprintf ( tempstr , " Resist All : %+i%% " , x - > _iPLFR ) ;
if ( v2 - > _iPLFR > = 75 )
{
v6 = " Resist All : 75%% MAX " ;
LABEL_11 :
sprintf ( tempstr , v6 ) ;
}
return ;
case IPL_SPLLVLADD :
if ( x - > _iSplLvlAdd = = 1 )
strcpy ( tempstr , " spells are increased 1 level " ) ;
if ( v2 - > _iSplLvlAdd = = 2 )
strcpy ( tempstr , " spells are increased 2 levels " ) ;
if ( v2 - > _iSplLvlAdd < 1 )
{
v7 = " spells are decreased 1 level " ;
goto LABEL_81 ;
}
return ;
case IPL_CHARGES :
v8 = " Extra charges " ;
goto LABEL_104 ;
case IPL_FIREDAM :
sprintf ( tempstr , " Fire hit damage: %i-%i " , x - > _iFMinDam , x - > _iFMaxDam ) ;
return ;
case IPL_LIGHTDAM :
sprintf ( tempstr , " Lightning hit damage: %i-%i " , x - > _iLMinDam , x - > _iLMaxDam ) ;
return ;
case IPL_STR :
case IPL_STR_CURSE :
sprintf ( tempstr , " %+i to strength " , x - > _iPLStr ) ;
return ;
case IPL_MAG :
case IPL_MAG_CURSE :
sprintf ( tempstr , " %+i to magic " , x - > _iPLMag ) ;
return ;
case IPL_DEX :
case IPL_DEX_CURSE :
sprintf ( tempstr , " %+i to dexterity " , x - > _iPLDex ) ;
return ;
case IPL_VIT :
case IPL_VIT_CURSE :
sprintf ( tempstr , " %+i to vitality " , x - > _iPLVit ) ;
return ;
case IPL_ATTRIBS :
case IPL_ATTRIBS_CURSE :
sprintf ( tempstr , " %+i to all attributes " , x - > _iPLStr ) ;
return ;
case IPL_GETHIT :
case IPL_GETHIT_CURSE :
sprintf ( tempstr , " %+i damage from enemies " , x - > _iPLGetHit ) ;
return ;
case IPL_LIFE :
case IPL_LIFE_CURSE :
sprintf ( tempstr , " Hit Points : %+i " , x - > _iPLHP > > 6 ) ;
return ;
case IPL_MANA :
case IPL_MANA_CURSE :
sprintf ( tempstr , " Mana : %+i " , x - > _iPLMana > > 6 ) ;
return ;
case IPL_DUR :
v8 = " high durability " ;
goto LABEL_104 ;
case IPL_DUR_CURSE :
v8 = " decreased durability " ;
goto LABEL_104 ;
case IPL_INDESTRUCTIBLE :
v8 = " indestructible " ;
goto LABEL_104 ;
case IPL_LIGHT :
sprintf ( tempstr , " +%i%% light radius " , 10 * x - > _iPLLight ) ;
return ;
case IPL_LIGHT_CURSE :
sprintf ( tempstr , " -%i%% light radius " , - 10 * x - > _iPLLight ) ;
return ;
case IPL_FIRE_ARROWS :
sprintf ( tempstr , " fire arrows damage: %i-%i " , x - > _iFMinDam , x - > _iFMaxDam ) ;
return ;
case IPL_LIGHT_ARROWS :
sprintf ( tempstr , " lightning arrows damage %i-%i " , x - > _iLMinDam , x - > _iLMaxDam ) ;
return ;
case IPL_INVCURS :
v8 = " " ;
goto LABEL_104 ;
case IPL_THORNS :
v8 = " attacker takes 1-3 damage " ;
goto LABEL_104 ;
case IPL_NOMANA :
v8 = " user loses all mana " ;
goto LABEL_104 ;
case IPL_NOHEALPLR :
v8 = " you can't heal " ;
goto LABEL_104 ;
case IPL_ABSHALFTRAP :
v8 = " absorbs half of trap damage " ;
goto LABEL_104 ;
case IPL_KNOCKBACK :
v8 = " knocks target back " ;
goto LABEL_104 ;
case IPL_NOHEALMON :
v8 = " hit monster doesn't heal " ;
goto LABEL_104 ;
case IPL_STEALMANA :
v3 = & x - > _iFlags ;
if ( x - > _iFlags & 0x2000 )
strcpy ( tempstr , " hit steals 3% mana " ) ;
if ( ! ( * ( ( _BYTE * ) v3 + 1 ) & 0x40 ) )
return ;
v7 = " hit steals 5% mana " ;
goto LABEL_81 ;
case IPL_STEALLIFE :
v4 = & x - > _iFlags ;
if ( ( x - > _iFlags & 0x8000 ) ! = 0 )
strcpy ( tempstr , " hit steals 3% life " ) ;
if ( ! ( * ( ( _BYTE * ) v4 + 2 ) & 1 ) )
return ;
v7 = " hit steals 5% life " ;
goto LABEL_81 ;
case IPL_TARGAC :
v8 = " damages target's armor " ;
goto LABEL_104 ;
case IPL_FASTATTACK :
if ( x - > _iFlags & 0x20000 )
strcpy ( tempstr , " quick attack " ) ;
if ( v2 - > _iFlags & 0x40000 )
strcpy ( tempstr , " fast attack " ) ;
if ( v2 - > _iFlags & 0x80000 )
strcpy ( tempstr , " faster attack " ) ;
if ( ! ( v2 - > _iFlags & 0x100000 ) )
return ;
v7 = " fastest attack " ;
goto LABEL_81 ;
case IPL_FASTRECOVER :
if ( x - > _iFlags & 0x200000 )
strcpy ( tempstr , " fast hit recovery " ) ;
if ( v2 - > _iFlags & 0x400000 )
strcpy ( tempstr , " faster hit recovery " ) ;
if ( ( v2 - > _iFlags & 0x800000 ) ! = 0 )
{
v7 = " fastest hit recovery " ;
LABEL_81 :
strcpy ( tempstr , v7 ) ;
}
return ;
case IPL_FASTBLOCK :
v8 = " fast block " ;
goto LABEL_104 ;
case IPL_DAMMOD :
sprintf ( tempstr , " adds %i points to damage " , x - > _iPLDamMod ) ;
return ;
case IPL_RNDARROWVEL :
v8 = " fires random speed arrows " ;
goto LABEL_104 ;
case IPL_SETDAM :
v9 = " unusual item damage " ;
goto LABEL_98 ;
case IPL_SETDUR :
v8 = " altered durability " ;
goto LABEL_104 ;
case IPL_NOMINSTR :
v8 = " no strength requirement " ;
goto LABEL_104 ;
case IPL_SPELL :
sprintf ( tempstr , " %i %s charges " , x - > _iMaxCharges , spelldata [ x - > _iSpell ] . sNameText ) ;
return ;
case IPL_FASTSWING :
v8 = " Faster attack swing " ;
goto LABEL_104 ;
case IPL_ONEHAND :
v8 = " one handed sword " ;
goto LABEL_104 ;
case IPL_3XDAMVDEM :
v8 = " +200% damage vs. demons " ;
goto LABEL_104 ;
case IPL_ALLRESZERO :
v8 = " All Resistance equals 0 " ;
goto LABEL_104 ;
case IPL_DRAINLIFE :
v8 = " constantly lose hit points " ;
goto LABEL_104 ;
case IPL_RNDSTEALLIFE :
v8 = " life stealing " ;
goto LABEL_104 ;
case IPL_INFRAVISION :
v8 = " see with infravision " ;
goto LABEL_104 ;
case IPL_SETAC :
case IPL_AC_CURSE :
sprintf ( tempstr , " armor class: %i " , x - > _iAC ) ;
return ;
case IPL_ADDACLIFE :
v8 = " Armor class added to life " ;
goto LABEL_104 ;
case IPL_ADDMANAAC :
v8 = " 10% of mana added to armor " ;
goto LABEL_104 ;
case IPL_FIRERESCLVL :
v5 = x - > _iPLFR ;
if ( v5 > 0 )
{
if ( v5 > = 1 )
sprintf ( tempstr , " Resist Fire : %+i%% " , v5 ) ;
}
else
{
v9 = " " ;
LABEL_98 :
sprintf ( tempstr , v9 ) ;
}
break ;
default :
v8 = " Another ability (NW) " ;
LABEL_104 :
strcpy ( tempstr , v8 ) ;
break ;
}
}
//----- (00423530) --------------------------------------------------------
void __cdecl DrawUBack ( )
{
char * v0 ; // edi
signed int v1 ; // edx
signed int v2 ; // ecx
int v3 ; // edi
signed int v4 ; // ecx
_BYTE * v5 ; // edi
signed int v6 ; // ecx
CelDecodeOnly ( 88 , 487 , pSTextBoxCels , 1 , 271 ) ;
v0 = & gpBuffer - > row [ 324 ] . pixels [ 27 ] ;
v1 = 148 ;
do
{
v2 = 132 ;
do
{
* v0 = 0 ;
v0 + = 2 ;
- - v2 ;
}
while ( v2 ) ;
* v0 = 0 ;
v3 = ( int ) ( v0 - 1032 ) ;
v4 = 132 ;
do
{
v5 = ( _BYTE * ) ( v3 + 1 ) ;
* v5 = 0 ;
v3 = ( int ) ( v5 + 1 ) ;
- - v4 ;
}
while ( v4 ) ;
v0 = ( char * ) ( v3 - 1032 ) ;
- - v1 ;
}
while ( v1 ) ;
v6 = 132 ;
do
{
* v0 = 0 ;
v0 + = 2 ;
- - v6 ;
}
while ( v6 ) ;
* v0 = 0 ;
}
//----- (0042358C) --------------------------------------------------------
void __fastcall PrintUString ( int x , int y , int cjustflag , char * str , int col )
{
char * v5 ; // edi
int v6 ; // ebx
size_t v7 ; // eax
int v8 ; // esi
int v9 ; // ecx
signed int v10 ; // eax
int v11 ; // edx
int v12 ; // eax
unsigned char v13 ; // al
int v14 ; // edi
int v15 ; // [esp+Ch] [ebp-4h]
int a3 ; // [esp+18h] [ebp+8h]
v5 = str ;
v6 = screen_y_times_768 [ SStringY [ y ] + 204 ] + x + 96 ;
v7 = strlen ( str ) ;
v8 = 0 ;
v9 = 0 ;
v15 = v7 ;
if ( cjustflag )
{
v10 = 0 ;
if ( v15 < = 0 )
goto LABEL_16 ;
do
{
v11 = ( unsigned char ) str [ v9 + + ] ;
v10 + = fontkern [ fontframe [ fontidx [ v11 ] ] ] + 1 ;
}
while ( v9 < v15 ) ;
if ( v10 < 257 )
LABEL_16 :
v8 = ( 257 - v10 ) > > 1 ;
v6 + = v8 ;
}
v12 = 0 ;
a3 = 0 ;
if ( v15 > 0 )
{
while ( 1 )
{
v13 = fontframe [ fontidx [ ( unsigned char ) v5 [ v12 ] ] ] ;
v14 = v13 ;
v8 + = fontkern [ v13 ] + 1 ;
if ( v13 )
{
if ( v8 < = 257 )
CPrintString ( v6 , v13 , col ) ;
}
v6 + = fontkern [ v14 ] + 1 ;
v12 = a3 + + + 1 ;
if ( a3 > = v15 )
break ;
v5 = str ;
}
}
}
//----- (0042365B) --------------------------------------------------------
void __fastcall DrawULine ( int y )
{
char * v1 ; // esi
char * v2 ; // edi
signed int v3 ; // edx
v1 = & gpBuffer - > row [ 25 ] . pixels [ 26 ] ;
v2 = & gpBuffer - > row_unused_1 [ 0 ] . pixels [ screen_y_times_768 [ SStringY [ y ] + 198 ] + 26 ] ;
v3 = 3 ;
do
{
qmemcpy ( v2 , v1 , 0x10A ) ; /* find real fix */
v1 + = 264 ;
v2 + = 264 ;
* v2 = * v1 ;
v1 + = 504 ;
v2 + = 504 ;
- - v3 ;
}
while ( v3 ) ;
}
//----- (004236A6) --------------------------------------------------------
void __cdecl DrawUniqueInfo ( )
{
int v0 ; // esi
int v1 ; // esi
int v2 ; // edi
if ( ! chrflag & & ! questlog )
{
v0 = curruitem . _iUid ;
DrawUBack ( ) ;
v1 = v0 ;
PrintUString ( 0 , 2 , 1 , UniqueItemList [ v1 ] . UIName , 3 ) ;
DrawULine ( 5 ) ;
PrintItemPower ( UniqueItemList [ v1 ] . UIPower1 , & curruitem ) ;
v2 = 14 - ( char ) UniqueItemList [ v1 ] . UINumPL ;
PrintUString ( 0 , v2 , 1 , tempstr , 0 ) ;
if ( UniqueItemList [ v1 ] . UINumPL > 1 )
{
PrintItemPower ( UniqueItemList [ v1 ] . UIPower2 , & curruitem ) ;
PrintUString ( 0 , v2 + 2 , 1 , tempstr , 0 ) ;
}
if ( UniqueItemList [ v1 ] . UINumPL > 2 )
{
PrintItemPower ( UniqueItemList [ v1 ] . UIPower3 , & curruitem ) ;
PrintUString ( 0 , v2 + 4 , 1 , tempstr , 0 ) ;
}
if ( UniqueItemList [ v1 ] . UINumPL > 3 )
{
PrintItemPower ( UniqueItemList [ v1 ] . UIPower4 , & curruitem ) ;
PrintUString ( 0 , v2 + 6 , 1 , tempstr , 0 ) ;
}
if ( UniqueItemList [ v1 ] . UINumPL > 4 )
{
PrintItemPower ( UniqueItemList [ v1 ] . UIPower5 , & curruitem ) ;
PrintUString ( 0 , v2 + 8 , 1 , tempstr , 0 ) ;
}
if ( UniqueItemList [ v1 ] . UINumPL > 5 )
{
PrintItemPower ( UniqueItemList [ v1 ] . UIPower6 , & curruitem ) ;
PrintUString ( 0 , v2 + 10 , 1 , tempstr , 0 ) ;
}
}
}
// 69BD04: using guessed type int questlog;
//----- (004237DC) --------------------------------------------------------
void __fastcall PrintItemMisc ( ItemStruct * x )
{
if ( x - > _iMiscId = = IMISC_SCROLL )
{
strcpy ( tempstr , " Right-click to read " ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( x - > _iMiscId = = IMISC_SCROLLT )
{
strcpy ( tempstr , " Right-click to read, then " ) ;
AddPanelString ( tempstr , 1 ) ;
strcpy ( tempstr , " left-click to target " ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( x - > _iMiscId > = IMISC_USEFIRST & & x - > _iMiscId < = IMISC_USELAST )
{
PrintItemOil ( x - > _iMiscId ) ;
strcpy ( tempstr , " Right click to use " ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( x - > _iMiscId = = IMISC_BOOK )
{
strcpy ( tempstr , " Right click to read " ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( x - > _iMiscId = = IMISC_MAPOFDOOM )
{
strcpy ( tempstr , " Right click to view " ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( x - > _iMiscId = = IMISC_EAR )
{
sprintf ( tempstr , " Level : %i " , x - > _ivalue ) ;
AddPanelString ( tempstr , 1 ) ;
}
}
//----- (004238D4) --------------------------------------------------------
void __fastcall PrintItemDetails ( ItemStruct * x )
{
ItemStruct * v1 ; // ebp
char v2 ; // cl
char v3 ; // cl
char v4 ; // al
unsigned char v5 ; // al
char v6 ; // al
v1 = x ;
if ( x - > _iClass = = 1 )
{
if ( x - > _iMaxDur = = 255 )
sprintf ( tempstr , " damage: %i-%i Indestructible " , x - > _iMinDam , x - > _iMaxDam ) ;
else
sprintf ( tempstr , " damage: %i-%i Dur: %i/%i " , x - > _iMinDam , x - > _iMaxDam , x - > _iDurability , x - > _iMaxDur ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( v1 - > _iClass = = 2 )
{
if ( v1 - > _iMaxDur = = 255 )
sprintf ( tempstr , " armor: %i Indestructible " , v1 - > _iAC ) ;
else
sprintf ( tempstr , " armor: %i Dur: %i/%i " , v1 - > _iAC , v1 - > _iDurability , v1 - > _iMaxDur ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( v1 - > _iMiscId = = IMISC_STAFF & & v1 - > _iMaxCharges )
{
sprintf ( tempstr , " dam: %i-%i Dur: %i/%i " , v1 - > _iMinDam , v1 - > _iMaxDam , v1 - > _iDurability , v1 - > _iMaxDur ) ;
sprintf ( tempstr , " Charges: %i/%i " , v1 - > _iCharges , v1 - > _iMaxCharges ) ;
AddPanelString ( tempstr , 1 ) ;
}
v2 = v1 - > _iPrePower ;
if ( v2 ! = - 1 )
{
PrintItemPower ( v2 , v1 ) ;
AddPanelString ( tempstr , 1 ) ;
}
v3 = v1 - > _iSufPower ;
if ( v3 ! = - 1 )
{
PrintItemPower ( v3 , v1 ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( v1 - > _iMagical = = 2 )
{
AddPanelString ( " unique item " , 1 ) ;
uitemflag = 1 ;
qmemcpy ( & curruitem , v1 , sizeof ( curruitem ) ) ;
}
PrintItemMisc ( v1 ) ;
if ( ( unsigned char ) v1 - > _iMinMag + v1 - > _iMinDex + v1 - > _iMinStr )
{
strcpy ( tempstr , " Required: " ) ;
v4 = v1 - > _iMinStr ;
if ( v4 )
sprintf ( tempstr , " %s %i Str " , tempstr , v4 ) ;
v5 = v1 - > _iMinMag ;
if ( v5 )
sprintf ( tempstr , " %s %i Mag " , tempstr , v5 ) ;
v6 = v1 - > _iMinDex ;
if ( v6 )
sprintf ( tempstr , " %s %i Dex " , tempstr , v6 ) ;
AddPanelString ( tempstr , 1 ) ;
}
pinfoflag = 1 ;
}
// 4B8824: using guessed type int pinfoflag;
//----- (00423AE1) --------------------------------------------------------
void __fastcall PrintItemDur ( ItemStruct * x )
{
ItemStruct * v1 ; // esi
int v2 ; // eax
char v3 ; // al
unsigned char v4 ; // al
char v5 ; // al
v1 = x ;
if ( x - > _iClass = = 1 )
{
if ( x - > _iMaxDur = = 255 )
sprintf ( tempstr , " damage: %i-%i Indestructible " , x - > _iMinDam , x - > _iMaxDam ) ;
else
sprintf ( tempstr , " damage: %i-%i Dur: %i/%i " , x - > _iMinDam , x - > _iMaxDam , x - > _iDurability , x - > _iMaxDur ) ;
AddPanelString ( tempstr , 1 ) ;
if ( v1 - > _iMiscId = = IMISC_STAFF & & v1 - > _iMaxCharges )
{
sprintf ( tempstr , " Charges: %i/%i " , v1 - > _iCharges , v1 - > _iMaxCharges ) ;
AddPanelString ( tempstr , 1 ) ;
}
if ( v1 - > _iMagical )
AddPanelString ( " Not Identified " , 1 ) ;
}
if ( v1 - > _iClass = = 2 )
{
if ( v1 - > _iMaxDur = = 255 )
sprintf ( tempstr , " armor: %i Indestructible " , v1 - > _iAC ) ;
else
sprintf ( tempstr , " armor: %i Dur: %i/%i " , v1 - > _iAC , v1 - > _iDurability , v1 - > _iMaxDur ) ;
AddPanelString ( tempstr , 1 ) ;
if ( v1 - > _iMagical )
AddPanelString ( " Not Identified " , 1 ) ;
if ( v1 - > _iMiscId = = IMISC_STAFF & & v1 - > _iMaxCharges )
{
sprintf ( tempstr , " Charges: %i/%i " , v1 - > _iCharges , v1 - > _iMaxCharges ) ;
AddPanelString ( tempstr , 1 ) ;
}
}
v2 = v1 - > _itype ;
if ( v2 = = ITYPE_RING | | v2 = = ITYPE_AMULET )
AddPanelString ( " Not Identified " , 1 ) ;
PrintItemMisc ( v1 ) ;
if ( ( unsigned char ) v1 - > _iMinMag + v1 - > _iMinDex + v1 - > _iMinStr )
{
strcpy ( tempstr , " Required: " ) ;
v3 = v1 - > _iMinStr ;
if ( v3 )
sprintf ( tempstr , " %s %i Str " , tempstr , v3 ) ;
v4 = v1 - > _iMinMag ;
if ( v4 )
sprintf ( tempstr , " %s %i Mag " , tempstr , v4 ) ;
v5 = v1 - > _iMinDex ;
if ( v5 )
sprintf ( tempstr , " %s %i Dex " , tempstr , v5 ) ;
AddPanelString ( tempstr , 1 ) ;
}
pinfoflag = 1 ;
}
// 4B8824: using guessed type int pinfoflag;
//----- (00423CE0) --------------------------------------------------------
void __fastcall UseItem ( int p , int Mid , int spl )
{
int v3 ; // esi
int v4 ; // edx
int v5 ; // edx
int v6 ; // edx
int v7 ; // edx
int v8 ; // edx
int v9 ; // esi
int v10 ; // esi
int v11 ; // edi
unsigned int v12 ; // edi
char v13 ; // al
int v14 ; // edi
int v15 ; // ecx
int * v16 ; // eax
int * v17 ; // eax
int v18 ; // esi
int v19 ; // esi
int v20 ; // edx
int v21 ; // edx
int v22 ; // edx
int v23 ; // edx
int v24 ; // edx
int v25 ; // edi
char * v26 ; // eax
int v27 ; // edx
int * v28 ; // ecx
int v29 ; // eax
int * v30 ; // ecx
int v31 ; // edi
int v32 ; // edi
int v33 ; // eax
int v34 ; // ecx
int v35 ; // eax
bool v36 ; // zf
int v37 ; // ecx
int v38 ; // eax
int v39 ; // edx
int v40 ; // eax
int v41 ; // edx
int v42 ; // esi
int v43 ; // edi
unsigned int v44 ; // edi
char v45 ; // al
int v46 ; // edi
int v47 ; // ecx
int * v48 ; // eax
int v49 ; // ecx
int * v50 ; // eax
int v51 ; // edi
int v52 ; // edx
unsigned int v53 ; // edi
char v54 ; // al
int v55 ; // edi
int v56 ; // ecx
int * v57 ; // eax
int * v58 ; // eax
int v59 ; // esi
int v60 ; // edx
int v61 ; // esi
int v62 ; // edi
unsigned int v63 ; // edi
char v64 ; // al
int v65 ; // edi
int v66 ; // ecx
int * v67 ; // eax
int * v68 ; // eax
int v69 ; // esi
int v70 ; // edx
int pa ; // [esp+Ch] [ebp-4h]
v3 = p ;
pa = p ;
if ( Mid > 28 )
{
v70 = Mid - 42 ;
if ( ! v70 )
{
doom_init ( ) ;
return ;
}
if ( v70 ! = 2 )
return ;
ModifyPlrStr ( p , 3 ) ;
ModifyPlrMag ( v3 , 3 ) ;
ModifyPlrDex ( v3 , 3 ) ;
v60 = 3 ;
LABEL_82 :
ModifyPlrVit ( v3 , v60 ) ;
return ;
}
if ( Mid = = 28 )
goto LABEL_71 ;
if ( Mid < = 12 )
{
if ( Mid = = 12 )
{
ModifyPlrDex ( p , 1 ) ;
return ;
}
v4 = Mid - 2 ;
if ( ! v4 )
{
v19 = p ;
plr [ v19 ] . _pHitPoints = plr [ v19 ] . _pMaxHP ;
plr [ v19 ] . _pHPBase = plr [ p ] . _pMaxHPBase ;
LABEL_25 :
drawhpflag = 1 ;
return ;
}
v5 = v4 - 1 ;
if ( v5 )
{
v6 = v5 - 3 ;
if ( v6 )
{
v7 = v6 - 1 ;
if ( v7 )
{
v8 = v7 - 3 ;
if ( v8 )
{
if ( v8 = = 1 )
ModifyPlrMag ( p , 1 ) ;
}
else
{
ModifyPlrStr ( p , 1 ) ;
}
return ;
}
v9 = p ;
if ( plr [ p ] . _pIFlags & 0x8000000 )
return ;
plr [ v9 ] . _pMana = plr [ v9 ] . _pMaxMana ;
plr [ v9 ] . _pManaBase = plr [ v9 ] . _pMaxManaBase ;
LABEL_41 :
drawmanaflag = 1 ;
return ;
}
v10 = p ;
_LOBYTE ( p ) = 40 ;
v11 = plr [ v10 ] . _pMaxMana > > 8 ;
v12 = ( v11 & 0xFFFFFFFE ) + 2 * random ( p , v11 ) ;
v13 = plr [ v10 ] . _pClass ;
v14 = 32 * v12 ;
if ( v13 = = 2 )
v14 * = 2 ;
if ( v13 = = 1 )
v14 + = v14 > > 1 ;
if ( ! ( plr [ v10 ] . _pIFlags & 0x8000000 ) )
{
v15 = plr [ v10 ] . _pMaxMana ;
v16 = & plr [ v10 ] . _pMana ;
* v16 + = v14 ;
if ( plr [ v10 ] . _pMana > v15 )
* v16 = v15 ;
v17 = & plr [ v10 ] . _pManaBase ;
v18 = plr [ v10 ] . _pMaxManaBase ;
* v17 + = v14 ;
if ( * v17 > v18 )
* v17 = v18 ;
goto LABEL_41 ;
}
return ;
}
LABEL_71 :
v61 = p ;
_LOBYTE ( p ) = 39 ;
v62 = plr [ v61 ] . _pMaxHP > > 8 ;
v63 = ( v62 & 0xFFFFFFFE ) + 2 * random ( p , v62 ) ;
v64 = plr [ v61 ] . _pClass ;
v65 = 32 * v63 ;
if ( ! v64 )
v65 * = 2 ;
if ( v64 = = 1 )
v65 + = v65 > > 1 ;
v66 = plr [ v61 ] . _pMaxHP ;
v67 = & plr [ v61 ] . _pHitPoints ;
* v67 + = v65 ;
if ( plr [ v61 ] . _pHitPoints > v66 )
* v67 = v66 ;
v68 = & plr [ v61 ] . _pHPBase ;
v69 = plr [ v61 ] . _pMaxHPBase ;
* v68 + = v65 ;
if ( * v68 > v69 )
* v68 = v69 ;
goto LABEL_25 ;
}
v20 = Mid - 13 ;
if ( ! v20 )
{
v60 = 1 ;
goto LABEL_82 ;
}
v21 = v20 - 5 ;
if ( v21 )
{
v22 = v21 - 1 ;
if ( v22 )
{
v23 = v22 - 2 ;
if ( v23 )
{
v24 = v23 - 1 ;
if ( v24 )
{
if ( v24 ! = 2 )
return ;
v25 = p ;
2018-06-09 03:10:25 +00:00
* ( _QWORD * ) plr [ p ] . _pMemSpells | = ( __int64 ) 1 < < ( ( unsigned char ) spl - 1 ) ;
2018-06-07 02:25:54 +00:00
v26 = & plr [ p ] . _pSplLvl [ spl ] ;
if ( * v26 < 15 )
+ + * v26 ;
v27 = plr [ v25 ] . _pMaxMana ;
v28 = & plr [ v25 ] . _pMana ;
v29 = spelldata [ spl ] . sManaCost < < 6 ;
* v28 + = v29 ;
if ( plr [ v25 ] . _pMana > v27 )
* v28 = v27 ;
v30 = & plr [ v25 ] . _pManaBase ;
v31 = plr [ v25 ] . _pMaxManaBase ;
* v30 + = v29 ;
if ( * v30 > v31 )
* v30 = v31 ;
if ( pa = = myplr )
CalcPlrBookVals ( pa ) ;
goto LABEL_41 ;
}
v32 = spl ;
if ( ! spelldata [ spl ] . sTargeted )
{
ClrPlrPath ( p ) ;
v33 = v3 ;
plr [ v33 ] . destParam1 = cursmx ;
v34 = cursmy ;
plr [ v33 ] . _pSpell = spl ;
plr [ v33 ] . _pSplType = 4 ;
plr [ v33 ] . _pSplFrom = 3 ;
plr [ v33 ] . destAction = 12 ;
plr [ v33 ] . destParam2 = v34 ;
return ;
}
}
else
{
v32 = spl ;
if ( ! spelldata [ spl ] . sTargeted )
{
ClrPlrPath ( p ) ;
v37 = cursmx ;
v38 = v3 ;
v39 = cursmy ;
v36 = v3 = = myplr ;
plr [ v38 ] . _pSpell = spl ;
plr [ v38 ] . _pSplType = 4 ;
plr [ v38 ] . _pSplFrom = 3 ;
plr [ v38 ] . destAction = 12 ;
plr [ v38 ] . destParam1 = v37 ;
plr [ v38 ] . destParam2 = v39 ;
if ( v36 & & spl = = SPL_NOVA )
NetSendCmdLoc ( 1u , CMD_NOVA , v37 , v39 ) ;
return ;
}
}
v35 = p ;
v36 = p = = myplr ;
plr [ v35 ] . _pTSpell = v32 ;
_LOBYTE ( plr [ v35 ] . _pTSplType ) = 4 ;
if ( v36 )
SetCursor ( CURSOR_TELEPORT ) ;
return ;
}
v40 = p ;
plr [ v40 ] . _pHitPoints = plr [ p ] . _pMaxHP ;
plr [ v40 ] . _pHPBase = plr [ p ] . _pMaxHPBase ;
v36 = ( plr [ p ] . _pIFlags & 0x8000000 ) = = 0 ;
drawhpflag = 1 ;
if ( v36 )
{
v41 = plr [ v40 ] . _pMaxMana ;
drawmanaflag = 1 ;
plr [ v40 ] . _pMana = v41 ;
plr [ v40 ] . _pManaBase = plr [ v40 ] . _pMaxManaBase ;
}
}
else
{
v42 = p ;
_LOBYTE ( p ) = 39 ;
v43 = plr [ v42 ] . _pMaxHP > > 8 ;
v44 = ( v43 & 0xFFFFFFFE ) + 2 * random ( p , v43 ) ;
v45 = plr [ v42 ] . _pClass ;
v46 = 32 * v44 ;
if ( ! v45 )
v46 * = 2 ;
if ( v45 = = 1 )
v46 + = v46 > > 1 ;
v47 = plr [ v42 ] . _pMaxHP ;
v48 = & plr [ v42 ] . _pHitPoints ;
* v48 + = v46 ;
if ( plr [ v42 ] . _pHitPoints > v47 )
* v48 = v47 ;
v49 = plr [ v42 ] . _pMaxHPBase ;
v50 = & plr [ v42 ] . _pHPBase ;
* v50 + = v46 ;
if ( plr [ v42 ] . _pHPBase > v49 )
* v50 = v49 ;
v51 = plr [ v42 ] . _pMaxMana > > 8 ;
v52 = plr [ v42 ] . _pMaxMana > > 8 ;
_LOBYTE ( v49 ) = 40 ;
drawhpflag = 1 ;
v53 = ( v51 & 0xFFFFFFFE ) + 2 * random ( v49 , v52 ) ;
v54 = plr [ v42 ] . _pClass ;
v55 = 32 * v53 ;
if ( v54 = = 2 )
v55 * = 2 ;
if ( v54 = = 1 )
v55 + = v55 > > 1 ;
if ( ! ( plr [ v42 ] . _pIFlags & 0x8000000 ) )
{
v56 = plr [ v42 ] . _pMaxMana ;
v57 = & plr [ v42 ] . _pMana ;
* v57 + = v55 ;
if ( plr [ v42 ] . _pMana > v56 )
* v57 = v56 ;
v58 = & plr [ v42 ] . _pManaBase ;
v59 = plr [ v42 ] . _pMaxManaBase ;
* v58 + = v55 ;
if ( * v58 > v59 )
* v58 = v59 ;
drawmanaflag = 1 ;
}
}
}
//----- (004241D7) --------------------------------------------------------
bool __fastcall StoreStatOk ( ItemStruct * h )
{
bool sf ; // al
sf = 1 ;
if ( plr [ myplr ] . _pStrength < h - > _iMinStr
| | plr [ myplr ] . _pMagic < h - > _iMinMag
| | plr [ myplr ] . _pDexterity < h - > _iMinDex )
sf = 0 ;
return sf ;
}
//----- (0042421C) --------------------------------------------------------
bool __fastcall SmithItemOk ( int i )
{
unsigned char v1 ; // cl
bool rv ; // eax
v1 = AllItemsList [ i ] . itype ;
rv = 1 ;
if ( ! v1 | | v1 = = ITYPE_GOLD | | v1 = = ITYPE_0E | | v1 = = ITYPE_STAFF | | v1 = = ITYPE_RING | | v1 = = ITYPE_AMULET )
rv = 0 ;
return rv ;
}
//----- (00424252) --------------------------------------------------------
int __fastcall RndSmithItem ( int lvl )
{
int ri ; // edx
int i ; // edi
int ril [ 512 ] ; // [esp+4h] [ebp-804h]
ri = 0 ;
i = 1 ;
if ( AllItemsList [ 1 ] . iLoc ! = - 1 )
{
do
{
if ( AllItemsList [ i ] . iRnd & & SmithItemOk ( i ) & & lvl > = AllItemsList [ i ] . iMinMLvl )
{
ril [ ri + + ] = i ;
if ( AllItemsList [ i ] . iRnd = = 2 )
ril [ ri + + ] = i ;
}
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 50 , ri ) ] + 1 ;
}
// 424252: using guessed type int var_804[512];
//----- (004242C1) --------------------------------------------------------
void __fastcall BubbleSwapItem ( ItemStruct * a , ItemStruct * b )
{
ItemStruct h ; // [esp+8h] [ebp-170h]
qmemcpy ( & h , a , sizeof ( h ) ) ;
qmemcpy ( a , b , sizeof ( ItemStruct ) ) ;
qmemcpy ( b , & h , sizeof ( ItemStruct ) ) ;
}
//----- (004242F5) --------------------------------------------------------
void __cdecl SortSmith ( )
{
int v0 ; // esi
int * v1 ; // eax
signed int v2 ; // ecx
int * v3 ; // eax
int v4 ; // ebx
int v5 ; // edi
v0 = 0 ;
if ( smithitem [ 1 ] . _itype ! = - 1 )
{
v1 = & smithitem [ 1 ] . _itype ;
do
{
v1 + = 92 ;
+ + v0 ;
}
while ( * v1 ! = - 1 ) ;
}
v2 = 0 ;
while ( v0 > 0 & & ! v2 )
{
v2 = 1 ;
if ( v0 > 0 )
{
v3 = & smithitem [ 0 ] . IDidx ;
v4 = v0 ;
do
{
v5 = ( int ) ( v3 + 92 ) ;
if ( * v3 > v3 [ 92 ] )
{
BubbleSwapItem ( ( ItemStruct * ) ( v3 - 90 ) , ( ItemStruct * ) ( v3 + 2 ) ) ;
v2 = 0 ;
}
- - v4 ;
v3 = ( int * ) v5 ;
}
while ( v4 ) ;
}
- - v0 ;
}
}
//----- (00424351) --------------------------------------------------------
void __fastcall SpawnSmith ( int lvl )
{
int v3 ; // ebp
ItemStruct * v4 ; // ebx
int v9 ; // [esp+Ch] [ebp-8h]
v3 = random ( 50 , 10 ) + 10 ;
if ( v3 > 0 )
{
v4 = smithitem ;
v9 = v3 ;
while ( 1 )
{
do
{
item [ 0 ] . _iSeed = GetRndSeed ( ) ;
SetRndSeed ( item [ 0 ] . _iSeed ) ;
GetItemAttrs ( 0 , RndSmithItem ( lvl ) - 1 , lvl ) ;
}
while ( item [ 0 ] . _iIvalue > 140000 ) ;
qmemcpy ( v4 , item , sizeof ( ItemStruct ) ) ;
v4 - > _iCreateInfo = lvl | 0x400 ;
v4 - > _iIdentified = 1 ;
v4 - > _iStatFlag = StoreStatOk ( v4 ) ;
+ + v4 ;
if ( ! - - v9 )
break ;
}
}
if ( v3 < 20 )
{
do
{
smithitem [ v3 ] . _itype = - 1 ;
v3 + + ;
}
while ( v3 < 20 ) ;
}
SortSmith ( ) ;
}
//----- (00424420) --------------------------------------------------------
bool __fastcall PremiumItemOk ( int i )
{
unsigned char v1 ; // cl
bool rv ; // eax
v1 = AllItemsList [ i ] . itype ;
rv = 1 ;
if ( ! v1 | | v1 = = ITYPE_GOLD | | v1 = = ITYPE_0E | | v1 = = ITYPE_STAFF )
rv = 0 ;
if ( gbMaxPlayers ! = 1 & & ( v1 = = ITYPE_RING | | v1 = = ITYPE_AMULET ) )
{
rv = 0 ;
}
return rv ;
}
// 679660: using guessed type char gbMaxPlayers;
//----- (0042445F) --------------------------------------------------------
int __fastcall RndPremiumItem ( int minlvl , int maxlvl )
{
int ri ; // edx
int i ; // edi
int ril [ 512 ] ; // [esp+8h] [ebp-804h]
ri = 0 ;
i = 1 ;
if ( AllItemsList [ 1 ] . iLoc ! = - 1 )
{
do
{
if ( AllItemsList [ i ] . iRnd )
{
if ( PremiumItemOk ( i ) )
{
if ( AllItemsList [ i ] . iMinMLvl > = minlvl & & AllItemsList [ i ] . iMinMLvl < = maxlvl )
ril [ ri + + ] = i ;
}
}
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 50 , ri ) ] + 1 ;
}
// 42445F: using guessed type int ril[512];
//----- (004244C6) --------------------------------------------------------
void __fastcall SpawnOnePremium ( int i , int plvl )
{
int itype ; // esi
ItemStruct holditem ; // [esp+Ch] [ebp-178h]
qmemcpy ( & holditem , item , sizeof ( ItemStruct ) ) ;
if ( plvl > 30 )
plvl = 30 ;
if ( plvl < 1 )
plvl = 1 ;
do
{
item [ 0 ] . _iSeed = GetRndSeed ( ) ;
SetRndSeed ( item [ 0 ] . _iSeed ) ;
itype = RndPremiumItem ( plvl > > 2 , plvl ) - 1 ;
GetItemAttrs ( 0 , itype , plvl ) ;
GetItemBonus ( 0 , itype , plvl > > 1 , plvl , 1 ) ;
}
while ( item [ 0 ] . _iIvalue > 140000 ) ;
qmemcpy ( & premiumitem [ i ] , item , sizeof ( ItemStruct ) ) ;
premiumitem [ i ] . _iCreateInfo = plvl | 0x800 ;
premiumitem [ i ] . _iIdentified = 1 ;
premiumitem [ i ] . _iStatFlag = StoreStatOk ( & premiumitem [ i ] ) ;
qmemcpy ( item , & holditem , sizeof ( ItemStruct ) ) ;
}
//----- (004245A0) --------------------------------------------------------
void __fastcall SpawnPremium ( int lvl )
{
int i ; // eax
if ( numpremium < 6 )
{
for ( i = 0 ; i < 6 ; i + + )
{
if ( premiumitem [ i ] . _itype = = - 1 )
SpawnOnePremium ( i , premiumlevel + premiumlvladd [ i ] ) ;
}
numpremium = 6 ;
}
for ( i = premiumlevel ; premiumlevel < lvl ; i = premiumlevel )
{
qmemcpy ( premiumitem , & premiumitem [ 2 ] , sizeof ( ItemStruct ) ) ;
qmemcpy ( & premiumitem [ 1 ] , & premiumitem [ 3 ] , sizeof ( ItemStruct ) ) ;
qmemcpy ( & premiumitem [ 2 ] , & premiumitem [ 4 ] , sizeof ( ItemStruct ) ) ;
premiumlevel = i + 1 ;
SpawnOnePremium ( 3 , premiumlvladd [ 3 ] + i + 1 ) ;
qmemcpy ( & premiumitem [ 4 ] , & premiumitem [ 5 ] , sizeof ( ItemStruct ) ) ;
SpawnOnePremium ( 5 , premiumlvladd [ 5 ] + premiumlevel ) ;
}
}
// 69FB38: using guessed type int talker;
//----- (0042466C) --------------------------------------------------------
bool __fastcall WitchItemOk ( int i )
{
bool rv ; // eax
unsigned char v3 ; // dl
int v4 ; // edx
int v5 ; // ecx
rv = 0 ;
v3 = AllItemsList [ i ] . itype ;
if ( ! v3 )
rv = 1 ;
if ( v3 = = ITYPE_STAFF )
rv = 1 ;
v4 = AllItemsList [ i ] . iMiscId ;
if ( v4 = = IMISC_MANA )
rv = 0 ;
if ( v4 = = IMISC_FULLMANA )
rv = 0 ;
if ( v4 = = IMISC_FULLHEAL )
rv = 0 ;
if ( v4 = = IMISC_HEAL )
rv = 0 ;
v5 = AllItemsList [ i ] . iSpell ;
if ( v5 = = SPL_TOWN )
rv = 0 ;
if ( v5 = = SPL_RESURRECT & & gbMaxPlayers = = 1 )
rv = 0 ;
if ( v5 = = SPL_HEALOTHER & & gbMaxPlayers = = 1 )
rv = 0 ;
return rv ;
}
// 679660: using guessed type char gbMaxPlayers;
//----- (004246D2) --------------------------------------------------------
int __fastcall RndWitchItem ( int lvl )
{
int ri ; // ebx
int i ; // edi
int ril [ 512 ] ; // [esp+8h] [ebp-804h]
ri = 0 ;
i = 1 ;
if ( AllItemsList [ 1 ] . iLoc ! = - 1 )
{
do
{
if ( AllItemsList [ i ] . iRnd & & WitchItemOk ( i ) & & lvl > = AllItemsList [ i ] . iMinMLvl )
ril [ ri + + ] = i ;
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 51 , ri ) ] + 1 ;
}
// 4246D2: using guessed type int var_804[512];
//----- (00424735) --------------------------------------------------------
void __cdecl SortWitch ( )
{
signed int v0 ; // esi
int * v1 ; // eax
signed int v2 ; // ecx
int * v3 ; // eax
int v4 ; // ebx
int v5 ; // edi
v0 = 3 ;
if ( witchitem [ 4 ] . _itype ! = - 1 )
{
v1 = & witchitem [ 4 ] . _itype ;
do
{
v1 + = 92 ;
+ + v0 ;
}
while ( * v1 ! = - 1 ) ;
}
v2 = 0 ;
while ( v0 > 3 & & ! v2 )
{
v2 = 1 ;
if ( v0 > 3 )
{
v3 = & witchitem [ 3 ] . IDidx ;
v4 = v0 - 3 ;
do
{
v5 = ( int ) ( v3 + 92 ) ;
if ( * v3 > v3 [ 92 ] )
{
BubbleSwapItem ( ( ItemStruct * ) ( v3 - 90 ) , ( ItemStruct * ) ( v3 + 2 ) ) ;
v2 = 0 ;
}
- - v4 ;
v3 = ( int * ) v5 ;
}
while ( v4 ) ;
}
- - v0 ;
}
}
//----- (00424795) --------------------------------------------------------
void __fastcall WitchBookLevel ( int ii )
{
int slvl ; // edi
if ( witchitem [ ii ] . _iMiscId = = IMISC_BOOK )
{
witchitem [ ii ] . _iMinMag = spelldata [ witchitem [ ii ] . _iSpell ] . sMinInt ;
slvl = plr [ myplr ] . _pSplLvl [ witchitem [ ii ] . _iSpell ] ;
if ( slvl )
{
do
{
witchitem [ ii ] . _iMinMag + = 20 * witchitem [ ii ] . _iMinMag / 100 ;
- - slvl ;
if ( witchitem [ ii ] . _iMinMag > 255 )
{
witchitem [ ii ] . _iMinMag = - 1 ;
slvl = 0 ;
}
}
while ( slvl ) ;
}
}
}
//----- (00424815) --------------------------------------------------------
void __fastcall SpawnWitch ( int lvl )
{
int v2 ; // ebp
int itype ; // esi
int iblvl ; // eax
signed int ii ; // [esp+10h] [ebp-8h]
ItemStruct * itm ; // [esp+14h] [ebp-4h]
GetItemAttrs ( 0 , IDI_MANA , 1 ) ;
qmemcpy ( witchitem , item , sizeof ( ItemStruct ) ) ;
witchitem [ 0 ] . _iCreateInfo = lvl ;
witchitem [ 0 ] . _iStatFlag = 1 ;
GetItemAttrs ( 0 , IDI_FULLMANA , 1 ) ;
qmemcpy ( & witchitem [ 1 ] , item , sizeof ( ItemStruct ) ) ;
witchitem [ 1 ] . _iCreateInfo = lvl ;
witchitem [ 1 ] . _iStatFlag = 1 ;
GetItemAttrs ( 0 , IDI_PORTAL , 1 ) ;
qmemcpy ( & witchitem [ 2 ] , item , sizeof ( ItemStruct ) ) ;
witchitem [ 2 ] . _iCreateInfo = lvl ;
witchitem [ 2 ] . _iStatFlag = 1 ;
v2 = random ( 51 , 8 ) + 10 ;
ii = 3 ;
if ( v2 > 3 )
{
itm = & witchitem [ 3 ] ;
while ( 1 )
{
item [ 0 ] . _iSeed = GetRndSeed ( ) ;
SetRndSeed ( item [ 0 ] . _iSeed ) ;
itype = RndWitchItem ( lvl ) - 1 ;
GetItemAttrs ( 0 , itype , lvl ) ;
if ( random ( 51 , 100 ) > 5 | | ( iblvl = 2 * lvl , iblvl = = - 1 ) )
{
if ( item [ 0 ] . _iMiscId ! = IMISC_STAFF )
continue ;
iblvl = 2 * lvl ;
if ( iblvl = = - 1 )
continue ;
}
GetItemBonus ( 0 , itype , iblvl > > 1 , iblvl , 1 ) ;
if ( item [ 0 ] . _iIvalue < = 140000 )
{
qmemcpy ( itm , item , sizeof ( ItemStruct ) ) ;
itm - > _iIdentified = 1 ;
itm - > _iCreateInfo = lvl | 0x2000 ;
WitchBookLevel ( ii ) ;
+ + ii ;
itm - > _iStatFlag = StoreStatOk ( itm ) ;
+ + itm ;
if ( ii > = v2 )
break ;
}
}
}
if ( v2 < 20 )
{
do
{
witchitem [ v2 ] . _itype = - 1 ;
v2 + + ;
}
while ( v2 < 20 ) ;
}
SortWitch ( ) ;
}
//----- (004249A4) --------------------------------------------------------
int __fastcall RndBoyItem ( int lvl )
{
int ri ; // edx
int i ; // edi
int ril [ 512 ] ; // [esp+8h] [ebp-800h]
ri = 0 ;
i = 1 ;
if ( AllItemsList [ 1 ] . iLoc ! = - 1 )
{
do
{
if ( AllItemsList [ i ] . iRnd & & PremiumItemOk ( i ) & & lvl > = AllItemsList [ i ] . iMinMLvl )
ril [ ri + + ] = i ;
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 49 , ri ) ] + 1 ;
}
// 4249A4: using guessed type int var_800[512];
//----- (00424A03) --------------------------------------------------------
void __fastcall SpawnBoy ( int lvl )
{
int itype ; // esi
if ( boylevel < lvl > > 1 | | boyitem . _itype = = - 1 )
{
do
{
item [ 0 ] . _iSeed = GetRndSeed ( ) ;
SetRndSeed ( item [ 0 ] . _iSeed ) ;
itype = RndBoyItem ( lvl ) - 1 ;
GetItemAttrs ( 0 , itype , lvl ) ;
GetItemBonus ( 0 , itype , lvl , 2 * lvl , 1 ) ;
}
while ( item [ 0 ] . _iIvalue > 90000 ) ;
qmemcpy ( & boyitem , item , sizeof ( boyitem ) ) ;
boyitem . _iCreateInfo = lvl | 0x10 ;
boyitem . _iIdentified = 1 ;
boyitem . _iStatFlag = StoreStatOk ( & boyitem ) ;
boylevel = lvl > > 1 ;
}
}
// 6A8A3C: using guessed type int boylevel;
//----- (00424A9B) --------------------------------------------------------
bool __fastcall HealerItemOk ( int i )
{
int v1 ; // ecx
bool result ; // eax
int v3 ; // esi
v1 = i ;
result = 0 ;
if ( AllItemsList [ v1 ] . itype )
return 0 ;
v3 = AllItemsList [ v1 ] . iMiscId ;
if ( v3 = = IMISC_SCROLL & & AllItemsList [ v1 ] . iSpell = = SPL_HEAL )
result = 1 ;
if ( v3 ! = IMISC_SCROLLT )
goto LABEL_12 ;
if ( AllItemsList [ v1 ] . iSpell = = SPL_RESURRECT & & gbMaxPlayers ! = 1 )
result = 0 ;
if ( AllItemsList [ v1 ] . iSpell ! = SPL_HEALOTHER )
{
LABEL_12 :
if ( gbMaxPlayers ! = 1 )
goto LABEL_21 ;
goto LABEL_13 ;
}
if ( gbMaxPlayers ! = 1 )
{
result = 1 ;
goto LABEL_12 ;
}
LABEL_13 :
if ( v3 = = IMISC_ELIXSTR )
result = 1 ;
if ( v3 = = IMISC_ELIXMAG )
result = 1 ;
if ( v3 = = IMISC_ELIXDEX )
result = 1 ;
if ( v3 = = IMISC_ELIXVIT )
result = 1 ;
LABEL_21 :
if ( v3 = = IMISC_FULLHEAL )
result = 1 ;
if ( v3 = = IMISC_REJUV )
result = 1 ;
if ( v3 = = IMISC_FULLREJUV )
result = 1 ;
if ( v3 = = IMISC_HEAL )
result = 0 ;
if ( v3 = = IMISC_FULLHEAL )
result = 0 ;
if ( v3 = = IMISC_MANA )
result = 0 ;
if ( v3 = = IMISC_FULLMANA )
return 0 ;
return result ;
}
// 679660: using guessed type char gbMaxPlayers;
//----- (00424B49) --------------------------------------------------------
int __fastcall RndHealerItem ( int lvl )
{
int ri ; // ebx
int i ; // edi
int ril [ 512 ] ; // [esp+8h] [ebp-804h]
ri = 0 ;
i = 1 ;
if ( AllItemsList [ 1 ] . iLoc ! = - 1 )
{
do
{
if ( AllItemsList [ i ] . iRnd & & HealerItemOk ( i ) & & lvl > = AllItemsList [ i ] . iMinMLvl )
ril [ ri + + ] = i ;
+ + i ;
}
while ( AllItemsList [ i ] . iLoc ! = - 1 ) ;
}
return ril [ random ( 50 , ri ) ] + 1 ;
}
// 424B49: using guessed type int var_804[512];
//----- (00424BAC) --------------------------------------------------------
void __cdecl SortHealer ( )
{
signed int v0 ; // esi
int * v1 ; // eax
signed int v2 ; // ecx
int * v3 ; // eax
int v4 ; // ebx
int v5 ; // edi
v0 = 2 ;
if ( healitem [ 3 ] . _itype ! = - 1 )
{
v1 = & healitem [ 3 ] . _itype ;
do
{
v1 + = 92 ;
+ + v0 ;
}
while ( * v1 ! = - 1 ) ;
}
v2 = 0 ;
while ( v0 > 2 & & ! v2 )
{
v2 = 1 ;
if ( v0 > 2 )
{
v3 = & healitem [ 2 ] . IDidx ;
v4 = v0 - 2 ;
do
{
v5 = ( int ) ( v3 + 92 ) ;
if ( * v3 > v3 [ 92 ] )
{
BubbleSwapItem ( ( ItemStruct * ) ( v3 - 90 ) , ( ItemStruct * ) ( v3 + 2 ) ) ;
v2 = 0 ;
}
- - v4 ;
v3 = ( int * ) v5 ;
}
while ( v4 ) ;
}
- - v0 ;
}
}
//----- (00424C0C) --------------------------------------------------------
void __fastcall SpawnHealer ( int lvl )
{
int v3 ; // eax
ItemStruct * v4 ; // ebp
signed int v8 ; // [esp-4h] [ebp-20h]
int v10 ; // [esp+14h] [ebp-8h]
GetItemAttrs ( 0 , IDI_HEAL , 1 ) ;
qmemcpy ( healitem , item , sizeof ( ItemStruct ) ) ;
healitem [ 0 ] . _iCreateInfo = lvl ;
healitem [ 0 ] . _iStatFlag = 1 ;
GetItemAttrs ( 0 , IDI_FULLHEAL , 1 ) ;
qmemcpy ( & healitem [ 1 ] , item , sizeof ( ItemStruct ) ) ;
healitem [ 1 ] . _iCreateInfo = lvl ;
healitem [ 1 ] . _iStatFlag = 1 ;
if ( gbMaxPlayers = = 1 )
{
v8 = 2 ;
}
else
{
GetItemAttrs ( 0 , IDI_RESURRECT , 1 ) ;
qmemcpy ( & healitem [ 2 ] , item , sizeof ( ItemStruct ) ) ;
healitem [ 2 ] . _iCreateInfo = lvl ;
healitem [ 2 ] . _iStatFlag = 1 ;
v8 = 3 ;
}
v3 = random ( 50 , 8 ) + 10 ;
if ( v8 < v3 )
{
v4 = & healitem [ v8 ] ;
v10 = v3 - v8 ;
do
{
item [ 0 ] . _iSeed = GetRndSeed ( ) ;
SetRndSeed ( item [ 0 ] . _iSeed ) ;
GetItemAttrs ( 0 , RndHealerItem ( lvl ) - 1 , lvl ) ;
qmemcpy ( v4 , item , sizeof ( ItemStruct ) ) ;
v4 - > _iCreateInfo = lvl | 0x4000 ;
v4 - > _iIdentified = 1 ;
v4 - > _iStatFlag = StoreStatOk ( v4 ) ;
+ + v4 ;
- - v10 ;
}
while ( v10 ) ;
}
if ( v3 < 20 )
{
do
{
healitem [ v3 ] . _itype = - 1 ;
v3 + + ;
}
while ( v3 < 20 ) ;
}
SortHealer ( ) ;
}
// 679660: using guessed type char gbMaxPlayers;
//----- (00424D57) --------------------------------------------------------
void __cdecl SpawnStoreGold ( )
{
GetItemAttrs ( 0 , IDI_GOLD , 1 ) ;
qmemcpy ( & golditem , item , sizeof ( golditem ) ) ;
golditem . _iStatFlag = 1 ;
}
//----- (00424D80) --------------------------------------------------------
void __fastcall RecreateSmithItem ( int ii , int idx , int plvl , int iseed )
{
SetRndSeed ( iseed ) ;
GetItemAttrs ( ii , RndSmithItem ( plvl ) - 1 , plvl ) ;
item [ ii ] . _iSeed = iseed ;
item [ ii ] . _iCreateInfo = plvl | 0x400 ;
item [ ii ] . _iIdentified = 1 ;
}
//----- (00424DD1) --------------------------------------------------------
void __fastcall RecreatePremiumItem ( int ii , int idx , int lvl , int iseed )
{
int itype ; // edi
SetRndSeed ( iseed ) ;
itype = RndPremiumItem ( lvl > > 2 , lvl ) - 1 ;
GetItemAttrs ( ii , itype , lvl ) ;
GetItemBonus ( ii , itype , lvl > > 1 , lvl , 1 ) ;
item [ ii ] . _iCreateInfo = lvl | 0x800 ;
item [ ii ] . _iSeed = iseed ;
item [ ii ] . _iIdentified = 1 ;
}
//----- (00424E3C) --------------------------------------------------------
void __fastcall RecreateBoyItem ( int ii , int idx , int lvl , int iseed )
{
int itype ; // edi
SetRndSeed ( iseed ) ;
itype = RndBoyItem ( lvl ) - 1 ;
GetItemAttrs ( ii , itype , lvl ) ;
GetItemBonus ( ii , itype , lvl , 2 * lvl , 1 ) ;
item [ ii ] . _iCreateInfo = lvl | 0x1000 ;
item [ ii ] . _iSeed = iseed ;
item [ ii ] . _iIdentified = 1 ;
}
//----- (00424EA1) --------------------------------------------------------
void __fastcall RecreateWitchItem ( int ii , int idx , int lvl , int iseed )
{
int itype ; // edi
int iblvl ; // eax
if ( idx = = IDI_MANA | | idx = = IDI_FULLMANA | | idx = = IDI_PORTAL )
{
GetItemAttrs ( ii , idx , lvl ) ;
}
else
{
SetRndSeed ( iseed ) ;
itype = RndWitchItem ( lvl ) - 1 ;
GetItemAttrs ( ii , itype , lvl ) ;
iblvl = 2 * lvl ;
if ( iblvl ! = - 1 & & ( random ( 51 , 100 ) < = 5 | | item [ ii ] . _iMiscId = = IMISC_STAFF ) )
{
GetItemBonus ( ii , itype , iblvl > > 1 , iblvl , 1 ) ;
}
}
item [ ii ] . _iCreateInfo = lvl | 0x2000 ;
item [ ii ] . _iSeed = iseed ;
item [ ii ] . _iIdentified = 1 ;
}
//----- (00424F52) --------------------------------------------------------
void __fastcall RecreateHealerItem ( int ii , int idx , int lvl , int iseed )
{
if ( idx ! = IDI_HEAL & & idx ! = IDI_FULLHEAL & & idx ! = IDI_RESURRECT )
{
SetRndSeed ( iseed ) ;
idx = RndHealerItem ( lvl ) - 1 ;
}
GetItemAttrs ( ii , idx , lvl ) ;
item [ ii ] . _iCreateInfo = lvl | 0x4000 ;
item [ ii ] . _iSeed = iseed ;
item [ ii ] . _iIdentified = 1 ;
}
//----- (00424FB8) --------------------------------------------------------
void __fastcall RecreateTownItem ( int ii , int idx , unsigned short icreateinfo , int iseed , int ivalue )
{
if ( icreateinfo & 0x400 )
RecreateSmithItem ( ii , idx , icreateinfo & 0x3F , iseed ) ;
else if ( icreateinfo & 0x800 )
RecreatePremiumItem ( ii , idx , icreateinfo & 0x3F , iseed ) ;
else if ( icreateinfo & 0x1000 )
RecreateBoyItem ( ii , idx , icreateinfo & 0x3F , iseed ) ;
else if ( icreateinfo & 0x2000 )
RecreateWitchItem ( ii , idx , icreateinfo & 0x3F , iseed ) ;
else if ( icreateinfo & 0x4000 )
RecreateHealerItem ( ii , idx , icreateinfo & 0x3F , iseed ) ;
}
//----- (0042501F) --------------------------------------------------------
void __cdecl RecalcStoreStats ( )
{
int i ;
for ( i = 0 ; i < 20 ; i + + )
{
if ( smithitem [ i ] . _itype ! = - 1 )
smithitem [ i ] . _iStatFlag = StoreStatOk ( & smithitem [ i ] ) ;
if ( witchitem [ i ] . _itype ! = - 1 )
witchitem [ i ] . _iStatFlag = StoreStatOk ( & witchitem [ i ] ) ;
if ( healitem [ i ] . _itype ! = - 1 )
healitem [ i ] . _iStatFlag = StoreStatOk ( & healitem [ i ] ) ;
}
for ( i = 0 ; i < 6 ; i + + )
{
if ( premiumitem [ i ] . _itype ! = - 1 )
premiumitem [ i ] . _iStatFlag = StoreStatOk ( & premiumitem [ i ] ) ;
}
boyitem . _iStatFlag = StoreStatOk ( & boyitem ) ;
}
// 6A6BB8: using guessed type int stextscrl;
// 6AA700: using guessed type int stextdown;
//----- (004250C0) --------------------------------------------------------
int __cdecl ItemNoFlippy ( )
{
int r ; // ecx
r = itemactive [ numitems - 1 ] ;
item [ r ] . _iAnimFlag = 0 ;
item [ r ] . _iAnimFrame = item [ r ] . _iAnimLen ;
item [ r ] . _iSelFlag = 1 ;
return r ;
}
//----- (004250EF) --------------------------------------------------------
void __fastcall CreateSpellBook ( int x , int y , int ispell , bool sendmsg , int delta )
{
int ii ; // edi
int idx ; // [esp+8h] [ebp-8h]
bool done ; // [esp+Ch] [ebp-4h]
done = 0 ;
idx = RndTypeItems ( 0 , 24 ) ;
if ( numitems < 127 )
{
ii = itemavail [ 0 ] ;
GetSuperItemSpace ( x , y , itemavail [ 0 ] ) ;
itemactive [ numitems ] = ii ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
do
{
SetupAllItems ( ii , idx , GetRndSeed ( ) , 2 * currlevel , 1 , 1 , 0 , delta ) ;
if ( item [ ii ] . _iMiscId = = IMISC_BOOK & & item [ ii ] . _iSpell = = ispell )
done = 1 ;
}
while ( ! done ) ;
if ( sendmsg )
NetSendCmdDItem ( 0 , ii ) ;
if ( delta )
DeltaAddItem ( ii ) ;
+ + numitems ;
}
}
//----- (004251B8) --------------------------------------------------------
void __fastcall CreateMagicItem ( int x , int y , int imisc , int icurs , int sendmsg , int delta )
{
int ii ; // esi
int idx ; // ebx
bool done ; // [esp+Ch] [ebp-4h]
done = 0 ;
idx = RndTypeItems ( imisc , 0 ) ;
if ( numitems < 127 )
{
ii = itemavail [ 0 ] ;
GetSuperItemSpace ( x , y , itemavail [ 0 ] ) ;
itemactive [ numitems ] = ii ;
itemavail [ 0 ] = itemavail [ - numitems + 126 ] ;
do
{
SetupAllItems ( ii , idx , GetRndSeed ( ) , 2 * currlevel , 1 , 1 , 0 , delta ) ;
if ( item [ ii ] . _iCurs = = icurs )
done = 1 ;
}
while ( ! done ) ;
if ( sendmsg )
NetSendCmdDItem ( 0 , ii ) ;
if ( delta )
DeltaAddItem ( ii ) ;
+ + numitems ;
}
}
//----- (0042526E) --------------------------------------------------------
bool __fastcall GetItemRecord ( int dwSeed , int CI , int indx )
{
int v3 ; // edi
int * v4 ; // ebx
int v6 ; // [esp+Ch] [ebp-18h]
DWORD v7 ; // [esp+10h] [ebp-14h]
int * v8 ; // [esp+14h] [ebp-10h]
unsigned short * v9 ; // [esp+18h] [ebp-Ch]
ItemGetRecordStruct * v10 ; // [esp+1Ch] [ebp-8h]
short v11 ; // [esp+20h] [ebp-4h]
v11 = CI ;
v6 = dwSeed ;
v3 = 0 ;
v7 = GetTickCount ( ) ;
if ( gnNumGetRecords < = 0 )
return 1 ;
v8 = & itemrecord [ 0 ] . nIndex ;
v9 = & itemrecord [ 0 ] . wCI ;
v10 = itemrecord ;
v4 = & itemrecord [ 0 ] . dwTimestamp ;
while ( v7 - * v4 > 6000 )
{
NextItemRecord ( v3 ) ;
- - v10 ;
v9 - = 8 ;
- - v3 ;
v4 - = 4 ;
v8 - = 4 ;
LABEL_8 :
+ + v10 ;
v9 + = 8 ;
v8 + = 4 ;
+ + v3 ;
v4 + = 4 ;
if ( v3 > = gnNumGetRecords )
return 1 ;
}
if ( v6 ! = v10 - > nSeed | | v11 ! = * v9 | | indx ! = * v8 )
goto LABEL_8 ;
return 0 ;
}
//----- (00425311) --------------------------------------------------------
void __fastcall NextItemRecord ( int i )
{
int v1 ; // eax
v1 = gnNumGetRecords - - - 1 ;
if ( gnNumGetRecords )
{
itemrecord [ i ] . nIndex = itemrecord [ v1 ] . nIndex ;
itemrecord [ i ] . nSeed = itemrecord [ v1 ] . nSeed ;
itemrecord [ i ] . wCI = itemrecord [ v1 ] . wCI ;
itemrecord [ i ] . dwTimestamp = itemrecord [ v1 ] . dwTimestamp ;
}
}
//----- (00425357) --------------------------------------------------------
void __fastcall SetItemRecord ( int dwSeed , int CI , int indx )
{
int i ; // ecx
if ( gnNumGetRecords ! = 127 )
{
i = gnNumGetRecords + + ;
itemrecord [ i ] . dwTimestamp = GetTickCount ( ) ;
itemrecord [ i ] . nSeed = dwSeed ;
itemrecord [ i ] . wCI = CI ;
itemrecord [ i ] . nIndex = indx ;
}
}
//----- (0042539E) --------------------------------------------------------
void __fastcall PutItemRecord ( int seed , int ci , int index )
{
int v3 ; // edi
int * v4 ; // ebx
int v5 ; // [esp+Ch] [ebp-18h]
DWORD v6 ; // [esp+10h] [ebp-14h]
int * v7 ; // [esp+14h] [ebp-10h]
unsigned short * v8 ; // [esp+18h] [ebp-Ch]
ItemGetRecordStruct * v9 ; // [esp+1Ch] [ebp-8h]
short v10 ; // [esp+20h] [ebp-4h]
v10 = ci ;
v5 = seed ;
v3 = 0 ;
v6 = GetTickCount ( ) ;
if ( gnNumGetRecords > 0 )
{
v7 = & itemrecord [ 0 ] . nIndex ;
v8 = & itemrecord [ 0 ] . wCI ;
v9 = itemrecord ;
v4 = & itemrecord [ 0 ] . dwTimestamp ;
do
{
if ( v6 - * v4 < = 6000 )
{
if ( v5 = = v9 - > nSeed & & v10 = = * v8 & & index = = * v7 )
{
NextItemRecord ( v3 ) ;
return ;
}
}
else
{
NextItemRecord ( v3 ) ;
- - v9 ;
v8 - = 8 ;
- - v3 ;
v4 - = 4 ;
v7 - = 4 ;
}
+ + v9 ;
v8 + = 8 ;
v7 + = 4 ;
+ + v3 ;
v4 + = 4 ;
}
while ( v3 < gnNumGetRecords ) ;
}
}