better. This will only happen if the armour will fit the monster (correct size) and if the new armour has a better AC, or both items have the same AC but the new armour has a higher value (uses shopping values). Matching racial type (orcish for orcs, elven for elves) doubles an item's value, so between two plain +0 ring mails, one orcish one not, an orc will always prefer the former.
Friendly monsters now may pick up items dropped by other friendlies. This means that they can re-collect their own thrown missiles, and that they can upgrade from stuff dropped by their fallen comrades. Hey, that's monster AI in action! :) They still won't pick up stuff randomly lying around, and neutrals or enslaved monsters never will pick up anything. And of course, friendly jellies (should that be possible) won't ever devour items.
Cleanup of mstuff2.cc, and reduce chances for Beogh orcs' chattiness (again).
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4632 c06c8d41-db1a-0410-9941-cceddc491573
Y2NYY7HWFZ2LQDK3ACSLGS37F2J2IJ5LRGCIMZYXLEOSVPD3A4DAC LLTZGFJBS2CSAYJKP24Q5PGMUXT2X65G6SJXNP7XUHUIDDZT25VAC E6NTYF4PVIESKDOXXSDV6DFBAGOLBHE66HAJIGG76ZWPNHURKIIAC YTD7HEJR2V4IGCOSMV6VX7SF4CZLYGPG7QXSDWWLV5N3BPOD6SXAC LLZHW4VOAUL4WFQHJP4SJGIGHEOI6FDRDI5FUN66NTWIHCX4FQRQC 2ILR4SBFXZDMIOMZ6RPUR5I4OKON2QHBSO23TDD5KI77NTOI4OWQC TTCA2KKE56DAAKEVUGAP7ZRNF5KDLOWRVO37E3D6KDNMLDBVL7MAC 5OEVFYM62MOO5TE2HLSKC53QE65NF47R3TLYEPHE7O46FN2P6N5QC LDEDXOOK67NHP44PDRL2TAS47SOTYIIWSNXAFIPTWA72GGBDIHSAC PMCHUVWMCDXOWGXB4SWMBXFGHJYZG7KZ34SE33HFUGHPQYP3LYEAC 7GJR755MBM55KIOP3DGSZIIAEQ5E2PRBHLEXZOU2ZMXHHZ5JI3GQC 36DYXIWAQTBOCZBCUPYWDKAXVWDU3TRMSM3OCQZGGMWE2KPERJMAC QVVC7AYGVA6U64PTNA7L27422NLMO327P22BQKXEVIMPZHIHO7MQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC 3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC VQZEJTCSRZ5RVLCCKUCIS3IVZPFYRC26I74X4WIJAPEY7NYID2UQC DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC LFRMK2FWZEWOABNM3T36YKBSUTNUA6DDTSBEFEMHM5KOFJBL5M7QC FA2V3G4NYTWJWUT7EWH75L3YOUX6YVOZ5LNRSFLO2XF273JKSUTAC W74555HMPXUQ72AGKBXC5P3STMMX5DZAW6ZESUDLNVJBCAG43PLAC UZ5623MOLKBTGBSRBJ4OBOEI4IEZSPV3NCV2DRMUZ3CHHJQVHIIAC 5V47S4NNTHWTSAHV3YLO2VGH7JTUIYJ3GBPDN5ZM4UQALT2ZEXDQC OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC D4A2TDSEJ7H6NYORPBZYLAWXUM55MIDMKQR67ODNZM334KWCUAAQC PR42BCP5BPRFD2MP5H6CIJP7E57Q6TKL6SOXZWFKMFVR2OZWHT7AC WBAFNYODKTL3YSG3UOJITBJSTFYGJLIWKRNK6NMGIIP5TPC2BDGQC TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC NW74NALMBEWIKEOBIXA65RQULHS6M4GZ4S5IWDMEGWUAAAY7CQNQC UW4XQAAAV3S2ZVBLMSK6VQG6AMYR6DRKXFP64HHBC6Z3QIUWPVXQC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC 6GT5JAWOIIL4SQ5MWIID6ZVO3KKQFWDQDZNVFHZ6DNK5QCBXJ4UAC FCZSQBKDNMJZRJS2LWQQWLUFGOXSKXDJZQIHC7L5S7HXCXQPOMMAC FBKPAWAUTA2CEAKFYJ7O3B3LU7N4JOVZBGEDFUUCCRXT5N7PJ22AC RISMOCQM6BKK4XSIRKYLOBB2UPDYJNDAL6OGIIR5GGNZQAK5YSZAC Y46M2XO74VYDTBTFFUUCI275UGELTXUXS4GEIBBXCY5USQKJ5O6AC 7PRZJ6KZLG26YVTAMXT7YOTQLWZHGWGRTKXZZ52P4XYCQD4GT5WQC BUSA7O6EFBZVAG2RL5T7MD2WTWKOEKKIAAZ2VS4Y3L6ECT4HQR6QC 3CMMAOYW3XCVFBCT2RT6YH5BLVAWQT62QXXWWCMWIZKDFZBY4M2QC M6J5C74JDM5ZYIDPN7QXUCP6L44S2Z5XTRJMZBBRYOHA62IGYXKAC X7PZS2I6D2GCZVNUDZTSQ7WNI7MIFHVLRJ4FB7WRUHD6UZZEUGHAC OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC C5VA63WAQRWPENIMXRPUPZLZJMC77PL2B3A77HYFWDCZU5QDG7VQC C5U3HSOOQ7BKXKXIDS7MLVXUKDTHAWJ5NXNX6YDXTM3GWY5UWX4QC 7KWDC7XFNMBLSUO2HISIROBINZBX5T67LJEEXTAORXW2YZ7VWFGAC NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC DODCHP2S4I6VZKQAVXX6D76OPNFI2YWZ4XH3HZTMAJZXA2RJ3XRQC WKJIIZMCJLMWUIIXBVXBU2G4UJONM46JIEWK7U6XIPFZUOIFFBMAC PAAJWLYMSL5R2NS73EU5AMVTSGQKSK7AZ4P4DWEIVHYYFB3AWEQQC X4OCLD5YEXCYVQNMOQORLIO72AKUEMT3BT6FB3TW2HARKN5X7MEQC RKFHYYANUZQHOWOE6YHVFFJNCZU7X67FWUQPQFF6KJKMNIKXFWEAC DS2GZKISEP2DM2VU6EJ525Q7W3WVOKJXG5PY2OY4VNFCLBHVVOTAC CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC 4HATGRJJE7Q6LXHJ3ZGYTNBLG542KAUEK6ERKARIYRKRWY6VTDKQC EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC S7KC3IFKCUNBO3XO4TV3KEQEIDZWSRJSKXY65DPONKMG54VHU3UQC JDZCDMUCQ7VENYVLB62KQWUIRGABID37OKATOKCBUPCDL7W75NPAC 33ZMPQC6OXTESW7SRW765GRNJUEJRSYONRVZVIEUDAUEJ2PPMB4AC R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC PKHOZG6TIUP2NZZIP6CW5OIPZ3O6PCGWXXW5MH4I6P2WVM24HZEQC LC2XZTUD56PLARIGBTDXDPJIYJNMJU446GFDGLRIFD2I4F66L6TAC L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC QS3ZRS3E6KL3YJHPKYEWCWJYRBJSXD5OOYF6Y25HZVECGPJRDB5QC OWERGKLVPNPGIIS23FZ7ZDOBWUIXCKYAFG3URXU75JAUDX3N5ENAC NVK2OISSU4XF2CGSK2BAWZE2OPCLTXYHNSE6UDJ5M54EHY2I7BLAC YX2LDGNQNB6AQRKAVXNYQ473X6EVPQEBT5AJKBIIWFIMS3U2BNQQC 6MGA75GVQUUYGF64YT4BPPYY2ZE7SKL44H3H66LIFMRT2VAONT7QC ASH5CK6CPBKMLGGIRJ5GKTWMS5W3OBVHTL66RTYZIPFM6KFBYA3QC B5TFKLGGDYXUG26E2J3DVR4RD2XHPV5CNDDKFAIZ3YBNAWO7V6QQC 6BCD3B7SZ4T2VPOGO562767LMFCVMKBAUMF4PQ7T5XNKSXVY7F6QC XDPCRL76ZFW4BYFIMIRYQZIX2XJB5546KJB65VTHCPAGIARORBYQC G5WLU3B4MR3ZDJLGR6OHNIMLZXGQS2EWBJ5YYY5J2GWM6DTD44BAC BMHUBADDGIOZRVN4P3O5QKIDUYD4RFWBS7MP5X6LZWAYHUBRVD2QC O6ZMFKDI3XO2SWPNEYHIPYFDWJR4TVDP5BAATK6LVCVETQID6E7AC 5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC bool returning = (get_weapon_brand(mitm[hand_used]) == SPWPN_RETURNING ||get_ammo_brand(mitm[hand_used]) == SPMSL_RETURNING);
bool returning = (get_weapon_brand(mitm[hand_used]) == SPWPN_RETURNING|| get_ammo_brand(mitm[hand_used]) == SPMSL_RETURNING);
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);pbolt.colour = item.colour;pbolt.flavour = BEAM_MISSILE;pbolt.thrower = KILL_MON_MISSILE;
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);pbolt.colour = item.colour;pbolt.flavour = BEAM_MISSILE;pbolt.thrower = KILL_MON_MISSILE;
pbolt.name += "flame";pbolt.colour = RED;pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.name += "flame";pbolt.colour = RED;pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.name += "frost";pbolt.colour = WHITE;pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.name += "frost";pbolt.colour = WHITE;pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
if ( !really_returns )if (dec_mitm_item_quantity( hand_used, 1 ))monster->inv[returning ? MSLOT_WEAPON : MSLOT_MISSILE] = NON_ITEM;
else if (dec_mitm_item_quantity( hand_used, 1 ))monster->inv[returning ? MSLOT_WEAPON : MSLOT_MISSILE] = NON_ITEM;
bool destroyed = ((item->base_type == OBJ_MISSILES &&item->sub_type != MI_THROWING_NET) && coinflip());
bool destroyed = (item->base_type == OBJ_MISSILES&& item->sub_type != MI_THROWING_NET && coinflip());
beam.beam_source = monster_index(monster);beam.type = dchar_glyph(DCHAR_FIRED_BURST);beam.target_x = monster->x;beam.target_y = monster->y;beam.thrower = KILL_MON; // someone else's explosion
beam.beam_source = monster_index(monster);beam.type = dchar_glyph(DCHAR_FIRED_BURST);beam.target_x = monster->x;beam.target_y = monster->y;beam.thrower = KILL_MON; // someone else's explosion
beam.name = "explosion of spores";beam.colour = LIGHTGREY;beam.damage = dice_def( 3, 15 );
beam.name = "explosion of spores";beam.colour = LIGHTGREY;beam.damage = dice_def( 3, 15 );
beam.name = "blast of lightning";beam.colour = LIGHTCYAN;beam.damage = dice_def( 3, 20 );
beam.name = "blast of lightning";beam.colour = LIGHTCYAN;beam.damage = dice_def( 3, 20 );
beam.name = "****"; // initialize to some bogus values so we can catch problemsbeam.colour = 1000;beam.range = beam.rangeMax = 8;beam.hit = -1;beam.damage = dice_def( 1, 0 );beam.ench_power = -1;beam.type = 0;beam.flavour = BEAM_NONE;beam.thrower = KILL_MISC;beam.is_beam = false;
// Initialize to some bogus values so we can catch problems.beam.name = "****";beam.colour = 1000;beam.range = beam.rangeMax = 8;beam.hit = -1;beam.damage = dice_def( 1, 0 );beam.ench_power = -1;beam.type = 0;beam.flavour = BEAM_NONE;beam.thrower = KILL_MISC;beam.is_beam = false;
beam.colour = LIGHTMAGENTA; //inv_colour [throw_2];beam.name = "magic dart"; // inv_name [throw_2]);beam.range = 6;
beam.colour = LIGHTMAGENTA; // inv_colour [throw_2];beam.name = "magic dart"; // inv_name [throw_2]);beam.range = 6;
beam.damage = dice_def( 3, 4 + (power / 100) );beam.hit = AUTOMATIC_HIT;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE;beam.is_beam = false;
beam.damage = dice_def( 3, 4 + (power / 100) );beam.hit = AUTOMATIC_HIT;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE;beam.is_beam = false;
beam.hit = 25 + power / 40;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_FIRE;beam.is_beam = false;
beam.hit = 25 + power / 40;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_FIRE;beam.is_beam = false;
beam.hit = 25 + power / 40;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_COLD;beam.is_beam = false;
beam.hit = 25 + power / 40;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_COLD;beam.is_beam = false;
beam.type = 0;beam.flavour = BEAM_PARALYSIS;beam.thrower = KILL_MON_MISSILE;beam.is_beam = true;
beam.type = 0;beam.flavour = BEAM_PARALYSIS;beam.thrower = KILL_MON_MISSILE;beam.is_beam = true;
beam.type = 0;beam.flavour = BEAM_SLEEP;beam.thrower = KILL_MON_MISSILE;beam.is_beam = true;
beam.type = 0;beam.flavour = BEAM_SLEEP;beam.thrower = KILL_MON_MISSILE;beam.is_beam = true;
beam.damage = dice_def( 3, 6 + power / 13 );beam.colour = LIGHTGREEN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_POISON;beam.hit = 19 + power / 20;beam.is_beam = true;
beam.damage = dice_def( 3, 6 + power / 13 );beam.colour = LIGHTGREEN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_POISON;beam.hit = 19 + power / 20;beam.is_beam = true;
beam.name = "poison arrow";beam.damage = dice_def( 3, 7 + power / 12 );beam.colour = LIGHTGREEN;beam.type = dchar_glyph(DCHAR_FIRED_MISSILE);beam.thrower = KILL_MON;beam.flavour = BEAM_POISON_ARROW;beam.hit = 20 + power / 25;beam.range = beam.rangeMax = 8;
beam.name = "poison arrow";beam.damage = dice_def( 3, 7 + power / 12 );beam.colour = LIGHTGREEN;beam.type = dchar_glyph(DCHAR_FIRED_MISSILE);beam.thrower = KILL_MON;beam.flavour = BEAM_POISON_ARROW;beam.hit = 20 + power / 25;beam.range = beam.rangeMax = 8;
beam.damage = dice_def( 3, 8 + power / 11 );beam.colour = RED;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_LAVA;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 8 + power / 11 );beam.colour = RED;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_LAVA;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 8 + power / 11 );beam.colour = RED;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_FIRE;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 8 + power / 11 );beam.colour = RED;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_FIRE;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 8 + power / 11 );beam.colour = WHITE;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_ICE;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 8 + power / 11 );beam.colour = WHITE;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_ICE;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 8 + power / 11 );beam.colour = WHITE;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_COLD;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 8 + power / 11 );beam.colour = WHITE;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_COLD;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 2, 9 + power / 11 );beam.colour = WHITE;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_COLD;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 2, 9 + power / 11 );beam.colour = WHITE;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_COLD;beam.hit = 17 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 1, 8 + (power / 20) );beam.colour = LIGHTCYAN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_ELECTRICITY;beam.hit = 17 + power / 20;beam.is_beam = true;
beam.damage = dice_def( 1, 8 + (power / 20) );beam.colour = LIGHTCYAN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_ELECTRICITY;beam.hit = 17 + power / 20;beam.is_beam = true;
beam.damage = dice_def( 3, 10 + power / 17 );beam.colour = LIGHTCYAN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_ELECTRICITY;beam.hit = 16 + power / 40;beam.is_beam = true;
beam.damage = dice_def( 3, 10 + power / 17 );beam.colour = LIGHTCYAN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_ELECTRICITY;beam.hit = 16 + power / 40;beam.is_beam = true;
beam.damage = dice_def( 3, 7 + power / 10 );beam.hit = 40;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_FIRE; // why not BEAM_FIRE? {dlb}beam.is_beam = false;
beam.damage = dice_def( 3, 7 + power / 10 );beam.hit = 40;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_FIRE; // why not BEAM_FIRE? {dlb}beam.is_beam = false;
beam.type = 0;beam.flavour = BEAM_HEALING;beam.thrower = KILL_MON;beam.hit = 25 + (power / 5);beam.is_beam = true;
beam.type = 0;beam.flavour = BEAM_HEALING;beam.thrower = KILL_MON;beam.hit = 25 + (power / 5);beam.is_beam = true;
beam.type = 0;beam.flavour = BEAM_TELEPORT; // 6 is used by diggingbeam.thrower = KILL_MON;beam.is_beam = true;
beam.type = 0;beam.flavour = BEAM_TELEPORT; // 6 is used by diggingbeam.thrower = KILL_MON;beam.is_beam = true;
beam.type = 0;beam.flavour = BEAM_TELEPORT; // 6 is used by diggingbeam.thrower = KILL_MON;beam.is_beam = true;
beam.type = 0;beam.flavour = BEAM_TELEPORT; // 6 is used by diggingbeam.thrower = KILL_MON;beam.is_beam = true;
beam.damage = dice_def( 3, 16 + power / 10 );beam.colour = WHITE;beam.type = dchar_glyph(DCHAR_FIRED_MISSILE);beam.thrower = KILL_MON;beam.flavour = BEAM_MMISSILE;beam.hit = 22 + power / 20;beam.is_beam = false;
beam.damage = dice_def( 3, 16 + power / 10 );beam.colour = WHITE;beam.type = dchar_glyph(DCHAR_FIRED_MISSILE);beam.thrower = KILL_MON;beam.flavour = BEAM_MMISSILE;beam.hit = 22 + power / 20;beam.is_beam = false;
beam.damage = dice_def( 3, 6 + power / 13 );beam.colour = DARKGREY;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_NEG;beam.hit = 16 + power / 35;beam.is_beam = true;
beam.damage = dice_def( 3, 6 + power / 13 );beam.colour = DARKGREY;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_NEG;beam.hit = 16 + power / 35;beam.is_beam = true;
beam.damage = dice_def( 3, 7 + (power / 14) );beam.hit = 20 + (power / 20);beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE;beam.is_beam = false;
beam.damage = dice_def( 3, 7 + (power / 14) );beam.hit = 20 + (power / 20);beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE;beam.is_beam = false;
beam.damage = dice_def( 3, 7 + (power / 15) );beam.hit = 20 + power / 20;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_STEAM;beam.is_beam = false;
beam.damage = dice_def( 3, 7 + (power / 15) );beam.hit = 20 + power / 20;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_STEAM;beam.is_beam = false;
beam.name = "0";beam.range = 7;beam.rangeMax = 14;beam.type = 0;beam.flavour = BEAM_PAIN; // painbeam.thrower = KILL_MON;
beam.name = "0";beam.range = 7;beam.rangeMax = 14;beam.type = 0;beam.flavour = BEAM_PAIN; // painbeam.thrower = KILL_MON;
beam.damage = dice_def( 3, 3 + power / 50 );beam.hit = 18 + power / 15;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_FIRE;beam.is_beam = false;
beam.damage = dice_def( 3, 3 + power / 50 );beam.hit = 18 + power / 15;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_FIRE;beam.is_beam = false;
beam.damage = dice_def( 3, 3 + power / 25 );beam.colour = LIGHTGREEN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_POISON;beam.hit = 18 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 3 + power / 25 );beam.colour = LIGHTGREEN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_POISON;beam.hit = 18 + power / 25;beam.is_beam = true;
beam.damage = dice_def( 3, 20 );beam.hit = 15 + power / 30;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_NUKE; // a magical missile which destroys wallsbeam.is_beam = true;
beam.damage = dice_def( 3, 20 );beam.hit = 15 + power / 30;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_NUKE; // a magical missile which destroys wallsbeam.is_beam = true;
beam.damage = dice_def( 1, 6 + power / 25 );beam.hit = 60;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_POISON;beam.is_beam = false;
beam.damage = dice_def( 1, 6 + power / 25 );beam.hit = 60;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_POISON;beam.is_beam = false;
beam.damage = dice_def( 3, 8 + (power / 9) );beam.hit = 20 + (power / 25);beam.type = dchar_glyph(DCHAR_FIRED_MISSILE);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE; // similarly unresisted thingbeam.is_beam = false;
beam.damage = dice_def( 3, 8 + (power / 9) );beam.hit = 20 + (power / 25);beam.type = dchar_glyph(DCHAR_FIRED_MISSILE);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE; // similarly unresisted thingbeam.is_beam = false;
beam.damage = dice_def( 3, 5 + (power / 10) );beam.hit = 14 + power / 35;beam.type = dchar_glyph(DCHAR_FIRED_MISSILE);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE; // similarly unresisted thingbeam.is_beam = false;
beam.damage = dice_def( 3, 5 + (power / 10) );beam.hit = 14 + power / 35;beam.type = dchar_glyph(DCHAR_FIRED_MISSILE);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE; // similarly unresisted thingbeam.is_beam = false;
beam.damage = dice_def( 1, 4 + power / 10 );beam.hit = 16 + power / 20;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_POISON;beam.is_beam = false;
beam.damage = dice_def( 1, 4 + power / 10 );beam.hit = 16 + power / 20;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_POISON;beam.is_beam = false;
beam.name = "0";beam.range = 7;beam.rangeMax = 14;beam.type = 0;beam.flavour = BEAM_DISINTEGRATION;beam.thrower = KILL_MON;
beam.name = "0";beam.range = 7;beam.rangeMax = 14;beam.type = 0;beam.flavour = BEAM_DISINTEGRATION;beam.thrower = KILL_MON;
beam.damage = dice_def( 3, 2 + power / 25 );beam.colour = GREEN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_POISON;beam.hit = 14 + power / 30;beam.is_beam = true;
beam.damage = dice_def( 3, 2 + power / 25 );beam.colour = GREEN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_POISON;beam.hit = 14 + power / 30;beam.is_beam = true;
beam.name = "foul vapour";beam.damage = dice_def( 3, 5 + power / 24 );beam.colour = DARKGREY;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_MIASMA;beam.hit = 17 + power / 20;beam.is_beam = true;
beam.name = "foul vapour";beam.range = beam.rangeMax = 8;beam.damage = dice_def( 3, 5 + power / 24 );beam.colour = DARKGREY;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_MIASMA;beam.hit = 17 + power / 20;beam.is_beam = true;
beam.damage = dice_def( 3, 25 );beam.hit = 16 + power / 25;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE;beam.is_beam = false;
beam.damage = dice_def( 3, 25 );beam.hit = 16 + power / 25;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON_MISSILE;beam.flavour = BEAM_MMISSILE;beam.is_beam = false;
beam.name = "hellfire";beam.aux_source = "blast of hellfire";beam.colour = RED;beam.range = 4;beam.rangeMax = 13;beam.damage = dice_def( 3, 25 );beam.hit = 24;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_HELLFIRE;beam.is_beam = true;
beam.name = "hellfire";beam.aux_source = "blast of hellfire";beam.colour = RED;beam.range = 4;beam.rangeMax = 13;beam.damage = dice_def( 3, 25 );beam.hit = 24;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_HELLFIRE;beam.is_beam = true;
beam.damage = dice_def( 3, 20 + power / 20 );beam.colour = CYAN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_FRAG;beam.hit = 19 + power / 30;beam.is_beam = true;
beam.damage = dice_def( 3, 20 + power / 20 );beam.colour = CYAN;beam.type = dchar_glyph(DCHAR_FIRED_ZAP);beam.thrower = KILL_MON;beam.flavour = BEAM_FRAG;beam.hit = 19 + power / 30;beam.is_beam = true;
beam.name = "0";beam.type = 0;beam.flavour = BEAM_BLINK;beam.thrower = KILL_MON;beam.is_beam = true;
beam.name = "0";beam.type = 0;beam.flavour = BEAM_BLINK;beam.thrower = KILL_MON;beam.is_beam = true;
static int apply_radius_around_square(const coord_def &c, int radius,int (*fn)(const coord_def &, int, int, int),int pow, int par1, int par2)
static int _apply_radius_around_square( const coord_def &c, int radius,int (*fn)(const coord_def &, int, int, int),int pow, int par1, int par2)
apply_radius_around_square(caster->pos(), rad, monster_abjure_square,pow, test, wont_attack);
_apply_radius_around_square( caster->pos(), rad,_monster_abjure_square,pow, test, wont_attack);
bool death_message= !silent && mons_near(monster) && player_monster_visible(monster);bool in_transit = false;const bool hard_reset = testbits(monster->flags, MF_HARD_RESET);bool drop_items = !hard_reset;const bool gives_xp = !monster->has_ench(ENCH_ABJ);
const bool hard_reset = testbits(monster->flags, MF_HARD_RESET);const bool gives_xp = !monster->has_ench(ENCH_ABJ);bool death_message = !silent && mons_near(monster)&& player_monster_visible(monster);bool in_transit = false;bool drop_items = !hard_reset;
&& (beem.target_x == you.x_pos && beem.target_y == you.y_pos&& you.caught()))
&& ( beem.target_x == you.x_pos && beem.target_y == you.y_pos&& you.caught()|| mgrd[beem.target_x][beem.target_y] != NON_MONSTER&& mons_is_caught(&menv[mgrd[beem.target_x][beem.target_y]]) ))
// FIXME: Need monster body-size handling. For now, never attempt to// change armour.return (!mslot_item(MSLOT_ARMOUR));
// Returns whether this armour is the monster's size.return (check_armour_size(item, mons_size(this)));// For now, never attempt to change armour.// return (!mslot_item(MSLOT_ARMOUR));
// XXX: Very simplistic armour evaluation for the moment.// Because of the way wants_armour() is handled above, this armour exchange// currently only takes place if forced by wizard mode.
int newAC = item.armour_rating();// no armour yet -> get this oneif (!mslot_item(mslot) && newAC > 0)return pickup(item, mslot, near);// XXX: Very simplistic armour evaluation (AC comparison) for the moment.// This should take resistances into account.
if (!force && existing_armour->armour_rating() >= item.armour_rating())return (false);
if (!force){int oldAC = existing_armour->armour_rating();if (oldAC > newAC)return (false);if (oldAC == newAC){// compare item value (uses resistances and such)int oldval = item_value(*existing_armour);int newval = item_value(item);// vastly prefer matching racial typeif (_item_race_matches_monster(*existing_armour, this))oldval *= 2;if (_item_race_matches_monster(item, this))newval *= 2;if (oldval >= newval)return (false);}}
ISFLAG_BEEN_IN_INV = 0x20000000, // Item has been in inventoryISFLAG_SUMMONED = 0x40000000 // Item generated on a summon
ISFLAG_BEEN_IN_INV = 0x20000000, // Item has been in inventoryISFLAG_SUMMONED = 0x40000000, // Item generated on a summonISFLAG_DROPPED_BY_ALLY = 0x80000000 // Item was dropped by an ally