git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2727 c06c8d41-db1a-0410-9941-cceddc491573
YX2LDGNQNB6AQRKAVXNYQ473X6EVPQEBT5AJKBIIWFIMS3U2BNQQC NVK2OISSU4XF2CGSK2BAWZE2OPCLTXYHNSE6UDJ5M54EHY2I7BLAC NLQNXH3SVJ52CWXEV35FSSZP32VHC4QFGN3HINF4KO5GZHZMOBKQC L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC 5V47S4NNTHWTSAHV3YLO2VGH7JTUIYJ3GBPDN5ZM4UQALT2ZEXDQC Q5SFQO7ANODRI6OXKHPFQ4QWKGQ367S64DPURQW2TWK7ANTYO4NQC UKSYWIOMOVYPUG6FXRWC7FCAWKHRNSHZKUU5GDP5XPEUJVEJE5IAC 2RSY5J2ED2GM5R564UF5NEPDAEJDGLJJ6U3YO6UBQOX4KSLGNY7QC RSIUBEQUGNU4LO6KH4PKVROWQS33DAKSY4XFVGN7T3CEKSXABCSAC YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC E5DMZFW6WCFAKTKKOQPYTQXZ2CGLWMVH64LRXDUI2UIG4VYUHIVQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC const int armour_plus = item.plus;ASSERT(abs(armour_plus) < 20);if (abs(armour_plus) < 20)ac += armour_plus;
const int armour_plus = item.plus;ASSERT(abs(armour_plus) < 20);if (abs(armour_plus) < 20)ac += armour_plus;}// Shields can affect evasion.
// XXX: Monsters can only equip body armour (as of 0.3).if (get_armour_slot(item) != EQ_BODY_ARMOUR)
const equipment_type eq = get_armour_slot(item);// XXX: Monsters can only equip body armour and shields (as of 0.4).// They can still be forced to wear stuff - this is needed for bardings.if (!force && eq != EQ_BODY_ARMOUR && eq != EQ_SHIELD)
}}static mon_inv_type equip_slot_to_mslot(equipment_type eq){switch (eq){case EQ_WEAPON: return MSLOT_WEAPON;case EQ_BODY_ARMOUR: return MSLOT_ARMOUR;default: return (NUM_MONSTER_SLOTS);
(temp_rand > 59) ? WPN_SHORT_SWORD : // 20%(temp_rand > 45) ? WPN_SCIMITAR : // 14%(temp_rand > 31) ? WPN_MACE : // 14%(temp_rand > 18) ? WPN_BOW : // 13%(temp_rand > 5) ? WPN_HAND_CROSSBOW // 13%: WPN_LONGBOW); // 6%
(temp_rand > 59) ? WPN_SHORT_SWORD : // 20%(temp_rand > 45) ? WPN_SCIMITAR : // 14%(temp_rand > 31) ? WPN_MACE : // 14%(temp_rand > 18) ? WPN_BOW : // 13%(temp_rand > 5) ? WPN_HAND_CROSSBOW // 13%: WPN_LONGBOW); // 6%
static bool make_item_for_monster(monsters *mons,object_class_type base,int subtype,int level,item_make_species_type race = MAKE_ITEM_NO_RACE,int allow_uniques = 0){const int bp = get_item_slot();if (bp == NON_ITEM)return (false);const int thing_created =items( allow_uniques, base, subtype, true, level, race );if (thing_created == NON_ITEM)return (false);give_monster_item(mons, thing_created);return (true);}void give_shield(monsters *mon, int level){switch (mon->type){case MONS_DAEVA:make_item_for_monster(mon, OBJ_ARMOUR, ARM_LARGE_SHIELD,level * 2 + 1, MAKE_ITEM_RANDOM_RACE, 1);break;case MONS_DEEP_ELF_SOLDIER:case MONS_DEEP_ELF_FIGHTER:if (one_chance_in(5))make_item_for_monster(mon, OBJ_ARMOUR, ARM_BUCKLER,level, MAKE_ITEM_ELVEN);break;case MONS_NAGA_WARRIOR:case MONS_VAULT_GUARD:if (one_chance_in(3))make_item_for_monster(mon, OBJ_ARMOUR,one_chance_in(3)? ARM_LARGE_SHIELD: ARM_SHIELD,level, MAKE_ITEM_NO_RACE);break;case MONS_DRACONIAN_KNIGHT:if (coinflip())make_item_for_monster(mon, OBJ_ARMOUR,coinflip()? ARM_LARGE_SHIELD : ARM_SHIELD,level, MAKE_ITEM_NO_RACE);break;case MONS_DEEP_ELF_KNIGHT:if (coinflip())make_item_for_monster(mon, OBJ_ARMOUR, ARM_BUCKLER,level, MAKE_ITEM_ELVEN);break;case MONS_NORRIS:make_item_for_monster(mon, OBJ_ARMOUR, ARM_BUCKLER,level * 2 + 1, MAKE_ITEM_RANDOM_RACE, 1);break;case MONS_NORBERT:case MONS_LOUISE:make_item_for_monster(mon, OBJ_ARMOUR, ARM_LARGE_SHIELD,level * 2 + 1, MAKE_ITEM_RANDOM_RACE, 1);break;case MONS_DONALD:make_item_for_monster(mon, OBJ_ARMOUR, ARM_SHIELD,level * 2 + 1, MAKE_ITEM_RANDOM_RACE, 1);break;}}
// This actually does more than calculate damage - it also sets up// messages, etc.player_calc_hit_damage();
if (shield_blocked)damage_done = 0;else{// This actually does more than calculate damage - it also sets up// messages, etc.player_calc_hit_damage();}
}// The monster may block the beam.if (!engulfs && beam_is_blockable(beam)){const int shield_block = mon->shield_bonus();if (shield_block > 0){const int hit = random2( beam.hit * 130 / 100+ mon->shield_block_penalty() );if (hit < shield_block && mons_near(mon)&& player_monster_visible(mon)){mprf("%s blocks the %s.",mon->name(DESC_CAP_THE).c_str(),beam.name.c_str());mon->shield_block_succeeded();return (BEAM_STOP);}}