git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@9718 c06c8d41-db1a-0410-9941-cceddc491573
GDISJTTXFDQYMOFLUHIDCYWMU7O2SGXN2YQ3VRUIHU5YE3SUVJ7AC G2JEGJW7XN55HXKF4FRD6BJGXTGNMZFQHKHESXJOZFQMPW36UQGQC FWWAYEWZS32VGKS6KE5ZIVSGTSBGYNNUHVE4GFRAKAHS2WUF3K6QC DHI4FAUHYA3V7I2LKBE74AA672FVDUE2LBOZHTTL3EAE4YJP2ICAC RVHFMZ4CW4IIEDTYE2HFWIRNNNCUWX5N7ZYLZTODDR3N3J64WZ4AC XKDPUWDOAFP4ZVWY6AOYPX3TJLTFBNZWRYSPIMEJHFX577WAJGMAC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC UPPUAHXHWKGQWDKOCVLR7RG3SHEUVKOUC5GRYCEUDGD6RNCOU5LAC ND3T5LCZATC63EVQ6SLI7XXMSUL7XICJDNLH3UCYUDEFWTA3N5MQC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC SHFSQYLN7WPQC35V3XYYEIZ4CQMREASUNR474CIKFG3C2FYI4SHQC OXHOOJE4XEQKGI3JKURNSITG6CRQFAOFQ2EKKG6M5DCLN7LS4GUAC G6WNKWA4GNUGNOH63AKXJQMQS2V4FGJ55CB4P2Z3MPSX3UPMVF6AC FIYBXLWALQINNQTHG2KNDUUTAQAZRDDLXW2XOVSKDKBADJ3XCJ4AC KT3JMGSH5VTNRV2H5POWZLYNXSIRE5CT2XW3ZID7FNZTXYOZG22QC FU7EQZLXD7YNGUUDHXCBI3VUKL6M2G3EPDY6FB5UA6B6RD4S5UOQC I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC GOX2FK35IXLRJJJYT6QHL2GTFUWN6IJ6P7GIWKSP2LDOGTWA7XEQC CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC BDFIS53HAIHOCXQ5BE7WCO2MEOFCUQPFY4JGUWVLWY6JO3IFMEKQC N6J4ANT3WFBQYTFDPZFVF2PWS2S7CK4GHHX4UV3JW4VWAKETZR5AC UTKZUB7Z3YPIZMMGF5DUOKNZX3GWY46A4GUHX5GA2GMQCT2EWXSQC XJBNF2N35THJC2KYGCMPLC3CDCJP25CEDKHUI3P55V6H5YWXBUKAC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC HODV46TCH5AGI42Z5JKVDX4VCRVQCNREJUL6W3TUJK6S77SXQNLQC 3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC 3KAINFIXO7WNWGUGZB43EUNFRS2ZPBLQZDTY456QACMRHYIJ7WDAC PHBACPMH3F34GODHVDKNCMXWU373RJQGVTDLBFCCDLLWDXVYOLTAC WIGDOFMKXC3UZWMQCZ4235LPYRXPEJBCHQ2LQEPLVPXQNA33I33AC TONFKA6OUHKQVVN7LP6QR4LHODWBCZQ6V42ITUO6EI4SW642A7PAC 7P5WSNAGXFBICVTPQO6EHXMJ7O2HAYOIGVRS37EPA5GDQY7KUMIQC K3WXOHMGLLPL4CHGWRK227FWKCMBA7KHLJXLY6DTKEC5LKFJI62QC KBH6DZPJCNMT3OMEMHKLASTWQZ24FIVNVANBCVI3SEVAMMPSWRWQC 4LNIHTHZTCOEZEHZ4GW6WCZH4UCDWKK5UVUKEDODEBBS4YH2KONQC GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC XGAEDOORDNSVEDQ577A7QNKMYJJ2BZXFL6JITM7RAVRIDHHBRJXAC XGPPA2X3G3266EVSTXGQ7ZWYOCJ32FEYPEUJV55AI5TGFYHTYTQQC 6ECDSRJ6V3FSIAQC6FZK5SV4NGXXR6PW5S4KADSPISPP36CXLTYQC YZXHBEKWQPY4BTKG5FFGLP3AIRBQSTKQVLJJHWKQEA3HTN4UHDYQC OYATP4N2G5QIC45GJOWL552ASS4FAOMJ3JUCWAXNKSUPOVVBMDOQC OBWENTR55T5IGFMLKDJUJ6QEL3R6TGPBY7DF36YAWU2W6UHZ5TZAC SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC KNCEMOC5TMWHTKCWF7CMYNHLGCXOLGMTXLEIHMEFBGM5FR26GRXAC FEKRY3DYIDLWVBLAZN7W2WFNEKZPCAHABXOSM6K5RLTH5WY2NODQC MDAJYB6STTZPNHRQ2X66MMMSONMKXTESLHJSFPGN7H3D3TOVBAVAC S4PO7XGBGKFJBC5RDKB76KSSKPS3TACH7K3SN2VGBGDLVUIMOOSQC 7U7IZUR2C7UALYI4Y3SHBYGTHYVQM6JI4PXDFXUFL3T3L6JBSC6AC NS3KXJXQSN33UQSOBDK3WXXKA3KY5YOUJL67NBZKGQAJYDYZ2COQC int pract = 0; // By how much Evocations is practised.bool did_work = false; // Used for default "nothing happens" message.
mpr("You open the flask...");const int monster =create_monster(mgen_data(MONS_EFREET,friendly ? BEH_FRIENDLY : BEH_HOSTILE,0, 0, you.pos(),MHITYOU, MG_FORCE_BEH));
const int wield = you.equip[EQ_WEAPON];
if (monster != -1){mpr("...and a huge efreet comes out.");if (player_angers_monster(&menv[monster]))friendly = false;if (silenced(you.pos())){mpr(friendly ? "It nods graciously at you.": "It snaps in your direction!", MSGCH_TALK_VISUAL);}else{mpr(friendly ? "\"Thank you for releasing me!\"": "It howls insanely!", MSGCH_TALK);}}elsecanned_msg(MSG_NOTHING_HAPPENS);dec_inv_item_quantity(you.equip[EQ_WEAPON], 1);
mpr("You aren't wielding anything!");crawl_state.zero_turns_taken();return (false);
slot = prompt_invent_item( "Evoke which item? (* to show all)",MT_INVLIST,OSEL_EVOKABLE, true, true, true, 0, -1,NULL, OPER_EVOKE );if (prompt_failed(slot))return (false);
item_def& wpn = *you.weapon();bool unevokable = false;
const bool wielded = (you.equip[EQ_WEAPON] == slot);item_def& item = you.inv[slot];// Also handles messages.if (!item_is_evokable(item, false, true))return (false);
set_ident_type( OBJ_STAVES, wpn.sub_type, ID_KNOWN_TYPE );set_ident_flags( wpn, ISFLAG_KNOW_TYPE );
set_ident_type( OBJ_STAVES, item.sub_type, ID_KNOWN_TYPE );set_ident_flags( item, ISFLAG_KNOW_TYPE );
} // end evoke_wielded()static bool _efreet_flask(){bool friendly = x_chance_in_y(10 + you.skills[SK_EVOCATIONS] / 3, 20);mpr("You open the flask...");const int monster =create_monster(mgen_data(MONS_EFREET,friendly ? BEH_FRIENDLY : BEH_HOSTILE,0, 0, you.pos(),MHITYOU, MG_FORCE_BEH));if (monster != -1){mpr("...and a huge efreet comes out.");if (player_angers_monster(&menv[monster]))friendly = false;if (silenced(you.pos())){mpr(friendly ? "It nods graciously at you.": "It snaps in your direction!", MSGCH_TALK_VISUAL);}else{mpr(friendly ? "\"Thank you for releasing me!\"": "It howls insanely!", MSGCH_TALK);}}elsecanned_msg(MSG_NOTHING_HAPPENS);dec_inv_item_quantity(you.equip[EQ_WEAPON], 1);return (true);
bool item_is_evokable(const item_def &item, bool known, bool msg){const bool wielded = (you.equip[EQ_WEAPON] == item.link);switch (item.base_type){case OBJ_WANDS:if (item.plus2 == ZAPCOUNT_EMPTY){if (msg)mpr("This wand has no charges.");return (false);}return (true);case OBJ_WEAPONS:if (!wielded && !msg)return (false);if (get_weapon_brand(item) == SPWPN_REACHING&& item_type_known(item)){if (!wielded){if (msg)mpr("That item can only be evoked when wielded.");return (false);}return (true);}if (is_fixed_artefact(item)){switch (item.special){case SPWPN_SCEPTRE_OF_ASMODEUS:case SPWPN_STAFF_OF_WUCAD_MU:case SPWPN_STAFF_OF_DISPATER:case SPWPN_STAFF_OF_OLGREB:if (!wielded){if (msg)mpr("That item can only be evoked when wielded.");return (false);}return (true);default:return (false);}}if (msg)mpr("That item cannot be evoked!");return (false);case OBJ_STAVES:if (item_is_rod(item)|| !known && !item_type_known(item)|| item.sub_type == STAFF_CHANNELING&& item_type_known(item)){if (!wielded){if (msg)mpr("That item can only be evoked when wielded.");return (false);}return (true);}if (msg)mpr("That item cannot be evoked!");return (false);case OBJ_MISCELLANY:if (is_deck(item)){if (!wielded){if (msg)mpr("That item can only be evoked when wielded.");return (false);}return (true);}if (item.sub_type != MISC_LANTERN_OF_SHADOWS&& item.sub_type != MISC_EMPTY_EBONY_CASKET){return (true);}// else fall throughdefault:if (msg)mpr("That item cannot be evoked!");return (false);}}