Broke up monolithic give_item() into separate functions.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1023 c06c8d41-db1a-0410-9941-cceddc491573
CRZBZINP644IGYFOCXJKMEKBLFKN5CQ4GGO3PIVH5BTN7FIITPFQC int iquan = 0;// forces colour and quantity, too for intial weapons {dlb}int force_item = 0;
switch (mthing.base_type){case OBJ_WEAPONS:{const int slot = mon->inv[MSLOT_WEAPON] == NON_ITEM? 0 : 1;mon->inv[slot] = thing;break;}case OBJ_MISSILES:mon->inv[MSLOT_MISSILE] = thing;break;case OBJ_SCROLLS:mon->inv[MSLOT_SCROLL] = thing;break;case OBJ_GOLD:mon->inv[MSLOT_GOLD] = thing;break;case OBJ_POTIONS:mon->inv[MSLOT_POTION] = thing;break;case OBJ_MISCELLANY:mon->inv[MSLOT_MISCELLANY] = thing;break;case OBJ_WANDS:mon->inv[MSLOT_WAND] = thing;break;case OBJ_ARMOUR:{mon->inv[MSLOT_ARMOUR] = thing;mon->ac += property( mthing, PARM_AC );
int item_race = MAKE_ITEM_RANDOM_RACE;int give_level = level_number;
const int armour_plus = mthing.plus;ASSERT(abs(armour_plus) < 20);if (abs(armour_plus) < 20)mon->ac += armour_plus;mon->ev += property( mthing, PARM_EVASION ) / 2;if (mon->ev < 1)mon->ev = 1; // This *shouldn't* happen.break;}default:break;}
//mv: THIS CODE DISTRIBUTES WANDS/SCROLLS/POTIONS//(now only to uniques but it's easy to modify that)//7 Aug 01
const int mholy = mons_holiness(mon);if (get_weapon_brand( mthing ) == SPWPN_PROTECTION )mon->ac += 5;else if (get_weapon_brand(mthing) == SPWPN_DISRUPTION&& mholy == MH_UNDEAD){set_item_ego_type( mthing, OBJ_WEAPONS, SPWPN_NORMAL );}else if (get_weapon_brand(mthing) == SPWPN_HOLY_WRATH&& (mholy == MH_UNDEAD || mholy == MH_DEMONIC)){set_item_ego_type( mthing, OBJ_WEAPONS, SPWPN_NORMAL );}
hand_used = 0;if (menv[mid].inv[MSLOT_WEAPON] != NON_ITEM)hand_used = 1;mitm[bp].base_type = OBJ_WEAPONS;mitm[bp].sub_type = (one_chance_in(3) ? WPN_GIANT_SPIKED_CLUB
item.base_type = OBJ_WEAPONS;item.sub_type = (one_chance_in(3) ? WPN_GIANT_SPIKED_CLUB
mitm[bp].base_type = OBJ_WEAPONS;mitm[bp].sub_type = WPN_SCIMITAR;mitm[bp].plus = random2(5);mitm[bp].plus2 = random2(5);mitm[bp].colour = RED; // forced by force_item above {dlb}set_item_ego_type( mitm[bp], OBJ_WEAPONS, SPWPN_FLAMING );
item.base_type = OBJ_WEAPONS;item.sub_type = WPN_SCIMITAR;item.plus = random2(5);item.plus2 = random2(5);item.colour = RED; // forced by force_item above {dlb}set_item_ego_type( item, OBJ_WEAPONS, SPWPN_FLAMING );
mitm[bp].sub_type = (one_chance_in(3) ? WPN_GREAT_MACE : WPN_MACE);set_item_ego_type( mitm[bp], OBJ_WEAPONS, SPWPN_HOLY_WRATH );
item.sub_type = (one_chance_in(3) ? WPN_GREAT_MACE : WPN_MACE);set_item_ego_type( item, OBJ_WEAPONS, SPWPN_HOLY_WRATH );
set_equip_desc( mitm[bp], ISFLAG_GLOWING );set_item_ego_type( mitm[bp], OBJ_WEAPONS, SPWPN_HOLY_WRATH );mitm[bp].plus = 1 + random2(3);mitm[bp].plus2 = 1 + random2(3);
set_equip_desc( item, ISFLAG_GLOWING );set_item_ego_type( item, OBJ_WEAPONS, SPWPN_HOLY_WRATH );item.plus = 1 + random2(3);item.plus2 = 1 + random2(3);
force_item = 1;mitm[bp].base_type = OBJ_WEAPONS;mitm[bp].sub_type = WPN_GREAT_SWORD;mitm[bp].plus = 0;mitm[bp].plus2 = 0;set_item_ego_type( mitm[bp], OBJ_WEAPONS, SPWPN_FLAMING );
force_item = true;item.base_type = OBJ_WEAPONS;item.sub_type = WPN_GREAT_SWORD;item.plus = 0;item.plus2 = 0;set_item_ego_type( item, OBJ_WEAPONS, SPWPN_FLAMING );
force_item = 1;mitm[bp].base_type = OBJ_WEAPONS;mitm[bp].sub_type = WPN_BATTLEAXE;mitm[bp].plus = 0;mitm[bp].plus2 = 0;set_item_ego_type( mitm[bp], OBJ_WEAPONS, SPWPN_FREEZING );
force_item = true;item.base_type = OBJ_WEAPONS;item.sub_type = WPN_BATTLEAXE;item.plus = 0;item.plus2 = 0;set_item_ego_type( item, OBJ_WEAPONS, SPWPN_FREEZING );
//mv: now every item gets in appropriate slot//no more miscellany in potion slot etc. (19 May 2001)// hand_used = 0 unless Ettin's 2nd hand etc.if ( mitm[thing_created].base_type == OBJ_WEAPONS )menv[mid].inv[hand_used] = thing_created;else if ( mitm[thing_created].base_type == OBJ_MISSILES )menv[mid].inv[MSLOT_MISSILE] = thing_created;else if ( mitm[thing_created].base_type == OBJ_SCROLLS )menv[mid].inv[MSLOT_SCROLL] = thing_created;else if ( mitm[thing_created].base_type == OBJ_GOLD )menv[mid].inv[MSLOT_GOLD] = thing_created;else if ( mitm[thing_created].base_type == OBJ_POTIONS )menv[mid].inv[MSLOT_POTION] = thing_created;else if ( mitm[thing_created].base_type == OBJ_MISCELLANY )menv[mid].inv[MSLOT_MISCELLANY] = thing_created;
return (item_race);}
if (get_weapon_brand( mitm[thing_created] ) == SPWPN_PROTECTION )menv[mid].ac += 5;if (!force_item || mitm[thing_created].colour == BLACK)item_colour( mitm[thing_created] );give_ammo:
static void give_ammo(monsters *mon, int level, int item_race){
menv[mid].ac += property( mitm[thing_created], PARM_AC );const int armour_plus = mitm[thing_created].plus;ASSERT(abs(armour_plus) < 20);
}
menv[mid].ev += property( mitm[thing_created], PARM_EVASION ) / 2;if (menv[mid].ev < 1)menv[mid].ev = 1; // This *shouldn't* happen.
give_scroll(mons, level_number);give_wand(mons, level_number);give_potion(mons, level_number);const int item_race = give_weapon(mons, level_number);give_ammo(mons, level_number, item_race);give_armour(mons, 1 + level_number / 2);