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);