diff --git a/Source/drlg_l1.cpp b/Source/drlg_l1.cpp index 3a6cc4055..33a4a86c7 100644 --- a/Source/drlg_l1.cpp +++ b/Source/drlg_l1.cpp @@ -27,11 +27,11 @@ int IsUberLeverActivated; int UberDiabloMonsterIndex; #endif /** Specifies whether to generate a vertical room at position 1 in the Cathedral. */ -int VR1; +BOOL VR1; /** Specifies whether to generate a vertical room at position 2 in the Cathedral. */ -int VR2; +BOOL VR2; /** Specifies whether to generate a vertical room at position 3 in the Cathedral. */ -int VR3; +BOOL VR3; /** Contains the contents of the single player quest DUN file. */ BYTE *L5pSetPiece; @@ -2043,7 +2043,7 @@ static void DRLG_L5Subs() for (y = 0; y < DMAXY; y++) { for (x = 0; x < DMAXX; x++) { - if (!random_(0, 4)) { + if (random_(0, 4) == 0) { BYTE c = L5BTYPES[dungeon[x][y]]; if (c && !L5dflags[x][y]) { @@ -2159,13 +2159,13 @@ static void L5FillChambers() if (currlevel == 24) { if (VR1 || VR2 || VR3) { c = 1; - if (!VR1 && VR2 && VR3 && random_(0, 2)) + if (!VR1 && VR2 && VR3 && random_(0, 2) != 0) c = 2; - if (VR1 && VR2 && !VR3 && random_(0, 2)) + if (VR1 && VR2 && !VR3 && random_(0, 2) != 0) c = 0; if (VR1 && !VR2 && VR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2187,13 +2187,13 @@ static void L5FillChambers() } } else { c = 1; - if (!HR1 && HR2 && HR3 && random_(0, 2)) + if (!HR1 && HR2 && HR3 && random_(0, 2) != 0) c = 2; - if (HR1 && HR2 && !HR3 && random_(0, 2)) + if (HR1 && HR2 && !HR3 && random_(0, 2) != 0) c = 0; if (HR1 && !HR2 && HR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2218,13 +2218,13 @@ static void L5FillChambers() if (currlevel == 21) { if (VR1 || VR2 || VR3) { c = 1; - if (!VR1 && VR2 && VR3 && random_(0, 2)) + if (!VR1 && VR2 && VR3 && random_(0, 2) != 0) c = 2; - if (VR1 && VR2 && !VR3 && random_(0, 2)) + if (VR1 && VR2 && !VR3 && random_(0, 2) != 0) c = 0; if (VR1 && !VR2 && VR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2278,13 +2278,13 @@ static void L5FillChambers() if (L5setloadflag) { if (VR1 || VR2 || VR3) { c = 1; - if (!VR1 && VR2 && VR3 && random_(0, 2)) + if (!VR1 && VR2 && VR3 && random_(0, 2) != 0) c = 2; - if (VR1 && VR2 && !VR3 && random_(0, 2)) + if (VR1 && VR2 && !VR3 && random_(0, 2) != 0) c = 0; if (VR1 && !VR2 && VR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; @@ -2306,13 +2306,13 @@ static void L5FillChambers() } } else { c = 1; - if (!HR1 && HR2 && HR3 && random_(0, 2)) + if (!HR1 && HR2 && HR3 && random_(0, 2) != 0) c = 2; - if (HR1 && HR2 && !HR3 && random_(0, 2)) + if (HR1 && HR2 && !HR3 && random_(0, 2) != 0) c = 0; if (HR1 && !HR2 && HR3) { - if (random_(0, 2)) + if (random_(0, 2) != 0) c = 0; else c = 2; diff --git a/Source/drlg_l3.cpp b/Source/drlg_l3.cpp index b3937c58b..c53dd10b9 100644 --- a/Source/drlg_l3.cpp +++ b/Source/drlg_l3.cpp @@ -900,7 +900,7 @@ static BOOL DRLG_L3FillRoom(int x1, int y1, int x2, int y2) static void DRLG_L3CreateBlock(int x, int y, int obs, int dir) { int blksizex, blksizey, x1, y1, x2, y2; - BOOL contflag; + int contflag; blksizex = random_(0, 2) + 3; blksizey = random_(0, 2) + 3; @@ -964,16 +964,16 @@ static void DRLG_L3CreateBlock(int x, int y, int obs, int dir) if (DRLG_L3FillRoom(x1, y1, x2, y2) == TRUE) { contflag = random_(0, 4); - if (contflag && dir != 2) { + if (contflag != 0 && dir != 2) { DRLG_L3CreateBlock(x1, y1, blksizey, 0); } - if (contflag && dir != 3) { + if (contflag != 0 && dir != 3) { DRLG_L3CreateBlock(x2, y1, blksizex, 1); } - if (contflag && dir != 0) { + if (contflag != 0 && dir != 0) { DRLG_L3CreateBlock(x1, y2, blksizey, 2); } - if (contflag && dir != 1) { + if (contflag != 0 && dir != 1) { DRLG_L3CreateBlock(x1, y1, blksizex, 3); } } diff --git a/Source/itemdat.cpp b/Source/itemdat.cpp index 140551a81..b17147e44 100644 --- a/Source/itemdat.cpp +++ b/Source/itemdat.cpp @@ -216,257 +216,257 @@ ItemDataStruct AllItemsList[] = { /** Contains the data related to each item prefix. */ const PLStruct PL_Prefix[] = { // clang-format off - // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal - { "Tin", IPL_TOHIT_CURSE, 6, 10, 3, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, FALSE, 0, 0, -3 }, - { "Brass", IPL_TOHIT_CURSE, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, FALSE, 0, 0, -2 }, - { "Bronze", IPL_TOHIT, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, TRUE, 100, 500, 2 }, - { "Iron", IPL_TOHIT, 6, 10, 4, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, TRUE, 600, 1000, 3 }, - { "Steel", IPL_TOHIT, 11, 15, 6, PLT_WEAP | PLT_BOW | PLT_MISC, 0, TRUE, TRUE, 1100, 1500, 5 }, - { "Silver", IPL_TOHIT, 16, 20, 9, PLT_WEAP | PLT_BOW | PLT_MISC, 16, TRUE, TRUE, 1600, 2000, 7 }, - { "Gold", IPL_TOHIT, 21, 30, 12, PLT_WEAP | PLT_BOW | PLT_MISC, 16, TRUE, TRUE, 2100, 3000, 9 }, - { "Platinum", IPL_TOHIT, 31, 40, 16, PLT_WEAP | PLT_BOW , 16, TRUE, TRUE, 3100, 4000, 11 }, - { "Mithril", IPL_TOHIT, 41, 60, 20, PLT_WEAP | PLT_BOW , 16, TRUE, TRUE, 4100, 6000, 13 }, - { "Meteoric", IPL_TOHIT, 61, 80, 23, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 6100, 10000, 15 }, - { "Weird", IPL_TOHIT, 81, 100, 35, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 10100, 14000, 17 }, - { "Strange", IPL_TOHIT, 101, 150, 60, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 14100, 20000, 20 }, + // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal + { "Tin", IPL_TOHIT_CURSE, 6, 10, 3, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, FALSE, 0, 0, -3 }, + { "Brass", IPL_TOHIT_CURSE, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, FALSE, 0, 0, -2 }, + { "Bronze", IPL_TOHIT, 1, 5, 1, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, TRUE, 100, 500, 2 }, + { "Iron", IPL_TOHIT, 6, 10, 4, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, TRUE, 600, 1000, 3 }, + { "Steel", IPL_TOHIT, 11, 15, 6, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, TRUE, TRUE, 1100, 1500, 5 }, + { "Silver", IPL_TOHIT, 16, 20, 9, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, TRUE, TRUE, 1600, 2000, 7 }, + { "Gold", IPL_TOHIT, 21, 30, 12, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, TRUE, TRUE, 2100, 3000, 9 }, + { "Platinum", IPL_TOHIT, 31, 40, 16, PLT_WEAP | PLT_BOW , GOE_GOOD, TRUE, TRUE, 3100, 4000, 11 }, + { "Mithril", IPL_TOHIT, 41, 60, 20, PLT_WEAP | PLT_BOW , GOE_GOOD, TRUE, TRUE, 4100, 6000, 13 }, + { "Meteoric", IPL_TOHIT, 61, 80, 23, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 6100, 10000, 15 }, + { "Weird", IPL_TOHIT, 81, 100, 35, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 10100, 14000, 17 }, + { "Strange", IPL_TOHIT, 101, 150, 60, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 14100, 20000, 20 }, #ifdef HELLFIRE - { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -8 }, - { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -4 }, - { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -3 }, - { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 250, 450, 3 }, - { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 500, 700, 4 }, - { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 750, 950, 5 }, - { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_STAFF | PLT_BOW , 1, TRUE, TRUE, 1000, 1450, 8 }, - { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 1500, 1950, 10 }, - { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 2000, 2450, 13 }, + { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -8 }, + { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -4 }, + { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -3 }, + { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 250, 450, 3 }, + { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 500, 700, 4 }, + { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 750, 950, 5 }, + { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, TRUE, TRUE, 1000, 1450, 8 }, + { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 1500, 1950, 10 }, + { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 2000, 2450, 13 }, #else - { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_BOW , 0, TRUE, FALSE, 0, 0, -8 }, - { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_BOW , 0, TRUE, FALSE, 0, 0, -4 }, - { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_BOW , 0, TRUE, FALSE, 0, 0, -3 }, - { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 250, 450, 3 }, - { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 500, 700, 4 }, - { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 750, 950, 5 }, - { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_BOW , 1, TRUE, TRUE, 1000, 1450, 8 }, - { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 1500, 1950, 10 }, - { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 2000, 2450, 13 }, + { "Useless", IPL_DAMP_CURSE, 100, 100, 5, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -8 }, + { "Bent", IPL_DAMP_CURSE, 50, 75, 3, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -4 }, + { "Weak", IPL_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -3 }, + { "Jagged", IPL_DAMP, 20, 35, 4, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 250, 450, 3 }, + { "Deadly", IPL_DAMP, 36, 50, 6, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 500, 700, 4 }, + { "Heavy", IPL_DAMP, 51, 65, 9, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 750, 950, 5 }, + { "Vicious", IPL_DAMP, 66, 80, 12, PLT_WEAP | PLT_BOW , GOE_EVIL, TRUE, TRUE, 1000, 1450, 8 }, + { "Brutal", IPL_DAMP, 81, 95, 16, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 1500, 1950, 10 }, + { "Massive", IPL_DAMP, 96, 110, 20, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 2000, 2450, 13 }, #endif - { "Savage", IPL_DAMP, 111, 125, 23, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 2500, 3000, 15 }, - { "Ruthless", IPL_DAMP, 126, 150, 35, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 10100, 15000, 17 }, - { "Merciless", IPL_DAMP, 151, 175, 60, PLT_WEAP | PLT_BOW , 0, TRUE, TRUE, 15000, 20000, 20 }, - { "Clumsy", IPL_TOHIT_DAMP_CURSE, 50, 75, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -7 }, - { "Dull", IPL_TOHIT_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 0, 0, -5 }, - { "Sharp", IPL_TOHIT_DAMP, 20, 35, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, FALSE, 350, 950, 5 }, - { "Fine", IPL_TOHIT_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 1100, 1700, 7 }, - { "Warrior's", IPL_TOHIT_DAMP, 51, 65, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, TRUE, TRUE, 1850, 2450, 13 }, - { "Soldier's", IPL_TOHIT_DAMP, 66, 80, 15, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 2600, 3950, 17 }, - { "Lord's", IPL_TOHIT_DAMP, 81, 95, 19, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 4100, 5950, 21 }, - { "Knight's", IPL_TOHIT_DAMP, 96, 110, 23, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 6100, 8450, 26 }, - { "Master's", IPL_TOHIT_DAMP, 111, 125, 28, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 8600, 13000, 30 }, - { "Champion's", IPL_TOHIT_DAMP, 126, 150, 40, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 15200, 24000, 33 }, - { "King's", IPL_TOHIT_DAMP, 151, 175, 28, PLT_WEAP | PLT_STAFF , 0, TRUE, TRUE, 24100, 35000, 38 }, - { "Vulnerable", IPL_ACP_CURSE, 51, 100, 3, PLT_ARMO | PLT_SHLD , 0, TRUE, FALSE, 0, 0, -3 }, - { "Rusted", IPL_ACP_CURSE, 25, 50, 1, PLT_ARMO | PLT_SHLD , 0, TRUE, FALSE, 0, 0, -2 }, - { "Fine", IPL_ACP, 20, 30, 1, PLT_ARMO | PLT_SHLD , 0, TRUE, TRUE, 20, 100, 2 }, - { "Strong", IPL_ACP, 31, 40, 3, PLT_ARMO | PLT_SHLD , 0, TRUE, TRUE, 120, 200, 3 }, - { "Grand", IPL_ACP, 41, 55, 6, PLT_ARMO | PLT_SHLD , 0, TRUE, TRUE, 220, 300, 5 }, - { "Valiant", IPL_ACP, 56, 70, 10, PLT_ARMO | PLT_SHLD , 0, TRUE, TRUE, 320, 400, 7 }, - { "Glorious", IPL_ACP, 71, 90, 14, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 420, 600, 9 }, - { "Blessed", IPL_ACP, 91, 110, 19, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 620, 800, 11 }, - { "Saintly", IPL_ACP, 111, 130, 24, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 820, 1200, 13 }, - { "Awesome", IPL_ACP, 131, 150, 28, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 1220, 2000, 15 }, - { "Holy", IPL_ACP, 151, 170, 35, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 5200, 6000, 17 }, - { "Godly", IPL_ACP, 171, 200, 60, PLT_ARMO | PLT_SHLD , 16, TRUE, TRUE, 6200, 7000, 20 }, - { "Red", IPL_FIRERES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 500, 1500, 2 }, - { "Crimson", IPL_FIRERES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2100, 3000, 2 }, - { "Crimson", IPL_FIRERES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3100, 4000, 2 }, - { "Garnet", IPL_FIRERES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 8200, 12000, 3 }, - { "Ruby", IPL_FIRERES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 17100, 20000, 5 }, - { "Blue", IPL_LIGHTRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 500, 1500, 2 }, - { "Azure", IPL_LIGHTRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2100, 3000, 2 }, - { "Lapis", IPL_LIGHTRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3100, 4000, 2 }, - { "Cobalt", IPL_LIGHTRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 8200, 12000, 3 }, - { "Sapphire", IPL_LIGHTRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 17100, 20000, 5 }, - { "White", IPL_MAGICRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 500, 1500, 2 }, - { "Pearl", IPL_MAGICRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2100, 3000, 2 }, - { "Ivory", IPL_MAGICRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3100, 4000, 2 }, - { "Crystal", IPL_MAGICRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 8200, 12000, 3 }, - { "Diamond", IPL_MAGICRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 17100, 20000, 5 }, - { "Topaz", IPL_ALLRES, 10, 15, 8, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2000, 5000, 3 }, - { "Amber", IPL_ALLRES, 16, 20, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 7400, 10000, 3 }, - { "Jade", IPL_ALLRES, 21, 30, 18, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 11000, 15000, 3 }, - { "Obsidian", IPL_ALLRES, 31, 40, 24, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 24000, 40000, 4 }, - { "Emerald", IPL_ALLRES, 41, 50, 31, PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 61000, 75000, 7 }, - { "Hyena's", IPL_MANA_CURSE, 11, 25, 4, PLT_STAFF | PLT_MISC, 0, FALSE, FALSE, 100, 1000, -2 }, - { "Frog's", IPL_MANA_CURSE, 1, 10, 1, PLT_STAFF | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "Spider's", IPL_MANA, 10, 15, 1, PLT_STAFF | PLT_MISC, 1, FALSE, TRUE, 500, 1000, 2 }, - { "Raven's", IPL_MANA, 15, 20, 5, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 1100, 2000, 3 }, - { "Snake's", IPL_MANA, 21, 30, 9, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 2100, 4000, 5 }, - { "Serpent's", IPL_MANA, 30, 40, 15, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 4100, 6000, 7 }, - { "Drake's", IPL_MANA, 41, 50, 21, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 6100, 10000, 9 }, - { "Dragon's", IPL_MANA, 51, 60, 27, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 10100, 15000, 11 }, - { "Wyrm's", IPL_MANA, 61, 80, 35, PLT_STAFF , 0, FALSE, TRUE, 15100, 19000, 12 }, - { "Hydra's", IPL_MANA, 81, 100, 60, PLT_STAFF , 0, FALSE, TRUE, 19100, 30000, 13 }, - { "Angel's", IPL_SPLLVLADD, 1, 1, 15, PLT_STAFF , 16, FALSE, TRUE, 25000, 25000, 2 }, - { "Arch-Angel's", IPL_SPLLVLADD, 2, 2, 25, PLT_STAFF , 16, FALSE, TRUE, 50000, 50000, 3 }, - { "Plentiful", IPL_CHARGES, 2, 2, 4, PLT_STAFF , 0, FALSE, TRUE, 2000, 2000, 2 }, - { "Bountiful", IPL_CHARGES, 3, 3, 9, PLT_STAFF , 0, FALSE, TRUE, 3000, 3000, 3 }, - { "Flaming", IPL_FIREDAM, 1, 10, 7, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 5000, 5000, 2 }, - { "Lightning", IPL_LIGHTDAM, 2, 20, 18, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 10000, 10000, 2 }, -#ifdef HELLFIRE - { "Jester's", IPL_JESTERS, 1, 1, 7, PLT_WEAP , 0, FALSE, TRUE, 1200, 1200, 3 }, - { "Crystalline", IPL_CRYSTALLINE, 30, 70, 5, PLT_WEAP , 0, FALSE, TRUE, 1000, 3000, 3 }, - { "Doppelganger's", IPL_DOPPELGANGER, 81, 95, 11, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 2000, 2400, 10 }, + { "Savage", IPL_DAMP, 111, 125, 23, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 2500, 3000, 15 }, + { "Ruthless", IPL_DAMP, 126, 150, 35, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 10100, 15000, 17 }, + { "Merciless", IPL_DAMP, 151, 175, 60, PLT_WEAP | PLT_BOW , GOE_ANY, TRUE, TRUE, 15000, 20000, 20 }, + { "Clumsy", IPL_TOHIT_DAMP_CURSE, 50, 75, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -7 }, + { "Dull", IPL_TOHIT_DAMP_CURSE, 25, 45, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 0, 0, -5 }, + { "Sharp", IPL_TOHIT_DAMP, 20, 35, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, FALSE, 350, 950, 5 }, + { "Fine", IPL_TOHIT_DAMP, 36, 50, 6, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 1100, 1700, 7 }, + { "Warrior's", IPL_TOHIT_DAMP, 51, 65, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, TRUE, TRUE, 1850, 2450, 13 }, + { "Soldier's", IPL_TOHIT_DAMP, 66, 80, 15, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 2600, 3950, 17 }, + { "Lord's", IPL_TOHIT_DAMP, 81, 95, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 4100, 5950, 21 }, + { "Knight's", IPL_TOHIT_DAMP, 96, 110, 23, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 6100, 8450, 26 }, + { "Master's", IPL_TOHIT_DAMP, 111, 125, 28, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 8600, 13000, 30 }, + { "Champion's", IPL_TOHIT_DAMP, 126, 150, 40, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 15200, 24000, 33 }, + { "King's", IPL_TOHIT_DAMP, 151, 175, 28, PLT_WEAP | PLT_STAFF , GOE_ANY, TRUE, TRUE, 24100, 35000, 38 }, + { "Vulnerable", IPL_ACP_CURSE, 51, 100, 3, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, FALSE, 0, 0, -3 }, + { "Rusted", IPL_ACP_CURSE, 25, 50, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, FALSE, 0, 0, -2 }, + { "Fine", IPL_ACP, 20, 30, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, TRUE, 20, 100, 2 }, + { "Strong", IPL_ACP, 31, 40, 3, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, TRUE, 120, 200, 3 }, + { "Grand", IPL_ACP, 41, 55, 6, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, TRUE, 220, 300, 5 }, + { "Valiant", IPL_ACP, 56, 70, 10, PLT_ARMO | PLT_SHLD , GOE_ANY, TRUE, TRUE, 320, 400, 7 }, + { "Glorious", IPL_ACP, 71, 90, 14, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 420, 600, 9 }, + { "Blessed", IPL_ACP, 91, 110, 19, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 620, 800, 11 }, + { "Saintly", IPL_ACP, 111, 130, 24, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 820, 1200, 13 }, + { "Awesome", IPL_ACP, 131, 150, 28, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 1220, 2000, 15 }, + { "Holy", IPL_ACP, 151, 170, 35, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 5200, 6000, 17 }, + { "Godly", IPL_ACP, 171, 200, 60, PLT_ARMO | PLT_SHLD , GOE_GOOD, TRUE, TRUE, 6200, 7000, 20 }, + { "Red", IPL_FIRERES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 500, 1500, 2 }, + { "Crimson", IPL_FIRERES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 3000, 2 }, + { "Crimson", IPL_FIRERES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3100, 4000, 2 }, + { "Garnet", IPL_FIRERES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8200, 12000, 3 }, + { "Ruby", IPL_FIRERES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 17100, 20000, 5 }, + { "Blue", IPL_LIGHTRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 500, 1500, 2 }, + { "Azure", IPL_LIGHTRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 3000, 2 }, + { "Lapis", IPL_LIGHTRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3100, 4000, 2 }, + { "Cobalt", IPL_LIGHTRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8200, 12000, 3 }, + { "Sapphire", IPL_LIGHTRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 17100, 20000, 5 }, + { "White", IPL_MAGICRES, 10, 20, 4, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 500, 1500, 2 }, + { "Pearl", IPL_MAGICRES, 21, 30, 10, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 3000, 2 }, + { "Ivory", IPL_MAGICRES, 31, 40, 16, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3100, 4000, 2 }, + { "Crystal", IPL_MAGICRES, 41, 50, 20, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8200, 12000, 3 }, + { "Diamond", IPL_MAGICRES, 51, 60, 26, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 17100, 20000, 5 }, + { "Topaz", IPL_ALLRES, 10, 15, 8, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2000, 5000, 3 }, + { "Amber", IPL_ALLRES, 16, 20, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 7400, 10000, 3 }, + { "Jade", IPL_ALLRES, 21, 30, 18, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 11000, 15000, 3 }, + { "Obsidian", IPL_ALLRES, 31, 40, 24, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 24000, 40000, 4 }, + { "Emerald", IPL_ALLRES, 41, 50, 31, PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 61000, 75000, 7 }, + { "Hyena's", IPL_MANA_CURSE, 11, 25, 4, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, FALSE, 100, 1000, -2 }, + { "Frog's", IPL_MANA_CURSE, 1, 10, 1, PLT_STAFF | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "Spider's", IPL_MANA, 10, 15, 1, PLT_STAFF | PLT_MISC, GOE_EVIL, FALSE, TRUE, 500, 1000, 2 }, + { "Raven's", IPL_MANA, 15, 20, 5, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 1100, 2000, 3 }, + { "Snake's", IPL_MANA, 21, 30, 9, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 4000, 5 }, + { "Serpent's", IPL_MANA, 30, 40, 15, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 4100, 6000, 7 }, + { "Drake's", IPL_MANA, 41, 50, 21, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 6100, 10000, 9 }, + { "Dragon's", IPL_MANA, 51, 60, 27, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 10100, 15000, 11 }, + { "Wyrm's", IPL_MANA, 61, 80, 35, PLT_STAFF , GOE_ANY, FALSE, TRUE, 15100, 19000, 12 }, + { "Hydra's", IPL_MANA, 81, 100, 60, PLT_STAFF , GOE_ANY, FALSE, TRUE, 19100, 30000, 13 }, + { "Angel's", IPL_SPLLVLADD, 1, 1, 15, PLT_STAFF , GOE_GOOD, FALSE, TRUE, 25000, 25000, 2 }, + { "Arch-Angel's", IPL_SPLLVLADD, 2, 2, 25, PLT_STAFF , GOE_GOOD, FALSE, TRUE, 50000, 50000, 3 }, + { "Plentiful", IPL_CHARGES, 2, 2, 4, PLT_STAFF , GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, + { "Bountiful", IPL_CHARGES, 3, 3, 9, PLT_STAFF , GOE_ANY, FALSE, TRUE, 3000, 3000, 3 }, + { "Flaming", IPL_FIREDAM, 1, 10, 7, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 5000, 5000, 2 }, + { "Lightning", IPL_LIGHTDAM, 2, 20, 18, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 10000, 10000, 2 }, +#ifdef HELLFIRE + { "Jester's", IPL_JESTERS, 1, 1, 7, PLT_WEAP , GOE_ANY, FALSE, TRUE, 1200, 1200, 3 }, + { "Crystalline", IPL_CRYSTALLINE, 30, 70, 5, PLT_WEAP , GOE_ANY, FALSE, TRUE, 1000, 3000, 3 }, + { "Doppelganger's", IPL_DOPPELGANGER, 81, 95, 11, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 2000, 2400, 10 }, #endif - { "", IPL_INVALID, 0, 0, 0, 0 , 0, FALSE, FALSE, 0, 0, 0 }, + { "", IPL_INVALID, 0, 0, 0, 0 , GOE_ANY, FALSE, FALSE, 0, 0, 0 }, // clang-format on }; /** Contains the data related to each item suffix. */ const PLStruct PL_Suffix[] = { -// clang-format off - // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal + // clang-format off + // PLName, PLPower, PLParam1, PLParam2, PLMinLvl, PLIType, PLGOE, PLDouble, PLOk, PLMinVal, PLMaxVal, PLMultVal #ifdef HELLFIRE - { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 100, 200, 2 }, - { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 1300, 1500, 3 }, + { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 100, 200, 2 }, + { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 1300, 1500, 3 }, #else - { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 100, 200, 2 }, - { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 1300, 1500, 3 }, + { "quality", IPL_DAMMOD, 1, 2, 2, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 100, 200, 2 }, + { "maiming", IPL_DAMMOD, 3, 5, 7, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1300, 1500, 3 }, #endif - { "slaying", IPL_DAMMOD, 6, 8, 15, PLT_WEAP , 0, FALSE, TRUE, 2600, 3000, 5 }, - { "gore", IPL_DAMMOD, 9, 12, 25, PLT_WEAP , 0, FALSE, TRUE, 4100, 5000, 8 }, - { "carnage", IPL_DAMMOD, 13, 16, 35, PLT_WEAP , 0, FALSE, TRUE, 5100, 10000, 10 }, - { "slaughter", IPL_DAMMOD, 17, 20, 60, PLT_WEAP , 0, FALSE, TRUE, 10100, 15000, 13 }, - { "pain", IPL_GETHIT_CURSE, 2, 4, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, 1, FALSE, FALSE, 0, 0, -4 }, - { "tears", IPL_GETHIT_CURSE, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "health", IPL_GETHIT, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, 16, FALSE, TRUE, 200, 200, 2 }, - { "protection", IPL_GETHIT, 2, 2, 6, PLT_ARMO | PLT_SHLD , 16, FALSE, TRUE, 400, 800, 4 }, - { "absorption", IPL_GETHIT, 3, 3, 12, PLT_ARMO | PLT_SHLD , 16, FALSE, TRUE, 1001, 2500, 10 }, - { "deflection", IPL_GETHIT, 4, 4, 20, PLT_ARMO , 16, FALSE, TRUE, 2500, 6500, 15 }, - { "osmosis", IPL_GETHIT, 5, 6, 50, PLT_ARMO , 16, FALSE, TRUE, 7500, 10000, 20 }, - { "frailty", IPL_STR_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, + { "slaying", IPL_DAMMOD, 6, 8, 15, PLT_WEAP , GOE_ANY, FALSE, TRUE, 2600, 3000, 5 }, + { "gore", IPL_DAMMOD, 9, 12, 25, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4100, 5000, 8 }, + { "carnage", IPL_DAMMOD, 13, 16, 35, PLT_WEAP , GOE_ANY, FALSE, TRUE, 5100, 10000, 10 }, + { "slaughter", IPL_DAMMOD, 17, 20, 60, PLT_WEAP , GOE_ANY, FALSE, TRUE, 10100, 15000, 13 }, + { "pain", IPL_GETHIT_CURSE, 2, 4, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -4 }, + { "tears", IPL_GETHIT_CURSE, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "health", IPL_GETHIT, 1, 1, 2, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_GOOD, FALSE, TRUE, 200, 200, 2 }, + { "protection", IPL_GETHIT, 2, 2, 6, PLT_ARMO | PLT_SHLD , GOE_GOOD, FALSE, TRUE, 400, 800, 4 }, + { "absorption", IPL_GETHIT, 3, 3, 12, PLT_ARMO | PLT_SHLD , GOE_GOOD, FALSE, TRUE, 1001, 2500, 10 }, + { "deflection", IPL_GETHIT, 4, 4, 20, PLT_ARMO , GOE_GOOD, FALSE, TRUE, 2500, 6500, 15 }, + { "osmosis", IPL_GETHIT, 5, 6, 50, PLT_ARMO , GOE_GOOD, FALSE, TRUE, 7500, 10000, 20 }, + { "frailty", IPL_STR_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, #ifdef HELLFIRE - { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, + { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, #else - { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, + { "weakness", IPL_STR_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "strength", IPL_STR, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, #endif - { "might", IPL_STR, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 1200, 2000, 3 }, - { "power", IPL_STR, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2200, 3000, 4 }, - { "giants", IPL_STR, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3200, 5000, 7 }, - { "titans", IPL_STR, 21, 30, 23, PLT_WEAP | PLT_MISC, 0, FALSE, TRUE, 5200, 10000, 10 }, - { "paralysis", IPL_DEX_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, + { "might", IPL_STR, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 1200, 2000, 3 }, + { "power", IPL_STR, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, + { "giants", IPL_STR, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, + { "titans", IPL_STR, 21, 30, 23, PLT_WEAP | PLT_MISC, GOE_ANY, FALSE, TRUE, 5200, 10000, 10 }, + { "paralysis", IPL_DEX_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, #ifdef HELLFIRE - { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, + { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, #else - { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, + { "atrophy", IPL_DEX_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "dexterity", IPL_DEX, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, #endif - { "skill", IPL_DEX, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 1200, 2000, 3 }, - { "accuracy", IPL_DEX, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2200, 3000, 4 }, - { "precision", IPL_DEX, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3200, 5000, 7 }, - { "perfection", IPL_DEX, 21, 30, 23, PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 5200, 10000, 10 }, - { "the fool", IPL_MAG_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, - { "dyslexia", IPL_MAG_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "magic", IPL_MAG, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 200, 1000, 2 }, - { "the mind", IPL_MAG, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 1200, 2000, 3 }, - { "brilliance", IPL_MAG, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 2200, 3000, 4 }, - { "sorcery", IPL_MAG, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 3200, 5000, 7 }, - { "wizardry", IPL_MAG, 21, 30, 23, PLT_STAFF | PLT_MISC, 0, FALSE, TRUE, 5200, 10000, 10 }, + { "skill", IPL_DEX, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 1200, 2000, 3 }, + { "accuracy", IPL_DEX, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, + { "precision", IPL_DEX, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, + { "perfection", IPL_DEX, 21, 30, 23, PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 5200, 10000, 10 }, + { "the fool", IPL_MAG_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, + { "dyslexia", IPL_MAG_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "magic", IPL_MAG, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 200, 1000, 2 }, + { "the mind", IPL_MAG, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 1200, 2000, 3 }, + { "brilliance", IPL_MAG, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 2200, 3000, 4 }, + { "sorcery", IPL_MAG, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 3200, 5000, 7 }, + { "wizardry", IPL_MAG, 21, 30, 23, PLT_STAFF | PLT_MISC, GOE_ANY, FALSE, TRUE, 5200, 10000, 10 }, #ifdef HELLFIRE - { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, - { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 200, 1000, 2 }, + { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, + { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 200, 1000, 2 }, #else - { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, - { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 200, 1000, 2 }, + { "illness", IPL_VIT_CURSE, 6, 10, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, + { "disease", IPL_VIT_CURSE, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "vitality", IPL_VIT, 1, 5, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 200, 1000, 2 }, #endif - { "zest", IPL_VIT, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 1200, 2000, 3 }, - { "vim", IPL_VIT, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 2200, 3000, 4 }, - { "vigor", IPL_VIT, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, 16, FALSE, TRUE, 3200, 5000, 7 }, - { "life", IPL_VIT, 21, 30, 23, PLT_MISC, 16, FALSE, TRUE, 5200, 10000, 10 }, + { "zest", IPL_VIT, 6, 10, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 1200, 2000, 3 }, + { "vim", IPL_VIT, 11, 15, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 2200, 3000, 4 }, + { "vigor", IPL_VIT, 16, 20, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_GOOD, FALSE, TRUE, 3200, 5000, 7 }, + { "life", IPL_VIT, 21, 30, 23, PLT_MISC, GOE_GOOD, FALSE, TRUE, 5200, 10000, 10 }, #ifdef HELLFIRE - { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -10 }, - { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -5 }, - { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 800, 4000, 5 }, - { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 4800, 8000, 10 }, + { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -10 }, + { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -5 }, + { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 800, 4000, 5 }, + { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 4800, 8000, 10 }, #else - { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -10 }, - { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 1, FALSE, FALSE, 0, 0, -5 }, - { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 800, 4000, 5 }, - { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 4800, 8000, 10 }, + { "trouble", IPL_ATTRIBS_CURSE, 6, 10, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -10 }, + { "the pit", IPL_ATTRIBS_CURSE, 1, 5, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -5 }, + { "the sky", IPL_ATTRIBS, 1, 3, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 800, 4000, 5 }, + { "the moon", IPL_ATTRIBS, 4, 7, 11, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 4800, 8000, 10 }, #endif - { "the stars", IPL_ATTRIBS, 8, 11, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 8800, 12000, 15 }, - { "the heavens", IPL_ATTRIBS, 12, 15, 25, PLT_WEAP | PLT_BOW | PLT_MISC, 0, FALSE, TRUE, 12800, 20000, 20 }, - { "the zodiac", IPL_ATTRIBS, 16, 20, 30, PLT_MISC, 0, FALSE, TRUE, 20800, 40000, 30 }, - { "the vulture", IPL_LIFE_CURSE, 11, 25, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, 1, FALSE, FALSE, 0, 0, -4 }, - { "the jackal", IPL_LIFE_CURSE, 1, 10, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "the fox", IPL_LIFE, 10, 15, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 100, 1000, 2 }, - { "the jaguar", IPL_LIFE, 16, 20, 5, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 1100, 2000, 3 }, - { "the eagle", IPL_LIFE, 21, 30, 9, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 2100, 4000, 5 }, - { "the wolf", IPL_LIFE, 30, 40, 15, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 4100, 6000, 7 }, - { "the tiger", IPL_LIFE, 41, 50, 21, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 6100, 10000, 9 }, - { "the lion", IPL_LIFE, 51, 60, 27, PLT_ARMO | PLT_MISC, 0, FALSE, TRUE, 10100, 15000, 11 }, - { "the mammoth", IPL_LIFE, 61, 80, 35, PLT_ARMO , 0, FALSE, TRUE, 15100, 19000, 12 }, - { "the whale", IPL_LIFE, 81, 100, 60, PLT_ARMO , 0, FALSE, TRUE, 19100, 30000, 13 }, - { "fragility", IPL_DUR_CURSE, 100, 100, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP , 1, FALSE, FALSE, 0, 0, -4 }, - { "brittleness", IPL_DUR_CURSE, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , 1, FALSE, FALSE, 0, 0, -2 }, + { "the stars", IPL_ATTRIBS, 8, 11, 17, PLT_ARMO | PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 8800, 12000, 15 }, + { "the heavens", IPL_ATTRIBS, 12, 15, 25, PLT_WEAP | PLT_BOW | PLT_MISC, GOE_ANY, FALSE, TRUE, 12800, 20000, 20 }, + { "the zodiac", IPL_ATTRIBS, 16, 20, 30, PLT_MISC, GOE_ANY, FALSE, TRUE, 20800, 40000, 30 }, + { "the vulture", IPL_LIFE_CURSE, 11, 25, 4, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -4 }, + { "the jackal", IPL_LIFE_CURSE, 1, 10, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "the fox", IPL_LIFE, 10, 15, 1, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 100, 1000, 2 }, + { "the jaguar", IPL_LIFE, 16, 20, 5, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 1100, 2000, 3 }, + { "the eagle", IPL_LIFE, 21, 30, 9, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 2100, 4000, 5 }, + { "the wolf", IPL_LIFE, 30, 40, 15, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 4100, 6000, 7 }, + { "the tiger", IPL_LIFE, 41, 50, 21, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 6100, 10000, 9 }, + { "the lion", IPL_LIFE, 51, 60, 27, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 10100, 15000, 11 }, + { "the mammoth", IPL_LIFE, 61, 80, 35, PLT_ARMO , GOE_ANY, FALSE, TRUE, 15100, 19000, 12 }, + { "the whale", IPL_LIFE, 81, 100, 60, PLT_ARMO , GOE_ANY, FALSE, TRUE, 19100, 30000, 13 }, + { "fragility", IPL_DUR_CURSE, 100, 100, 3, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, FALSE, FALSE, 0, 0, -4 }, + { "brittleness", IPL_DUR_CURSE, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, #ifdef HELLFIRE - { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 100, 100, 2 }, - { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 200, 200, 2 }, - { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 300, 300, 2 }, - { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 600, 600, 5 }, + { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 100, 100, 2 }, + { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, + { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 300, 300, 2 }, + { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 600, 600, 5 }, #else - { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , 0, FALSE, TRUE, 100, 100, 2 }, - { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP , 0, FALSE, TRUE, 200, 200, 2 }, - { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP , 0, FALSE, TRUE, 300, 300, 2 }, - { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP , 0, FALSE, TRUE, 600, 600, 5 }, + { "sturdiness", IPL_DUR, 26, 75, 1, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 100, 100, 2 }, + { "craftsmanship", IPL_DUR, 51, 100, 6, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, + { "structure", IPL_DUR, 101, 200, 12, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 300, 300, 2 }, + { "the ages", IPL_INDESTRUCTIBLE, 0, 0, 25, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_ANY, FALSE, TRUE, 600, 600, 5 }, #endif - { "the dark", IPL_LIGHT_CURSE, 4, 4, 6, PLT_ARMO | PLT_WEAP | PLT_MISC, 1, FALSE, FALSE, 0, 0, -3 }, - { "the night", IPL_LIGHT_CURSE, 2, 2, 3, PLT_ARMO | PLT_WEAP | PLT_MISC, 1, FALSE, FALSE, 0, 0, -2 }, - { "light", IPL_LIGHT, 2, 2, 4, PLT_ARMO | PLT_WEAP | PLT_MISC, 16, FALSE, TRUE, 750, 750, 2 }, - { "radiance", IPL_LIGHT, 4, 4, 8, PLT_ARMO | PLT_WEAP | PLT_MISC, 16, FALSE, TRUE, 1500, 1500, 3 }, - { "flame", IPL_FIRE_ARROWS, 1, 3, 1, PLT_BOW , 0, FALSE, TRUE, 2000, 2000, 2 }, - { "fire", IPL_FIRE_ARROWS, 1, 6, 11, PLT_BOW , 0, FALSE, TRUE, 4000, 4000, 4 }, - { "burning", IPL_FIRE_ARROWS, 1, 16, 35, PLT_BOW , 0, FALSE, TRUE, 6000, 6000, 6 }, - { "shock", IPL_LIGHT_ARROWS, 1, 6, 13, PLT_BOW , 0, FALSE, TRUE, 6000, 6000, 2 }, - { "lightning", IPL_LIGHT_ARROWS, 1, 10, 21, PLT_BOW , 0, FALSE, TRUE, 8000, 8000, 4 }, - { "thunder", IPL_LIGHT_ARROWS, 1, 20, 60, PLT_BOW , 0, FALSE, TRUE, 12000, 12000, 6 }, - { "many", IPL_DUR, 100, 100, 3, PLT_BOW , 0, FALSE, TRUE, 750, 750, 2 }, - { "plenty", IPL_DUR, 200, 200, 7, PLT_BOW , 0, FALSE, TRUE, 1500, 1500, 3 }, - { "thorns", IPL_THORNS, 1, 3, 1, PLT_ARMO | PLT_SHLD , 0, FALSE, TRUE, 500, 500, 2 }, - { "corruption", IPL_NOMANA, 0, 0, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP , 1, FALSE, FALSE, -1000, -1000, 2 }, - { "thieves", IPL_ABSHALFTRAP, 0, 0, 11, PLT_ARMO | PLT_SHLD | PLT_MISC, 0, FALSE, TRUE, 1500, 1500, 2 }, - { "the bear", IPL_KNOCKBACK, 0, 0, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , 1, FALSE, TRUE, 750, 750, 2 }, - { "the bat", IPL_STEALMANA, 3, 3, 8, PLT_WEAP , 0, FALSE, TRUE, 7500, 7500, 3 }, - { "vampires", IPL_STEALMANA, 5, 5, 19, PLT_WEAP , 0, FALSE, TRUE, 15000, 15000, 3 }, - { "the leech", IPL_STEALLIFE, 3, 3, 8, PLT_WEAP , 0, FALSE, TRUE, 7500, 7500, 3 }, - { "blood", IPL_STEALLIFE, 5, 5, 19, PLT_WEAP , 0, FALSE, TRUE, 15000, 15000, 3 }, + { "the dark", IPL_LIGHT_CURSE, 4, 4, 6, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -3 }, + { "the night", IPL_LIGHT_CURSE, 2, 2, 3, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_EVIL, FALSE, FALSE, 0, 0, -2 }, + { "light", IPL_LIGHT, 2, 2, 4, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, FALSE, TRUE, 750, 750, 2 }, + { "radiance", IPL_LIGHT, 4, 4, 8, PLT_ARMO | PLT_WEAP | PLT_MISC, GOE_GOOD, FALSE, TRUE, 1500, 1500, 3 }, + { "flame", IPL_FIRE_ARROWS, 1, 3, 1, PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, + { "fire", IPL_FIRE_ARROWS, 1, 6, 11, PLT_BOW , GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, + { "burning", IPL_FIRE_ARROWS, 1, 16, 35, PLT_BOW , GOE_ANY, FALSE, TRUE, 6000, 6000, 6 }, + { "shock", IPL_LIGHT_ARROWS, 1, 6, 13, PLT_BOW , GOE_ANY, FALSE, TRUE, 6000, 6000, 2 }, + { "lightning", IPL_LIGHT_ARROWS, 1, 10, 21, PLT_BOW , GOE_ANY, FALSE, TRUE, 8000, 8000, 4 }, + { "thunder", IPL_LIGHT_ARROWS, 1, 20, 60, PLT_BOW , GOE_ANY, FALSE, TRUE, 12000, 12000, 6 }, + { "many", IPL_DUR, 100, 100, 3, PLT_BOW , GOE_ANY, FALSE, TRUE, 750, 750, 2 }, + { "plenty", IPL_DUR, 200, 200, 7, PLT_BOW , GOE_ANY, FALSE, TRUE, 1500, 1500, 3 }, + { "thorns", IPL_THORNS, 1, 3, 1, PLT_ARMO | PLT_SHLD , GOE_ANY, FALSE, TRUE, 500, 500, 2 }, + { "corruption", IPL_NOMANA, 0, 0, 5, PLT_ARMO | PLT_SHLD | PLT_WEAP , GOE_EVIL, FALSE, FALSE, -1000, -1000, 2 }, + { "thieves", IPL_ABSHALFTRAP, 0, 0, 11, PLT_ARMO | PLT_SHLD | PLT_MISC, GOE_ANY, FALSE, TRUE, 1500, 1500, 2 }, + { "the bear", IPL_KNOCKBACK, 0, 0, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_EVIL, FALSE, TRUE, 750, 750, 2 }, + { "the bat", IPL_STEALMANA, 3, 3, 8, PLT_WEAP , GOE_ANY, FALSE, TRUE, 7500, 7500, 3 }, + { "vampires", IPL_STEALMANA, 5, 5, 19, PLT_WEAP , GOE_ANY, FALSE, TRUE, 15000, 15000, 3 }, + { "the leech", IPL_STEALLIFE, 3, 3, 8, PLT_WEAP , GOE_ANY, FALSE, TRUE, 7500, 7500, 3 }, + { "blood", IPL_STEALLIFE, 5, 5, 19, PLT_WEAP , GOE_ANY, FALSE, TRUE, 15000, 15000, 3 }, #ifdef HELLFIRE - { "piercing", IPL_TARGAC, 1, 1, 1, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 1000, 1000, 3 }, - { "puncturing", IPL_TARGAC, 2, 2, 9, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 2000, 2000, 6 }, - { "bashing", IPL_TARGAC, 3, 3, 17, PLT_WEAP , 0, FALSE, TRUE, 4000, 4000, 12 }, + { "piercing", IPL_TARGAC, 1, 1, 1, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1000, 1000, 3 }, + { "puncturing", IPL_TARGAC, 2, 2, 9, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 6 }, + { "bashing", IPL_TARGAC, 3, 3, 17, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4000, 4000, 12 }, #else - { "piercing", IPL_TARGAC, 2, 6, 1, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 1000, 1000, 3 }, - { "puncturing", IPL_TARGAC, 4, 12, 9, PLT_WEAP | PLT_BOW , 0, FALSE, TRUE, 2000, 2000, 6 }, - { "bashing", IPL_TARGAC, 8, 24, 17, PLT_WEAP , 0, FALSE, TRUE, 4000, 4000, 12 }, + { "piercing", IPL_TARGAC, 2, 6, 1, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 1000, 1000, 3 }, + { "puncturing", IPL_TARGAC, 4, 12, 9, PLT_WEAP | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 6 }, + { "bashing", IPL_TARGAC, 8, 24, 17, PLT_WEAP , GOE_ANY, FALSE, TRUE, 4000, 4000, 12 }, #endif - { "readiness", IPL_FASTATTACK, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 2000, 2000, 2 }, - { "swiftness", IPL_FASTATTACK, 2, 2, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 4000, 4000, 4 }, - { "speed", IPL_FASTATTACK, 3, 3, 19, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 8000, 8000, 8 }, - { "haste", IPL_FASTATTACK, 4, 4, 27, PLT_WEAP | PLT_STAFF , 0, FALSE, TRUE, 16000, 16000, 16 }, - { "balance", IPL_FASTRECOVER, 1, 1, 1, PLT_ARMO | PLT_MISC, 0, FALSE, TRUE, 2000, 2000, 2 }, - { "stability", IPL_FASTRECOVER, 2, 2, 10, PLT_ARMO | PLT_MISC, 0, FALSE, TRUE, 4000, 4000, 4 }, - { "harmony", IPL_FASTRECOVER, 3, 3, 20, PLT_ARMO | PLT_MISC, 0, FALSE, TRUE, 8000, 8000, 8 }, - { "blocking", IPL_FASTBLOCK, 1, 1, 5, PLT_SHLD , 0, FALSE, TRUE, 4000, 4000, 4 }, + { "readiness", IPL_FASTATTACK, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, + { "swiftness", IPL_FASTATTACK, 2, 2, 10, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, + { "speed", IPL_FASTATTACK, 3, 3, 19, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 8000, 8000, 8 }, + { "haste", IPL_FASTATTACK, 4, 4, 27, PLT_WEAP | PLT_STAFF , GOE_ANY, FALSE, TRUE, 16000, 16000, 16 }, + { "balance", IPL_FASTRECOVER, 1, 1, 1, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 2000, 2000, 2 }, + { "stability", IPL_FASTRECOVER, 2, 2, 10, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, + { "harmony", IPL_FASTRECOVER, 3, 3, 20, PLT_ARMO | PLT_MISC, GOE_ANY, FALSE, TRUE, 8000, 8000, 8 }, + { "blocking", IPL_FASTBLOCK, 1, 1, 5, PLT_SHLD , GOE_ANY, FALSE, TRUE, 4000, 4000, 4 }, #ifdef HELLFIRE - { "devastation", IPL_DEVASTATION, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 1200, 1200, 3 }, - { "decay", IPL_DECAY, 150, 250, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 200, 200, 2 }, - { "peril", IPL_PERIL, 1, 1, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , 0, FALSE, TRUE, 500, 500, 1 }, + { "devastation", IPL_DEVASTATION, 1, 1, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 1200, 1200, 3 }, + { "decay", IPL_DECAY, 150, 250, 1, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 200, 200, 2 }, + { "peril", IPL_PERIL, 1, 1, 5, PLT_WEAP | PLT_STAFF | PLT_BOW , GOE_ANY, FALSE, TRUE, 500, 500, 1 }, #endif - { "", IPL_INVALID, 0, 0, 0, 0 , 0, FALSE, FALSE, 0, 0, 0 }, + { "", IPL_INVALID, 0, 0, 0, 0 , GOE_ANY, FALSE, FALSE, 0, 0, 0 }, // clang-format on }; diff --git a/Source/items.cpp b/Source/items.cpp index 32a014f39..36d5d6cc4 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -576,13 +576,13 @@ void AddInitItems() item[i]._iSeed = GetRndSeed(); SetRndSeed(item[i]._iSeed); #ifdef HELLFIRE - if (random_(12, 2)) + if (random_(12, 2) != 0) GetItemAttrs(i, IDI_HEAL, curlv); else GetItemAttrs(i, IDI_MANA, curlv); item[i]._iCreateInfo = curlv - CF_PREGEN; #else - if (random_(12, 2)) + if (random_(12, 2) != 0) GetItemAttrs(i, IDI_HEAL, currlevel); else GetItemAttrs(i, IDI_MANA, currlevel); @@ -1818,7 +1818,7 @@ void GetStaffSpell(int i, int lvl, BOOL onlygood) char istr[64]; #ifndef HELLFIRE - if (!random_(17, 4)) { + if (random_(17, 4) == 0) { GetItemPower(i, lvl >> 1, lvl, PLT_STAFF, onlygood); } else #endif @@ -2455,21 +2455,21 @@ void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) pre = random_(23, 4); post = random_(23, 3); if (pre != 0 && post == 0) { - if (random_(23, 2)) + if (random_(23, 2) != 0) post = 1; else pre = 0; } preidx = -1; sufidx = -1; - goe = 0; - if (!onlygood && random_(0, 3)) + goe = GOE_ANY; + if (!onlygood && random_(0, 3) != 0) onlygood = TRUE; - if (!pre) { + if (pre == 0) { nt = 0; for (j = 0; PL_Prefix[j].PLPower != -1; j++) { if (flgs & PL_Prefix[j].PLIType) { - if (PL_Prefix[j].PLMinLvl >= minlvl && PL_Prefix[j].PLMinLvl <= maxlvl && (!onlygood || PL_Prefix[j].PLOk) && (flgs != 256 || PL_Prefix[j].PLPower != 15)) { + if (PL_Prefix[j].PLMinLvl >= minlvl && PL_Prefix[j].PLMinLvl <= maxlvl && (!onlygood || PL_Prefix[j].PLOk) && (flgs != PLT_STAFF || PL_Prefix[j].PLPower != IPL_CHARGES)) { l[nt] = j; nt++; if (PL_Prefix[j].PLDouble) { @@ -2501,7 +2501,7 @@ void GetItemPower(int i, int minlvl, int maxlvl, int flgs, BOOL onlygood) for (j = 0; PL_Suffix[j].PLPower != -1; j++) { if (PL_Suffix[j].PLIType & flgs && PL_Suffix[j].PLMinLvl >= minlvl && PL_Suffix[j].PLMinLvl <= maxlvl - && (goe | PL_Suffix[j].PLGOE) != 0x11 + && (goe | PL_Suffix[j].PLGOE) != (GOE_GOOD | GOE_EVIL) && (!onlygood || PL_Suffix[j].PLOk)) { l[nl] = j; nl++; @@ -3077,12 +3077,12 @@ void SetupAllUseful(int ii, int iseed, int lvl) break; } #else - if (random_(34, 2)) + if (random_(34, 2) != 0) idx = IDI_HEAL; else idx = IDI_MANA; - if (lvl > 1 && !random_(34, 3)) + if (lvl > 1 && random_(34, 3) == 0) idx = IDI_PORTAL; #endif diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 80525fbb2..9c86ba941 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1027,7 +1027,7 @@ void CheckMissileCol(int i, int mindam, int maxdam, BOOL shift, int mx, int my, int oi; if (missile[i]._miAnimType != MFILE_FIREWAL && missile[i]._misource != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (dMonster[mx][my] > 0) { if (MonsterMHit( missile[i]._misource, @@ -1564,7 +1564,7 @@ void missiles_steal_pots(int mi, int sx, int sy, int dx, int dy, int midir, char for (si = 0; si < MAXBELTITEMS; si++) { ii = -1; if (plr[pnum].SpdList[si]._itype == ITYPE_MISC) { - if (random_(205, 2)) { + if (random_(205, 2) != 0) { switch (plr[pnum].SpdList[si]._iMiscId) { case IMISC_FULLHEAL: ii = ItemMiscIdIdx(IMISC_HEAL); @@ -1577,7 +1577,7 @@ void missiles_steal_pots(int mi, int sx, int sy, int dx, int dy, int midir, char ii = ItemMiscIdIdx(IMISC_MANA); break; case IMISC_REJUV: - if (random_(205, 2)) { + if (random_(205, 2) != 0) { ii = ItemMiscIdIdx(IMISC_MANA); } else { ii = ItemMiscIdIdx(IMISC_HEAL); @@ -1657,7 +1657,7 @@ void missiles_spec_arrow(int mi, int sx, int sy, int dx, int dy, int midir, char int av; av = 0; - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { if (plr[id]._pClass == PC_ROGUE) av += (plr[id]._pLevel - 1) >> 2; else if (plr[id]._pClass == PC_WARRIOR || plr[id]._pClass == PC_BARD) @@ -1715,7 +1715,7 @@ void missiles_warp(int mi, int sx, int sy, int dx, int dy, int midir, char miene missile[mi]._miVar1 = 0; missile[mi]._mix = tx; missile[mi]._miy = ty; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_WARP); } @@ -1738,7 +1738,7 @@ void missiles_rune_explosion(int mi, int sx, int sy, int dx, int dy, int midir, { int i, dmg; - if (!mienemy || mienemy == 2) { + if (mienemy == TARGET_MONSTERS || mienemy == TARGET_BOTH) { missile[mi]._midam = 2 * (plr[id]._pLevel + random_(60, 10) + random_(60, 10)) + 4; for (i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam >> 3; @@ -1769,7 +1769,7 @@ void missiles_immo_1(int mi, int sx, int sy, int dx, int dy, int midir, char mie dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { missile[mi]._midam = 2 * (plr[id]._pLevel + random_(60, 10) + random_(60, 10)) + 4; for (i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam >> 3; @@ -1802,7 +1802,7 @@ void missiles_immo_2(int mi, int sx, int sy, int dx, int dy, int midir, char mie dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { i = missile[mi]._mispllvl + 16; if (i > 50) { i = 50; @@ -1848,7 +1848,7 @@ void missiles_433040(int mi, int sx, int sy, int dx, int dy, int midir, char mie { int lvl; - if (!mienemy && id != -1) { + if (mienemy == TARGET_MONSTERS && id != -1) { missile[mi]._midam = 0; if (2 * (id > 0)) lvl = plr[id]._pLevel; @@ -1896,7 +1896,7 @@ void missiles_magi(int mi, int sx, int sy, int dx, int dy, int midir, char miene void missiles_ring(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) { missile[mi]._miDelFlag = TRUE; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_FIRERING); missile[mi]._miVar1 = sx; missile[mi]._miVar2 = sy; @@ -1930,7 +1930,7 @@ void missiles_search(int mi, int sx, int sy, int dx, int dy, int midir, char mie else lvl = 1; missile[mi]._mirange = lvl + 10 * missile[mi]._mispllvl + 245; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_SEARCH); for (i = 0; i < nummissiles; i++) { @@ -1951,7 +1951,7 @@ void missiles_search(int mi, int sx, int sy, int dx, int dy, int midir, char mie void missiles_cbolt_arrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) { - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { if (id == myplr) { missile[mi]._mirnd = random_(63, 15) + 1; } else { @@ -2007,7 +2007,7 @@ void AddLArrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { #ifdef HELLFIRE int av = 32; @@ -2051,7 +2051,7 @@ void AddArrow(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { av = 32; if (plr[id]._pIFlags & ISPL_RNDARROWVEL) { av = random_(64, 32) + 16; @@ -2146,7 +2146,7 @@ void AddRndTeleport(int mi, int sx, int sy, int dx, int dy, int midir, char mien missile[mi]._mix = sx + r1; missile[mi]._miy = sy + r2; #endif - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_RNDTELEPORT); } else { pn = dObject[dx][dy] - 1; @@ -2295,7 +2295,7 @@ void AddFireball(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy dx += XDirAdd[midir]; dy += YDirAdd[midir]; } - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { missile[mi]._midam = 2 * (plr[id]._pLevel + random_(60, 10) + random_(60, 10)) + 4; for (i = missile[mi]._mispllvl; i > 0; i--) { missile[mi]._midam += missile[mi]._midam >> 3; @@ -2320,7 +2320,7 @@ void AddFireball(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy void AddLightctrl(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, int id, int dam) { - if (!dam && !mienemy) + if (!dam && mienemy == TARGET_MONSTERS) UseMana(id, SPL_LIGHTNING); missile[mi]._miVar1 = sx; missile[mi]._miVar2 = sy; @@ -2341,7 +2341,7 @@ void AddLightning(int mi, int sx, int sy, int dx, int dy, int midir, char mienem } missile[mi]._miAnimFrame = random_(52, 8) + 1; - if (midir < 0 || mienemy == 1 || id == -1) { + if (midir < 0 || mienemy == TARGET_PLAYERS || id == -1) { if (midir < 0 || id == -1) missile[mi]._mirange = 8; else @@ -2494,7 +2494,7 @@ void AddFlash(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i { int i; - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { if (id != -1) { missile[mi]._midam = 0; for (i = 0; i <= plr[id]._pLevel; i++) { @@ -2518,7 +2518,7 @@ void AddFlash2(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, { int i; - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { if (id != -1) { missile[mi]._midam = 0; for (i = 0; i <= plr[id]._pLevel; i++) { @@ -2542,7 +2542,7 @@ void AddManashield(int mi, int sx, int sy, int dx, int dy, int midir, char miene missile[mi]._miVar1 = plr[id]._pHitPoints; missile[mi]._miVar2 = plr[id]._pHPBase; missile[mi]._miVar8 = -1; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_MANASHIELD); #ifndef HELLFIRE if (id == myplr) @@ -2731,7 +2731,7 @@ void AddFlare(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i missile[mi]._miVar1 = sx; missile[mi]._miVar2 = sy; missile[mi]._mlid = AddLight(sx, sy, 8); - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { UseMana(id, SPL_FLARE); plr[id]._pHitPoints -= 320; plr[id]._pHPBase -= 320; @@ -2891,7 +2891,7 @@ void AddEtherealize(int mi, int sx, int sy, int dx, int dy, int midir, char mien missile[mi]._mirange += missile[mi]._mirange * plr[id]._pISplDur >> 7; missile[mi]._miVar1 = plr[id]._pHitPoints; missile[mi]._miVar2 = plr[id]._pHPBase; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_ETHEREALIZE); } @@ -3070,7 +3070,7 @@ void AddInfra(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i missile[mi]._mirange += missile[mi]._mirange >> 3; } missile[mi]._mirange += missile[mi]._mirange * plr[id]._pISplDur >> 7; - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_INFRA); } @@ -3098,7 +3098,7 @@ void AddNova(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, in for (k = missile[mi]._mispllvl; k > 0; k--) { missile[mi]._midam += missile[mi]._midam >> 3; } - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_NOVA); } else { missile[mi]._midam = ((DWORD)currlevel >> 1) + random_(66, 3) + random_(66, 3) + random_(66, 3); @@ -3225,7 +3225,7 @@ void AddFlame(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, i missile[mi]._mityoff = missile[midir]._mityoff; missile[mi]._mirange = missile[mi]._miVar2 + 20; missile[mi]._mlid = AddLight(sx, sy, 1); - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { i = random_(79, plr[id]._pLevel) + random_(79, 2); missile[mi]._midam = 8 * i + 16 + ((8 * i + 16) >> 1); } else { @@ -3240,7 +3240,7 @@ void AddFlamec(int mi, int sx, int sy, int dx, int dy, int midir, char mienemy, dy += YDirAdd[midir]; } GetMissileVel(mi, sx, sy, dx, dy, 32); - if (!mienemy) + if (mienemy == TARGET_MONSTERS) UseMana(id, SPL_FLAME); missile[mi]._miVar1 = sx; missile[mi]._miVar2 = sy; @@ -3349,7 +3349,7 @@ void AddBoneSpirit(int mi, int sx, int sy, int dx, int dy, int midir, char miene missile[mi]._miVar4 = dx; missile[mi]._miVar5 = dy; missile[mi]._mlid = AddLight(sx, sy, 8); - if (!mienemy) { + if (mienemy == TARGET_MONSTERS) { UseMana(id, SPL_BONESPIRIT); plr[id]._pHitPoints -= 384; plr[id]._pHPBase -= 384; @@ -3469,7 +3469,7 @@ int Sentfire(int i, int sx, int sy) if (dMonster[sx][sy] > 0 && monster[dMonster[sx][sy] - 1]._mhitpoints >> 6 > 0 && dMonster[sx][sy] - 1 > MAX_PLRS - 1) { dir = GetDirection(missile[i]._mix, missile[i]._miy, sx, sy); missile[i]._miVar3 = missileavail[0]; - AddMissile(missile[i]._mix, missile[i]._miy, sx, sy, dir, MIS_FIREBOLT, 0, missile[i]._misource, missile[i]._midam, GetSpellLevel(missile[i]._misource, SPL_FIREBOLT)); + AddMissile(missile[i]._mix, missile[i]._miy, sx, sy, dir, MIS_FIREBOLT, TARGET_MONSTERS, missile[i]._misource, missile[i]._midam, GetSpellLevel(missile[i]._misource, SPL_FIREBOLT)); ex = -1; } } @@ -3568,7 +3568,7 @@ void MI_LArrow(int i) GetMissilePos(i); if (p != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { mind = plr[p]._pIMinDam; maxd = plr[p]._pIMaxDam; } else { @@ -3622,7 +3622,7 @@ void MI_Arrow(int i) GetMissilePos(i); p = missile[i]._misource; if (p != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { mind = plr[p]._pIMinDam; maxd = plr[p]._pIMaxDam; } else { @@ -3654,7 +3654,7 @@ void MI_Firebolt(int i) GetMissilePos(i); p = missile[i]._misource; if (p != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { switch (missile[i]._mitype) { case MIS_FIREBOLT: d = random_(75, 10) + (plr[p]._pMagic >> 3) + missile[i]._mispllvl + 1; @@ -3834,7 +3834,7 @@ void MI_Fireball(int i) dam = missile[i]._midam; missile[i]._mirange--; - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { px = plr[id]._px; py = plr[id]._py; } else { @@ -3853,7 +3853,7 @@ void MI_Fireball(int i) GetMissilePos(i); if (missile[i]._mix != missile[i]._misx || missile[i]._miy != missile[i]._misy) CheckMissileCol(i, dam, dam, 0, missile[i]._mix, missile[i]._miy, 0); - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { mx = missile[i]._mix; my = missile[i]._miy; ChangeLight(missile[i]._mlid, missile[i]._mix, my, missile[i]._miAnimFrame); @@ -3962,7 +3962,7 @@ void MI_Rune(int i) } missile[i]._miDelFlag = TRUE; AddUnLight(missile[i]._mlid); - AddMissile(mx, my, mx, my, dir, missile[i]._miVar1, 2, missile[i]._misource, missile[i]._midam, missile[i]._mispllvl); + AddMissile(mx, my, mx, my, dir, missile[i]._miVar1, TARGET_BOTH, missile[i]._misource, missile[i]._midam, missile[i]._mispllvl); } PutMissile(i); } @@ -3976,7 +3976,7 @@ void mi_light_wall(int i) CheckMissileCol(i, missile[i]._midam, missile[i]._midam, 1, missile[i]._mix, missile[i]._miy, 0); if (missile[i]._miHitFlag == TRUE) missile[i]._mirange = range; - if (!missile[i]._mirange) + if (missile[i]._mirange == 0) missile[i]._miDelFlag = TRUE; PutMissile(i); } @@ -4045,7 +4045,7 @@ void mi_immolation(int i) } missile[i]._mirange--; - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { px = plr[id]._px; py = plr[id]._py; } else { @@ -4054,7 +4054,7 @@ void mi_immolation(int i) } if (missile[i]._miAnimType == MFILE_BIGEXP) { - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; AddUnLight(missile[i]._mlid); } @@ -4143,7 +4143,7 @@ void mi_light_arrow(int i) if (!nMissileTable[pn]) { if ((mx != missile[i]._miVar1 || my != missile[i]._miVar2) && mx > 0 && my > 0 && mx < MAXDUNX && my < MAXDUNY) { if (missile[i]._misource != -1) { - if (missile[i]._micaster == 1 + if (missile[i]._micaster == TARGET_PLAYERS && monster[missile[i]._misource].MType->mtype >= MT_STORM && monster[missile[i]._misource].MType->mtype <= MT_MAEL) { AddMissile( @@ -4198,16 +4198,16 @@ void mi_flashfr(int i) int src; src = missile[i]._misource; - if (!missile[i]._micaster && src != -1) { + if (missile[i]._micaster == TARGET_MONSTERS && src != -1) { missile[i]._mix = plr[src]._px; missile[i]._miy = plr[src]._py; missile[i]._mitxoff = plr[src]._pxoff << 16; missile[i]._mityoff = plr[src]._pyoff << 16; } missile[i]._mirange--; - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; - if (!missile[i]._micaster) { + if (missile[i]._micaster == TARGET_MONSTERS) { src = missile[i]._misource; if (src != -1) plr[src]._pBaseToBlk -= 50; @@ -4218,14 +4218,14 @@ void mi_flashfr(int i) void mi_flashbk(int i) { - if (!missile[i]._micaster) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) { missile[i]._mix = plr[missile[i]._misource]._pfutx; missile[i]._miy = plr[missile[i]._misource]._pfuty; } } missile[i]._mirange--; - if (!missile[i]._mirange) + if (missile[i]._mirange == 0) missile[i]._miDelFlag = TRUE; PutMissile(i); } @@ -4284,7 +4284,7 @@ void mi_fire_ring(int i) if (nMissileTable[dp] || missile[i]._miVar8) missile[i]._miVar8 = 1; else - AddMissile(tx, ty, tx, ty, 0, MIS_FIREWALL, 2, src, dmg, missile[i]._mispllvl); + AddMissile(tx, ty, tx, ty, 0, MIS_FIREWALL, TARGET_BOTH, src, dmg, missile[i]._mispllvl); } } } @@ -4315,7 +4315,7 @@ void mi_light_ring(int i) if (nMissileTable[dp] || missile[i]._miVar8) missile[i]._miVar8 = 1; else - AddMissile(tx, ty, tx, ty, 0, MIS_LIGHTWALL, 2, src, dmg, missile[i]._mispllvl); + AddMissile(tx, ty, tx, ty, 0, MIS_LIGHTWALL, TARGET_BOTH, src, dmg, missile[i]._mispllvl); } } } @@ -4325,7 +4325,7 @@ void mi_light_ring(int i) void mi_search(int i) { missile[i]._mirange--; - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; PlaySfxLoc(IS_CAST7, plr[missile[i]._miVar1]._px, plr[missile[i]._miVar1]._py); AutoMapShowItems = FALSE; @@ -4343,7 +4343,7 @@ void mi_lightning_wall(int i) else lvl = 0; dmg = 16 * (random_(53, 10) + random_(53, 10) + lvl + 2); - if (!missile[i]._mirange) { + if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; } else { dp = dPiece[missile[i]._miVar1][missile[i]._miVar2]; @@ -4351,7 +4351,7 @@ void mi_lightning_wall(int i) tx = missile[i]._miVar1 + XDirAdd[missile[i]._miVar3]; ty = missile[i]._miVar2 + YDirAdd[missile[i]._miVar3]; if (!nMissileTable[dp] && !missile[i]._miVar8 && tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - AddMissile(missile[i]._miVar1, missile[i]._miVar2, missile[i]._miVar1, missile[i]._miVar2, plr[src]._pdir, MIS_LIGHTWALL, 2, src, dmg, missile[i]._mispllvl); + AddMissile(missile[i]._miVar1, missile[i]._miVar2, missile[i]._miVar1, missile[i]._miVar2, plr[src]._pdir, MIS_LIGHTWALL, TARGET_BOTH, src, dmg, missile[i]._mispllvl); missile[i]._miVar1 = tx; missile[i]._miVar2 = ty; } else { @@ -4365,7 +4365,7 @@ void mi_lightning_wall(int i) tx = missile[i]._miVar5 + XDirAdd[missile[i]._miVar4]; ty = missile[i]._miVar6 + YDirAdd[missile[i]._miVar4]; if (!nMissileTable[dp] && !missile[i]._miVar7 && tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - AddMissile(missile[i]._miVar5, missile[i]._miVar6, missile[i]._miVar5, missile[i]._miVar6, plr[src]._pdir, MIS_LIGHTWALL, 2, src, dmg, missile[i]._mispllvl); + AddMissile(missile[i]._miVar5, missile[i]._miVar6, missile[i]._miVar5, missile[i]._miVar6, plr[src]._pdir, MIS_LIGHTWALL, TARGET_BOTH, src, dmg, missile[i]._mispllvl); missile[i]._miVar5 = tx; missile[i]._miVar6 = ty; } else { @@ -4388,11 +4388,11 @@ void mi_fire_nova(int i) sx = missile[i]._mix; sy = missile[i]._miy; if (id != -1) { - en = 0; dir = plr[id]._pdir; + en = TARGET_MONSTERS; } else { dir = 0; - en = 1; + en = TARGET_PLAYERS; } for (k = 0; k < 23; k++) { if (sx1 != vCrawlTable[k][6] || sy1 != vCrawlTable[k][7]) { @@ -4413,7 +4413,6 @@ void mi_spec_arrow(int i) { int dir, src, dam, sx, sy, dx, dy, spllvl, mitype, micaster; - dir = 0; src = missile[i]._misource; dam = missile[i]._midam; sx = missile[i]._mix; @@ -4424,7 +4423,7 @@ void mi_spec_arrow(int i) mitype = 0; if (src != -1) { dir = plr[src]._pdir; - micaster = 0; + micaster = TARGET_MONSTERS; switch (plr[src]._pILMinDam) { case 0: @@ -4441,7 +4440,8 @@ void mi_spec_arrow(int i) break; } } else { - micaster = 1; + dir = 0; + micaster = TARGET_PLAYERS; } AddMissile(sx, sy, dx, dy, dir, mitype, micaster, src, dam, spllvl); if (mitype == MIS_CBOLTARROW) { @@ -4463,7 +4463,7 @@ void MI_Lightctrl(int i) p = missile[i]._misource; if (p != -1) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { dam = (random_(79, 2) + random_(79, plr[p]._pLevel) + 2) << 6; } else { dam = 2 * (monster[p].mMinDamage + random_(80, monster[p].mMaxDamage - monster[p].mMinDamage + 1)); @@ -4493,7 +4493,7 @@ void MI_Lightctrl(int i) if (!nMissileTable[pn]) { if ((mx != missile[i]._miVar1 || my != missile[i]._miVar2) && mx > 0 && my > 0 && mx < MAXDUNX && my < MAXDUNY) { if (missile[i]._misource != -1) { - if (missile[i]._micaster == 1 + if (missile[i]._micaster == TARGET_PLAYERS && monster[missile[i]._misource].MType->mtype >= MT_STORM && monster[missile[i]._misource].MType->mtype <= MT_MAEL) { AddMissile( @@ -4594,7 +4594,7 @@ void MI_Town(int i) void MI_Flash(int i) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) plr[missile[i]._misource]._pInvincible = TRUE; } @@ -4607,7 +4607,7 @@ void MI_Flash(int i) CheckMissileCol(i, missile[i]._midam, missile[i]._midam, TRUE, missile[i]._mix + 1, missile[i]._miy + 1, TRUE); if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) plr[missile[i]._misource]._pInvincible = FALSE; } @@ -4617,7 +4617,7 @@ void MI_Flash(int i) void MI_Flash2(int i) { - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) plr[missile[i]._misource]._pInvincible = TRUE; } @@ -4627,7 +4627,7 @@ void MI_Flash2(int i) CheckMissileCol(i, missile[i]._midam, missile[i]._midam, TRUE, missile[i]._mix + 1, missile[i]._miy - 1, TRUE); if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; - if (missile[i]._micaster == 0) { + if (missile[i]._micaster == TARGET_MONSTERS) { if (missile[i]._misource != -1) plr[missile[i]._misource]._pInvincible = FALSE; } @@ -4889,7 +4889,7 @@ void MI_Chain(int i) sx = missile[i]._mix; sy = missile[i]._miy; dir = GetDirection(sx, sy, missile[i]._miVar1, missile[i]._miVar2); - AddMissile(sx, sy, missile[i]._miVar1, missile[i]._miVar2, dir, MIS_LIGHTCTRL, 0, id, 1, missile[i]._mispllvl); + AddMissile(sx, sy, missile[i]._miVar1, missile[i]._miVar2, dir, MIS_LIGHTCTRL, TARGET_MONSTERS, id, 1, missile[i]._mispllvl); rad = missile[i]._mispllvl + 3; if (rad > 19) rad = 19; @@ -4905,7 +4905,7 @@ void MI_Chain(int i) ty = sy + CrawlTable[l]; if (tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY && dMonster[tx][ty] > 0) { dir = GetDirection(sx, sy, tx, ty); - AddMissile(sx, sy, tx, ty, dir, MIS_LIGHTCTRL, 0, id, 1, missile[i]._mispllvl); + AddMissile(sx, sy, tx, ty, dir, MIS_LIGHTCTRL, TARGET_MONSTERS, id, 1, missile[i]._mispllvl); } l += 2; } @@ -4992,8 +4992,8 @@ void MI_Acidsplat(int i) if (missile[i]._mirange == 0) { missile[i]._miDelFlag = TRUE; monst = missile[i]._misource; - dam = missile[i]._mispllvl; - AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_ACIDPUD, 1, monst, (monster[monst].MData->mLevel >= 2) + 1, dam); + dam = (monster[monst].MData->mLevel >= 2 ? 2 : 1); + AddMissile(missile[i]._mix, missile[i]._miy, i, 0, missile[i]._mimfnum, MIS_ACIDPUD, TARGET_PLAYERS, monst, dam, missile[i]._mispllvl); } else { PutMissile(i); } @@ -5172,7 +5172,7 @@ void MI_FirewallC(int i) tx = missile[i]._miVar1 + XDirAdd[missile[i]._miVar3]; ty = missile[i]._miVar2 + YDirAdd[missile[i]._miVar3]; if (!nMissileTable[dPiece[missile[i]._miVar1][missile[i]._miVar2]] && missile[i]._miVar8 == 0 && tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - AddMissile(missile[i]._miVar1, missile[i]._miVar2, missile[i]._miVar1, missile[i]._miVar2, plr[id]._pdir, MIS_FIREWALL, 0, id, 0, missile[i]._mispllvl); + AddMissile(missile[i]._miVar1, missile[i]._miVar2, missile[i]._miVar1, missile[i]._miVar2, plr[id]._pdir, MIS_FIREWALL, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); missile[i]._miVar1 = tx; missile[i]._miVar2 = ty; } else { @@ -5181,7 +5181,7 @@ void MI_FirewallC(int i) tx = missile[i]._miVar5 + XDirAdd[missile[i]._miVar4]; ty = missile[i]._miVar6 + YDirAdd[missile[i]._miVar4]; if (!nMissileTable[dPiece[missile[i]._miVar5][missile[i]._miVar6]] && missile[i]._miVar7 == 0 && tx > 0 && tx < MAXDUNX && ty > 0 && ty < MAXDUNY) { - AddMissile(missile[i]._miVar5, missile[i]._miVar6, missile[i]._miVar5, missile[i]._miVar6, plr[id]._pdir, MIS_FIREWALL, 0, id, 0, missile[i]._mispllvl); + AddMissile(missile[i]._miVar5, missile[i]._miVar6, missile[i]._miVar5, missile[i]._miVar6, plr[id]._pdir, MIS_FIREWALL, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); missile[i]._miVar5 = tx; missile[i]._miVar6 = ty; } else { @@ -5212,11 +5212,11 @@ void MI_Apoca(int i) if (dMonster[k][j] > MAX_PLRS - 1 && !nSolidTable[dPiece[k][j]]) { #ifdef HELLFIRE if (LineClear(missile[i]._mix, missile[i]._miy, k, j)) { - AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, 0, id, missile[i]._midam, 0); + AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, TARGET_MONSTERS, id, missile[i]._midam, 0); exit = TRUE; } #else - AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, 0, id, missile[i]._midam, 0); + AddMissile(k, j, k, j, plr[id]._pdir, MIS_BOOM, TARGET_MONSTERS, id, missile[i]._midam, 0); exit = TRUE; #endif } @@ -5258,7 +5258,7 @@ void MI_Wave(int i) pn = dPiece[nxa][nya]; /// ASSERT: assert((DWORD)pn <= MAXTILES); if (!nMissileTable[pn]) { - AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, 0, id, 0, missile[i]._mispllvl); + AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); nxa += XDirAdd[dira]; nya += YDirAdd[dira]; nxb = sx + XDirAdd[sd] + XDirAdd[dirb]; @@ -5269,7 +5269,7 @@ void MI_Wave(int i) if (nMissileTable[pn] || f1 || nxa <= 0 || nxa >= MAXDUNX || nya <= 0 || nya >= MAXDUNY) { f1 = TRUE; } else { - AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, 0, id, 0, missile[i]._mispllvl); + AddMissile(nxa, nya, nxa + XDirAdd[sd], nya + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); nxa += XDirAdd[dira]; nya += YDirAdd[dira]; } @@ -5278,7 +5278,7 @@ void MI_Wave(int i) if (nMissileTable[pn] || f2 || nxb <= 0 || nxb >= MAXDUNX || nyb <= 0 || nyb >= MAXDUNY) { f2 = TRUE; } else { - AddMissile(nxb, nyb, nxb + XDirAdd[sd], nyb + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, 0, id, 0, missile[i]._mispllvl); + AddMissile(nxb, nyb, nxb + XDirAdd[sd], nyb + YDirAdd[sd], plr[id]._pdir, MIS_FIREMOVE, TARGET_MONSTERS, id, 0, missile[i]._mispllvl); nxb += XDirAdd[dirb]; nyb += YDirAdd[dirb]; } @@ -5300,11 +5300,11 @@ void MI_Nova(int i) sx = missile[i]._mix; sy = missile[i]._miy; if (id != -1) { - en = 0; dir = plr[id]._pdir; + en = TARGET_MONSTERS; } else { dir = 0; - en = 1; + en = TARGET_PLAYERS; } for (k = 0; k < 23; k++) { if (sx1 != vCrawlTable[k][6] || sy1 != vCrawlTable[k][7]) { diff --git a/Source/monster.cpp b/Source/monster.cpp index 6fa25de90..aed4872f1 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1989,7 +1989,7 @@ void MonstStartKill(int i, int pnum, BOOL sendmsg) #else if (Monst->MType->mtype >= MT_NACID && Monst->MType->mtype <= MT_XACID) #endif - AddMissile(Monst->_mx, Monst->_my, 0, 0, 0, MIS_ACIDPUD, 1, i, Monst->_mint + 1, 0); + AddMissile(Monst->_mx, Monst->_my, 0, 0, 0, MIS_ACIDPUD, TARGET_PLAYERS, i, Monst->_mint + 1, 0); } void M2MStartKill(int i, int mid) @@ -2045,7 +2045,7 @@ void M2MStartKill(int i, int mid) CheckQuestKill(mid, TRUE); M_FallenFear(monster[mid]._mx, monster[mid]._my); if (monster[mid].MType->mtype >= MT_NACID && monster[mid].MType->mtype <= MT_XACID) - AddMissile(monster[mid]._mx, monster[mid]._my, 0, 0, 0, MIS_ACIDPUD, 1, mid, monster[mid]._mint + 1, 0); + AddMissile(monster[mid]._mx, monster[mid]._my, 0, 0, 0, MIS_ACIDPUD, TARGET_PLAYERS, mid, monster[mid]._mint + 1, 0); } void M_StartKill(int i, int pnum) @@ -2680,7 +2680,7 @@ BOOL M_DoRAttack(int i) monster[i]._menemyy, monster[i]._mdir, monster[i]._mVar1, - 1, + TARGET_PLAYERS, i, monster[i]._mVar2, 0); @@ -2731,7 +2731,7 @@ BOOL M_DoRSpAttack(int i) monster[i]._menemyy, monster[i]._mdir, monster[i]._mVar1, - 1, + TARGET_PLAYERS, i, monster[i]._mVar3, 0); @@ -3352,11 +3352,11 @@ BOOL M_CallWalk(int i, int md) mdtemp = md; ok = DirOK(i, md); - if (random_(101, 2)) + if (random_(101, 2) != 0) ok = ok || (md = left[mdtemp], DirOK(i, md)) || (md = right[mdtemp], DirOK(i, md)); else ok = ok || (md = right[mdtemp], DirOK(i, md)) || (md = left[mdtemp], DirOK(i, md)); - if (random_(102, 2)) + if (random_(102, 2) != 0) ok = ok || (md = right[right[mdtemp]], DirOK(i, md)) || (md = left[left[mdtemp]], DirOK(i, md)); @@ -3401,7 +3401,7 @@ BOOL M_CallWalk2(int i, int md) mdtemp = md; ok = DirOK(i, md); // Can we continue in the same direction - if (random_(101, 2)) { // Randomly go left or right + if (random_(101, 2) != 0) { // Randomly go left or right ok = ok || (mdtemp = left[md], DirOK(i, left[md])) || (mdtemp = right[md], DirOK(i, right[md])); } else { ok = ok || (mdtemp = right[md], DirOK(i, right[md])) || (mdtemp = left[md], DirOK(i, left[md])); @@ -3705,7 +3705,7 @@ void MAI_Bat(int i) M_CallWalk(i, opposite[md]); Monst->_mgoalvar1++; } else { - if (random_(108, 2)) + if (random_(108, 2) != 0) M_CallWalk(i, left[md]); else M_CallWalk(i, right[md]); @@ -3736,7 +3736,7 @@ void MAI_Bat(int i) Monst->_mgoal = MGOAL_RETREAT; Monst->_mgoalvar1 = 0; if (Monst->MType->mtype == MT_FAMILIAR) { - AddMissile(Monst->_menemyx, Monst->_menemyy, Monst->_menemyx + 1, 0, -1, MIS_LIGHTNING, 1, i, random_(109, 10) + 1, 0); + AddMissile(Monst->_menemyx, Monst->_menemyy, Monst->_menemyx + 1, 0, -1, MIS_LIGHTNING, TARGET_PLAYERS, i, random_(109, 10) + 1, 0); } } @@ -3876,7 +3876,7 @@ void MAI_Sneak(int i) md = GetDirection(Monst->_mx, Monst->_my, plr[Monst->_menemy]._pownerx, plr[Monst->_menemy]._pownery); md = opposite[md]; if (Monst->MType->mtype == MT_UNSEEN) { - if (random_(112, 2)) + if (random_(112, 2) != 0) md = left[md]; else md = right[md]; @@ -4904,8 +4904,8 @@ void MAI_Counselor(int i) } else if (Monst->_mVar1 == MM_DELAY || random_(105, 100) < 2 * Monst->_mint + 20) { M_StartRAttack(i, -1, 0); - AddMissile(Monst->_mx, Monst->_my, 0, 0, Monst->_mdir, MIS_FLASH, 1, i, 4, 0); - AddMissile(Monst->_mx, Monst->_my, 0, 0, Monst->_mdir, MIS_FLASH2, 1, i, 4, 0); + AddMissile(Monst->_mx, Monst->_my, 0, 0, Monst->_mdir, MIS_FLASH, TARGET_PLAYERS, i, 4, 0); + AddMissile(Monst->_mx, Monst->_my, 0, 0, Monst->_mdir, MIS_FLASH2, TARGET_PLAYERS, i, 4, 0); } else M_StartDelay(i, random_(105, 10) + 2 * (5 - Monst->_mint)); } diff --git a/Source/msg.cpp b/Source/msg.cpp index 8adc69c7d..8f655dad7 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -2074,7 +2074,7 @@ static DWORD On_AWAKEGOLEM(TCmd *pCmd, int pnum) } } if (addGolem) - AddMissile(plr[pnum]._px, plr[pnum]._py, p->_mx, p->_my, p->_mdir, MIS_GOLEM, 0, pnum, 0, 1); + AddMissile(plr[pnum]._px, plr[pnum]._py, p->_mx, p->_my, p->_mdir, MIS_GOLEM, TARGET_MONSTERS, pnum, 0, 1); } return sizeof(*p); @@ -2587,7 +2587,7 @@ static DWORD On_OPENHIVE(TCmd *pCmd, int pnum) { TCmdLocParam2 *p = (TCmdLocParam2 *)pCmd; if (gbBufferMsgs != 1) { - AddMissile(p->x, p->y, p->wParam1, p->wParam2, 0, MIS_HIVEEXP2, 0, pnum, 0, 0); + AddMissile(p->x, p->y, p->wParam1, p->wParam2, 0, MIS_HIVEEXP2, TARGET_MONSTERS, pnum, 0, 0); town_4751C6(); } return sizeof(*p); diff --git a/Source/objects.cpp b/Source/objects.cpp index 908712658..c30a63f98 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -1308,7 +1308,7 @@ void AddSCambBook(int i) void AddChest(int i, int t) { - if (!random_(147, 2)) + if (random_(147, 2) == 0) object[i]._oAnimFrame += 3; object[i]._oRndSeed = GetRndSeed(); switch (t) { @@ -1455,7 +1455,7 @@ void AddShrine(int i) } while (!slist[val]); object[i]._oVar1 = val; - if (random_(150, 2)) { + if (random_(150, 2) != 0) { object[i]._oAnimFrame = 12; object[i]._oAnimLen = 22; } @@ -1941,7 +1941,7 @@ void Obj_Circle(int i) ObjChangeMapResync(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4); if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE) quests[Q_BETRAYER]._qvar1 = 4; - AddMissile(plr[myplr]._px, plr[myplr]._py, 35, 46, plr[myplr]._pdir, MIS_RNDTELEPORT, 0, myplr, 0, 0); + AddMissile(plr[myplr]._px, plr[myplr]._py, 35, 46, plr[myplr]._pdir, MIS_RNDTELEPORT, TARGET_MONSTERS, myplr, 0, 0); track_repeat_walk(FALSE); sgbMouseDown = CLICK_NONE; ReleaseCapture(); @@ -2095,7 +2095,7 @@ void Obj_Trap(int i) } if (!deltaload) { dir = GetDirection(sx, sy, dx, dy); - AddMissile(sx, sy, dx, dy, dir, object[i]._oVar3, 1, -1, 0, 0); + AddMissile(sx, sy, dx, dy, dir, object[i]._oVar3, TARGET_PLAYERS, -1, 0, 0); PlaySfxLoc(IS_TRAP, object[oti]._ox, object[oti]._oy); } object[oti]._oTrapFlag = FALSE; @@ -3050,7 +3050,7 @@ void OperateBook(int pnum, int i) } if (do_add_missile) { object[dObject[35][36] - 1]._oVar5++; - AddMissile(plr[pnum]._px, plr[pnum]._py, dx, dy, plr[pnum]._pdir, MIS_RNDTELEPORT, 0, pnum, 0, 0); + AddMissile(plr[pnum]._px, plr[pnum]._py, dx, dy, plr[pnum]._pdir, MIS_RNDTELEPORT, TARGET_MONSTERS, pnum, 0, 0); missile_added = TRUE; do_add_missile = FALSE; } @@ -3078,7 +3078,7 @@ void OperateBook(int pnum, int i) object[i]._oy - 4, plr[myplr]._pdir, MIS_GUARDIAN, - 0, + TARGET_MONSTERS, myplr, 0, 0); @@ -3222,7 +3222,7 @@ void OperateChest(int pnum, int i, DIABOOL sendmsg) mtype = MIS_ARROW; #endif } - AddMissile(object[i]._ox, object[i]._oy, plr[pnum]._px, plr[pnum]._py, mdir, mtype, 1, -1, 0, 0); + AddMissile(object[i]._ox, object[i]._oy, plr[pnum]._px, plr[pnum]._py, mdir, mtype, TARGET_PLAYERS, -1, 0, 0); object[i]._oTrapFlag = FALSE; } if (pnum == myplr) @@ -4138,7 +4138,7 @@ void OperateShrine(int pnum, int i, int sType) plr[myplr]._py, plr[myplr]._pdir, MIS_FIREWALL, - 1, + TARGET_PLAYERS, 0, 2 * currlevel + 2, 0); @@ -4188,7 +4188,7 @@ void OperateShrine(int pnum, int i, int sType) plr[myplr]._py, plr[myplr]._pdir, MIS_FLASH, - 1, + TARGET_PLAYERS, 0, 3 * currlevel + 2, 0); @@ -4207,7 +4207,7 @@ void OperateShrine(int pnum, int i, int sType) plr[myplr]._py, plr[myplr]._pdir, MIS_TOWN, - 1, + TARGET_PLAYERS, 0, 0, 0); @@ -4290,7 +4290,7 @@ void OperateSkelBook(int pnum, int i, DIABOOL sendmsg) object[i]._oAnimFrame += 2; if (!deltaload) { SetRndSeed(object[i]._oRndSeed); - if (random_(161, 5)) + if (random_(161, 5) != 0) CreateTypeItem(object[i]._ox, object[i]._oy, FALSE, ITYPE_MISC, IMISC_SCROLL, sendmsg, FALSE); else CreateTypeItem(object[i]._ox, object[i]._oy, FALSE, ITYPE_MISC, IMISC_BOOK, sendmsg, FALSE); diff --git a/Source/player.cpp b/Source/player.cpp index 40d8f64ed..686a2842c 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -3048,10 +3048,10 @@ BOOL PM_DoAttack(int pnum) } if (plr[pnum]._pIFlags & ISPL_FIREDAM) { - AddMissile(dx, dy, 1, 0, 0, MIS_WEAPEXP, 0, pnum, 0, 0); + AddMissile(dx, dy, 1, 0, 0, MIS_WEAPEXP, TARGET_MONSTERS, pnum, 0, 0); } if (plr[pnum]._pIFlags & ISPL_LIGHTDAM) { - AddMissile(dx, dy, 2, 0, 0, MIS_WEAPEXP, 0, pnum, 0, 0); + AddMissile(dx, dy, 2, 0, 0, MIS_WEAPEXP, TARGET_MONSTERS, pnum, 0, 0); } didhit = FALSE; @@ -3122,7 +3122,7 @@ BOOL PM_DoRangeAttack(int pnum) plr[pnum]._pVar2, plr[pnum]._pdir, mistype, - 0, + TARGET_MONSTERS, pnum, 4, 0); @@ -3194,7 +3194,7 @@ BOOL PM_DoBlock(int pnum) StartStand(pnum, plr[pnum]._pdir); ClearPlrPVars(pnum); - if (!random_(3, 10)) { + if (random_(3, 10) == 0) { ShieldDur(pnum); } return TRUE; @@ -3270,7 +3270,7 @@ BOOL PM_DoSpell(int pnum) 0, plr[pnum]._pVar4); - if (!plr[pnum]._pSplFrom) { + if (plr[pnum]._pSplFrom == 0) { if (plr[pnum]._pRSplType == RSPLTYPE_SCROLL) { if (!(plr[pnum]._pScrlSpells & (unsigned __int64)1 << (plr[pnum]._pRSpell - 1))) { @@ -3347,7 +3347,7 @@ BOOL PM_DoGotHit(int pnum) #endif StartStand(pnum, plr[pnum]._pdir); ClearPlrPVars(pnum); - if (random_(3, 4)) { + if (random_(3, 4) != 0) { ArmorDur(pnum); } diff --git a/Source/portal.cpp b/Source/portal.cpp index 9ff371fb4..8735199ab 100644 --- a/Source/portal.cpp +++ b/Source/portal.cpp @@ -41,7 +41,7 @@ void AddWarpMissile(int i, int x, int y) missiledata[MIS_TOWN].mlSFX = -1; dMissile[x][y] = 0; - mi = AddMissile(0, 0, x, y, 0, MIS_TOWN, 0, i, 0, 0); + mi = AddMissile(0, 0, x, y, 0, MIS_TOWN, TARGET_MONSTERS, i, 0, 0); if (mi != -1) { SetMissDir(mi, 1); diff --git a/Source/quests.cpp b/Source/quests.cpp index 7aba6a483..58f2332b3 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -147,7 +147,7 @@ void InitQuests() if (gbMaxPlayers == 1) { SetRndSeed(glSeedTbl[15]); - if (random_(0, 2)) + if (random_(0, 2) != 0) quests[Q_PWATER]._qactive = QUEST_NOTAVAIL; else quests[Q_SKELKING]._qactive = QUEST_NOTAVAIL; @@ -201,7 +201,7 @@ void CheckQuests() quests[Q_BETRAYER]._qty = 2 * quests[Q_BETRAYER]._qty + 16; rportx = quests[Q_BETRAYER]._qtx; rporty = quests[Q_BETRAYER]._qty; - AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, 0, myplr, 0, 0); + AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, TARGET_MONSTERS, myplr, 0, 0); quests[Q_BETRAYER]._qvar2 = 1; if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE) { quests[Q_BETRAYER]._qvar1 = 3; @@ -214,7 +214,7 @@ void CheckQuests() && quests[Q_BETRAYER]._qvar2 == 4) { rportx = 35; rporty = 32; - AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, 0, myplr, 0, 0); + AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, TARGET_MONSTERS, myplr, 0, 0); quests[Q_BETRAYER]._qvar2 = 3; } @@ -423,7 +423,7 @@ void CheckQuestKill(int m, BOOL sendmsg) quests[Q_BETRAYER]._qvar1 = 7; quests[Q_BETRAYER]._qvar2 = 4; quests[Q_DIABLO]._qactive = QUEST_ACTIVE; - AddMissile(35, 32, 35, 32, 0, MIS_RPORTAL, 0, myplr, 0, 0); + AddMissile(35, 32, 35, 32, 0, MIS_RPORTAL, TARGET_MONSTERS, myplr, 0, 0); if (plr[myplr]._pClass == PC_WARRIOR) { sfxdnum = PS_WARR83; } else if (plr[myplr]._pClass == PC_ROGUE) { diff --git a/Source/spells.cpp b/Source/spells.cpp index 8bb117456..d52bb225e 100644 --- a/Source/spells.cpp +++ b/Source/spells.cpp @@ -125,13 +125,13 @@ void CastSpell(int id, int spl, int sx, int sy, int dx, int dy, int caster, int int dir; // missile direction switch (caster) { - case 1: + case TARGET_PLAYERS: dir = monster[id]._mdir; break; - case 0: + case TARGET_MONSTERS: // caster must be 0 already in this case, but oh well, // it's needed to generate the right code - caster = 0; + caster = TARGET_MONSTERS; dir = plr[id]._pdir; #ifdef HELLFIRE @@ -215,7 +215,7 @@ void DoResurrect(int pnum, int rid) int hp; if ((char)rid != -1) { - AddMissile(plr[rid]._px, plr[rid]._py, plr[rid]._px, plr[rid]._py, 0, MIS_RESURRECTBEAM, 0, pnum, 0, 0); + AddMissile(plr[rid]._px, plr[rid]._py, plr[rid]._px, plr[rid]._py, 0, MIS_RESURRECTBEAM, TARGET_MONSTERS, pnum, 0, 0); } if (pnum == myplr) { @@ -237,9 +237,9 @@ void DoResurrect(int pnum, int rid) PlacePlayer(rid); #endif - hp = 640; + hp = 10 << 6; #ifndef HELLFIRE - if (plr[rid]._pMaxHPBase < 640) { + if (plr[rid]._pMaxHPBase < (10 << 6)) { hp = plr[rid]._pMaxHPBase; } #endif diff --git a/Source/themes.cpp b/Source/themes.cpp index fcfb971b2..ded3f1bf6 100644 --- a/Source/themes.cpp +++ b/Source/themes.cpp @@ -191,7 +191,7 @@ BOOL CheckThemeObj3(int xp, int yp, int t, int f) return FALSE; if (dObject[xp + trm3x[i]][yp + trm3y[i]]) return FALSE; - if (f != -1 && !random_(0, f)) + if (f != -1 && random_(0, f) == 0) return FALSE; } diff --git a/enums.h b/enums.h index 85c92df58..853b73d6f 100644 --- a/enums.h +++ b/enums.h @@ -2303,6 +2303,21 @@ typedef enum placeflag { PLACE_UNIQUE = 4, } placeflag; +typedef enum mienemy_type { + TARGET_MONSTERS = 0, + TARGET_PLAYERS = 1, + TARGET_BOTH = 2, +} mienemy_type; + +/* +Looks like someone treated hex values as binary, so 0x10 came after 0x01, that's why we have 1 and 16, they did the same thing with affix_item_type +*/ +typedef enum goodorevil { + GOE_ANY = 0x00, + GOE_EVIL = 0x01, + GOE_GOOD = 0x10, +}; + /* First 5 bits store level 6th bit stores onlygood flag