case BM_DEMONOLOG_SUMMON_1: // impling { summonLife = (((owner.CurMagic * clvl) / 22) << 6) + ((3 * clvl) << 6) + (owner.MaxCurMana / 3) + RNG(((clvl + 15) << 6)); // start with: 25-40, end with: 1200 toHit = owner.CurMagic * clvl / 666 /* 30 */ + clvl / 2 + slvl / 2 + 12 + RNG((clvl / 10) + 7); // from: 12 +[0-6] = [12-18] to: 30 + 25 + 25 + 12 +[0-11] = [92-103] minDamage = owner.CurMagic * clvl / 500 /* 40 */ // divide by 400! + (GameMode == GAME_MODE_HARD ? (clvl / 8) : (clvl / 4)) + slvl / 2 + 2 + RNG(((clvl / 5) + 3)); // starts with: [2-4], ends with: 40 + 12 + 25 + 2 + [0-12] = [79-91] maxDamage = owner.CurMagic * clvl / 400 /* 50 */ + (GameMode == GAME_MODE_HARD ? (clvl / 8) : (clvl / 4)) + slvl / 2 + (GameMode == GAME_MODE_EASY ? 7 : 6) + RNG(((clvl / 4) + 4 )) ; // starts with: [6-9], ends with: 50 + 12 + 25 + 6 + [0-28] = [93-108] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156... they don't really use it.... minDamageSecond = owner.CurMagic * clvl / 337 /* 37 */ + clvl / 2 + slvl + RNG(( ( clvl / 5) + 2 ) ); // starts with: [1-2], ends with: 37 + 25 + 55 + [0-11] = [117-128] maxDamageSecond = owner.CurMagic * clvl / 250 /* 50 */ + clvl / 2 + slvl + 2 + RNG(( ( clvl / 3) + 2 ) ) ; // starts with: [3-4], ends with: 50 + 25 + 55 + 2 + [0-17] = [132-149] armorClass = owner.CurMagic * clvl / 2000 /* 10 */ + clvl / 2 + slvl + RNG(((clvl / 10) + 5)); // from [1-5] to = 10 + 25 + 50 +[0-9] = [85-94] break; } case BM_DEMONOLOG_SUMMON_2: // goat archer { summonLife = (((owner.CurMagic * clvl) / 13) << 6) + (owner.MaxCurMana / 3) + RNG((((2 * clvl) + 15) << 6)); // start with: 24, end with: 2200 toHit = owner.CurMagic * clvl / 666 + clvl / 3 + slvl + RNG(( clvl / 10) + 7); // from: 1 + [0-6] = [1-7] to: 30 + 16 + 50 + [0-11] = [96-107] minDamage = owner.CurMagic * clvl / 500 /* 40 */ + (GameMode == GAME_MODE_HARD ? (clvl / 4) : (clvl / 2)) + slvl / 3 + 4 + RNG(( ( clvl / 5) + 4 ) ); // starts with: [5-8], ends with: 40 + 50 + 16 + 4 + [0-13] = [85-98] maxDamage = owner.CurMagic * clvl / 400 /* 50 */ + (GameMode == GAME_MODE_HARD ? (clvl / 4) : (clvl / 2)) + slvl / 3 + (GameMode == GAME_MODE_EASY ? 15 : 13) + RNG(( ( clvl / 8) + 5 ) ) ; // starts with: [14-18], ends with: 50 + 50 + 16 + 13 + [0-10] = [104-114] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156 minDamageSecond = owner.CurMagic * clvl / 260 /* 48 */ + clvl / 2 + slvl + RNG((( clvl / 5) + 2 )); // starts with: [1-2], ends with: 48 + 25 + 55 + [0-11] = [128-139] maxDamageSecond = owner.CurMagic * clvl / 208 /* 60 */ + clvl / 2 + slvl + 2 + RNG((( clvl / 3) + 2 )) ; // starts with: [3-4], ends with: 60 + 25 + 55 + 2 + [0-17] = [142-159] armorClass = owner.CurMagic * clvl / 2000 /* 10 */ + clvl / 2 + slvl + RNG((( clvl / 10) + 5 )); // from [1-5] to = 10 + 25 + 50 +[0-9] = [85-94] break; } case BM_DEMONOLOG_SUMMON_3: // satyr lord { summonLife = ((owner.CurMagic * clvl / 5) << 6) + (owner.MaxCurMana * 2) + RNG((((10 * clvl) + 15) << 6)); // start with: [120-144], end with: 12500 + 1000 + [0-514] = [9500-10500] toHit = owner.CurMagic * clvl / 400 /* 50 */ + clvl / 2 + slvl / 2 + 12 + RNG((clvl / 10) + 7); // from: 12 +[0-6] = [12-18] to: 50 + 25 + 25 + 12 +[0-11] = [112-123] minDamage = owner.CurMagic * clvl / 500 /* 40 */ + (GameMode == GAME_MODE_HARD ? (clvl / 4) : (clvl / 2)) + slvl / 2 + 4 + RNG(((clvl / 7) + 4)); // starts with: [5-8], ends with: 40 + 50 + 25 + 4 + [0-10] = [95-104] maxDamage = owner.CurMagic * clvl / 400 /* 50 */ + (GameMode == GAME_MODE_HARD ? (clvl / 4) : (clvl / 2)) + slvl / 2 + 9 + RNG(((clvl / 8) + 5)); // starts with: [9-13], ends with: 50 + 50 + 25 + 8 + [0-10] = [109-119] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156 minDamageSecond = owner.CurMagic * clvl / 260 /* 48 */ + clvl / 2 + slvl + RNG(( ( clvl / 5) + 2 ) ); // starts with: [1-2], ends with: 48 + 25 + 55 + [0-11] = [128-139] maxDamageSecond = owner.CurMagic * clvl / 208 /* 60 */ + clvl / 2 + slvl + 12 + RNG(( ( clvl / 3) + 2 ) ) ; // starts with: [3-4], ends with: 60 + 25 + 55 + 2 + [0-17] = [152-169] armorClass = owner.CurMagic * clvl / 500 /* 40 */ + clvl / 2 + slvl + 1 + RNG(((clvl / 10) + 5)); // from [2-6] to = 40 + 25 + 51 +[0-9] = [116-125] break; } case BM_NECROMANT_SUMMON_1: // skeleton archer { summonLife = (((owner.CurMagic * clvl) / 16) << 6) + (owner.MaxCurMana / 5) + RNG(((clvl + 5) << 6) ); // start with: 15-20, end with: [1500-1600] toHit = owner.CurMagic * clvl / 500 /* 40 */ + clvl / 2 + slvl / 2 + 12 + RNG((clvl / 10) + 7); // from: 12 +[0-6] = [12-18] to: 40 + 25 + 25 + 12 +[0-11] = [102-113] minDamage = owner.CurMagic * clvl / 500 /* 40 */ + (GameMode == GAME_MODE_HARD ? (clvl / 6) : (clvl / 3)) + (slvl / 2) + (GameMode == GAME_MODE_EASY ? 6 : 5) + RNG(((clvl / 10) + 2 )); // starts with: [5-6], ends with: 40 + 16 + 25 + 4 + [0-6] = [85-91] maxDamage = owner.CurMagic * clvl / 400 /* 50 */ + (GameMode == GAME_MODE_HARD ? (clvl / 6) : (clvl / 3)) + (slvl / 2) + 8 + RNG(((clvl / 7) + 5)) ; // starts with: [7-11], ends with: 50 + 16 + 25 + 8 + [0-10] = [99-109] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156 minDamageSecond = owner.CurMagic * clvl / 337 /* 37 */ + clvl / 2 + slvl + RNG(( ( clvl / 5) + 2 ) ); // starts with: [1-2], ends with: 37 + 25 + 55 + [0-11] = [117-128] maxDamageSecond = owner.CurMagic * clvl / 250 /* 50 */ + clvl / 2 + slvl + 2 + RNG(( ( clvl / 3) + 2 ) ) ; // starts with: [3-4], ends with: 50 + 25 + 55 + 2 + [0-17] = [132-149] armorClass = owner.CurMagic * clvl / 2000 /* 10 */ + clvl / 2 + slvl + RNG(((clvl / 10) + 5)); // from [1-5] to = 10 + 25 + 50 +[0-9] = [85-94] break; } case BM_NECROMANT_SUMMON_2: // skeletal warrior { summonLife = (((owner.CurMagic * clvl) / 7) << 6) + (owner.MaxCurMana / 2) + RNG((((2 * clvl) + 15) << 6) ); // start with: 24, end with: 4166 + 250 + [0-115] = [4400-4500] toHit = owner.CurMagic * clvl / 333 /* 60 */ + clvl / 2 + slvl / 2 + 12 + RNG((clvl / 10) + 7); // from: 12 +[0-6] = [12-18] to: 60 + 25 + 25 + 12 +[0-11] = [122-133] minDamage = owner.CurMagic * clvl / 666 /* 30 */ + (GameMode == GAME_MODE_HARD ? (clvl / 5) : (clvl / 2)) + slvl / 2 + (GameMode == GAME_MODE_EASY ? 8 : 7) + RNG(((clvl / 5) + 6)); // starts with: [6-11], ends with: 30 + 25 + 25 + 7 + [0-15] = [87-102] maxDamage = owner.CurMagic * clvl / 500 /* 40 */ + (GameMode == GAME_MODE_HARD ? (clvl / 5) : (clvl / 2)) + slvl / 2 + (GameMode == GAME_MODE_EASY ? 16 : 14) + RNG(((clvl / 8) + 5)); // starts with: [15-19], ends with: 40 + 25 + 25 + 14 + [0-10] = [104-114] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156 minDamageSecond = owner.CurMagic * clvl / 260 /* 48 */ + clvl / 2 + slvl + RNG(( ( clvl / 5) + 2 ) ); // starts with: [1-2], ends with: 48 + 25 + 55 + [0-11] = [128-139] maxDamageSecond = owner.CurMagic * clvl / 208 /* 60 */ + clvl / 2 + slvl + 2 + RNG(( ( clvl / 3) + 2 ) ) ; // starts with: [3-4], ends with: 60 + 25 + 55 + 2 + [0-17] = [142-159] armorClass = owner.CurMagic * clvl / 500 /* 40 */ + clvl / 2 + slvl + RNG(((clvl / 10) + 5)); // from [1-5] to = 40 + 25 + 50 +[0-9] = [115-124] break; } case BM_NECROMANT_SUMMON_3: // greater skeleton { summonLife = ((owner.CurMagic * clvl / 5) << 6) + (owner.MaxCurMana * 2) + RNG((((10 * clvl) + 15) << 6) ); // start with: [120-144], end with: 12500 + 1000 + [0-514] = [9500-10500] toHit = owner.CurMagic * clvl / 300 /* 66 */ + clvl / 2 + slvl / 2 + 12 + RNG((clvl / 10) + 7); // from: 12 +[0-6] = [12-18] to: 66 + 25 + 25 + 12 +[0-11] = [128-139] minDamage = owner.CurMagic * clvl / 500 /* 40 */ + (GameMode == GAME_MODE_HARD ? (clvl / 2) : (clvl / 2)) + slvl / 2 + 5 + RNG(((clvl / 7) + 6)); // starts with: [6-11], ends with: 40 + 25 + 25 + 5 + [0-12] = [95-107] maxDamage = owner.CurMagic * clvl / 400 /* 50 */ + (GameMode == GAME_MODE_HARD ? (clvl / 2) : (clvl / 2)) + slvl / 2 + 20 + RNG(((clvl / 8) + 5)); // starts with: [15-19], ends with: 50 + 25 + 25 + 20 + [0-10] = [110-120] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156 minDamageSecond = owner.CurMagic * clvl / 250 /* 80 */ + clvl + slvl / 2 + 13 + RNG((clvl / 2) + 4); // from: 15 +[0-3] = [15-18] to: 80 + 50 + 25 + 13 +[0-29] = [168-196] maxDamageSecond = owner.CurMagic * clvl / 200 /* 100 */ + clvl + slvl / 2 + 24 + RNG((clvl + 6)); // starts with: [24-30], ends with: 100 + 50 + 25 + 23 + [0-10] = [199-254] armorClass = owner.CurMagic * clvl / 500 /* 40 */ + clvl / 2 + slvl + RNG(((clvl / 10) + 5)); // from [1-5] to = 40 + 25 + 50 +[0-9] = [115-124] break; } case BM_BEASTMASTER_SUMMON_1: // stinger { summonLife = (((owner.CurMagic * clvl) / 17) << 6) + ((5 * clvl) << 6) + (owner.MaxCurMana / 3) + RNG(((clvl + 15) << 6) ); // start with: 28-43, end with: 2250 toHit = owner.CurMagic * clvl / 666 /* 30 */ + clvl / 2 + slvl / 2 + 12 + RNG((clvl / 10) + 7); // from: 12 +[0-6] = [12-18] to: 30 + 25 + 25 + 12 +[0-11] = [92-103] minDamage = owner.CurMagic * clvl / 500 /* 40 */ + (GameMode == GAME_MODE_HARD ? (clvl / 5) : (clvl / 3)) + slvl / 2 + 5 + RNG(( ( clvl / 5) + 3 ) ); // starts with: [5-7], ends with: 40 + 16 + 25 + 5 + [0-12] = [86-98] maxDamage = owner.CurMagic * clvl / 400 /* 50 */ + (GameMode == GAME_MODE_HARD ? (clvl / 5) : (clvl / 3)) + slvl / 2 + 8 + RNG(( ( clvl / 3) + 4 ) ) ; // starts with: [8-11], ends with: 50 + 16 + 25 + 8 + [0-19] = [99-118] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156 minDamageSecond = owner.CurMagic * clvl / 337 /* 37 */ + clvl / 2 + slvl + RNG(( ( clvl / 5) + 2 ) ); // starts with: [1-2], ends with: 37 + 25 + 55 + [0-11] = [117-128] maxDamageSecond = owner.CurMagic * clvl / 250 /* 50 */ + clvl / 2 + slvl + 2 + RNG(( ( clvl / 3) + 2 ) ) ; // starts with: [3-4], ends with: 50 + 25 + 55 + 2 + [0-17] = [132-149] armorClass = owner.CurMagic * clvl / 800 /* 25 */ + clvl / 2 + slvl + RNG(((clvl / 10) + 5)); // from [1-5] to = 25 + 25 + 50 +[0-9] = [100-109] break; } case BM_BEASTMASTER_SUMMON_2: // boar { summonLife = (((owner.CurMagic * clvl) / 6 ) << 6) + (owner.MaxCurMana / 2) + RNG((((2 * clvl) + 15) << 6) ); // start with: 24, end with: 4166 + 250 + [0-115] = [4400-4500] toHit = owner.CurMagic * clvl / 500 /* 40 */ + clvl / 2 + slvl / 2 + 12 + RNG((clvl / 10) + 7); // from: 12 +[0-6] = [12-18] to: 40 + 25 + 25 + 12 +[0-11] = [102-113] minDamage = owner.CurMagic * clvl / 500 /* 40 */ + (GameMode == GAME_MODE_HARD ? (clvl / 5) : (clvl / 2)) + slvl / 2 + 5 + RNG(((clvl / 5) + 5)); // starts with: [6-10], ends with: 40 + 25 + 25 + 5 + [0-14] = [95-109] maxDamage = owner.CurMagic * clvl / 400 /* 50 */ + (GameMode == GAME_MODE_HARD ? (clvl / 5) : (clvl / 2)) + slvl / 2 + 14 + RNG(((clvl / 8) + 5)); // starts with: [15-19], ends with: 50 + 25 + 25 + 14 + [0-10] = [114-124] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156 minDamageSecond = owner.CurMagic * clvl / 500 /* 40 */ + clvl + slvl / 2 + 5 + RNG(((clvl / 5) + 5)); // starts with: [6-10], ends with: 40 + 50 + 25 + 5 + [0-14] = [120-134] maxDamageSecond = owner.CurMagic * clvl / 400 /* 50 */ + clvl + slvl / 2 + 14 + RNG(((clvl / 8) + 5)); // starts with: [15-19], ends with: 50 + 50 + 25 + 14 + [0-10] = [139-149] armorClass = owner.CurMagic * clvl / 500 /* 40 */ + clvl / 2 + slvl + RNG(((clvl / 10) + 5)); // from [1-5] to = 40 + 25 + 50 +[0-9] = [115-124] break; } case BM_BEASTMASTER_SUMMON_3: // siegebreaker { summonLife = ((owner.CurMagic * clvl / 2) << 6) + (owner.MaxCurMana * 2) + RNG((((10 * clvl) + 15) << 6) ); // start with: [120-144], end with: 12500 + 1000 + [0-514] = [11000-12000] toHit = owner.CurMagic * clvl / 266 /* 75 */ + clvl / 2 + slvl / 2 + 15 + RNG((clvl / 10) + 7); // from: 15 +[0-6] = [15-21] to: 75 + 25 + 25 + 15 +[0-11] = [140-151] minDamage = owner.CurMagic * clvl / 400 /* 50 */ + (GameMode == GAME_MODE_HARD ? (clvl / 4) : (clvl / 2)) + slvl / 2 + 7 + RNG(((clvl / 5) + 5)); // starts with: [8-14], ends with: 50 + 25 + 25 + 7 + [0-14] = [107-121] maxDamage = owner.CurMagic * clvl / 333 /* 60 */ + (GameMode == GAME_MODE_HARD ? (clvl / 4) : (clvl / 2)) + slvl / 2 + 18 + RNG(((clvl / 8) + 5)); // starts with: [18-22], ends with: 60 + 25 + 25 + 18 + [0-10] = [128-138] toHitSecond = (3 * slvl / 2) + 3 * clvl / 2; // from 4 to 156 minDamageSecond = owner.CurMagic * clvl / 400 /* 50 */ + clvl + slvl / 2 + 14 + RNG((clvl / 10) + 5); // from: 15 +[0-4] = [15-19] to: 50 + 50 + 25 + 14 +[0-9] = [139-148] maxDamageSecond = owner.CurMagic * clvl / 300 /* 66 */ + clvl + slvl / 2 + 23 + RNG(((clvl / 8) + 5)); // starts with: [24-28], ends with: 66 + 50 + 25 + 23 + [0-10] = [164-174] armorClass = owner.CurMagic * clvl / 400 /* 50 */ + clvl / 2 + slvl + 1 + RNG(((clvl / 10) + 5)); // from [2-6] to = 50 + 25 + 51 +[0-9] = [126-135] break; } case BM_109_GOLEM: default: { summonLife = (((owner.CurMagic * clvl) / 10 ) << 6) // 400 * 50 / 10 = 2000 + ((clvl * clvl) << 6) // from 1 on clvl 1 to 2500 on clvl 50 + 6400 // + 100 + owner.MaxCurMana // 1000 + RNG(((10 * clvl) << 6) ); // start with: 100 + 100 + 50 = 250, end with: 4000 + 1000 + [0-500] = [5000-5500] //summonLife = (((slvl + DungeonLevel) * 20) << 6) + ( owner.MaxCurMana / 2 ); toHit = slvl + 2 * clvl; minDamage = owner.CurMagic * clvl / 1000 /* 20 */ + clvl / 2 + 1 + slvl + RNG(( ( clvl / 5) + 2 ) ); // starts: [1-2], ends: 20 + 25 + 51 + [0-11] = [96-107] maxDamage = owner.CurMagic * clvl / 500 /* 40 */ + 3 + clvl / 2 + slvl + RNG(( ( clvl / 3) + 2 ) ) ; // starts: [3-4], ends: 40 + 3 + 25 + 50 + [0-17]= [118-135] toHitSecond = slvl + 2 * clvl; minDamageSecond = 2 * (slvl + 1); maxDamageSecond = 4 * (slvl + 10); armorClass = owner.CurMagic * clvl / 500 /* 40 */ + (clvl / 2) + slvl + RNG(( ( clvl / 10) + 2 ) ); // from [1-2] to 40 + 25 + 50 +[0-6] = [115-121] break; }