empty wands with unknown charges should cost a turn.
Experimentally add a "Really fire through friendly creature?" prompt when a beam tracer passes through a friend. This currently uses the existing monster tracer and probably has huge problems because of this. In any case, it appears to only work sometimes, though consistently for wands in my testing, possibly because the range is fixed (?) when compared to spells. (This is part of FR 1962548.)
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@5171 c06c8d41-db1a-0410-9941-cceddc491573
ZGUJWUFJ4NFFJ6PGXLFGQWCWBCZHPWGWI44NJHJEVPRG5L36PADQC YXNQKP2F4I3PCURJS7RD7SVOWMNPPW3LKMVRRBHHGILWSRKGCKDQC WA2OSEGWVCESURYWNERNYWQKHE6SU4XQ4Q4HJY5B6ZPGNFUKQEEQC PTTMNNTIGICZAIGUYMYVUJ5CRBIDVTY5BQCMJAY3OBDDGH3N6M2QC QDYSUC5PAW44LDO2AAA4QNZNB6RW5EWRAXBSYATFKLYJXNLQZWZQC KIJYTJG2XG7T4HEVZTCL2T4XDSMVLXDJMYYRRK6GY5PY7CGJLJTAC 3UYAIGVJBYPSAUTDRTQXRXNFGKKSCYGIFZ3YRZJGPDKJEMOTQOUQC VQQXYUAZJRLUS5GKD7IJYHQ2GQAK5BERZEARGWITESISTR7YVCXAC AS44S4DVL3XJD5P6PQXTBWF5XZSXQJTRBWLAVIKGFMBX4ZRL2UTAC FQDZEDPB7ATGGA5QFFGOLGTPGNY6LMU7KQU7RMTRY2RUOQSCGQ2AC W3HLXYSWQCDQQIBXBQ47IDMN2HFS3ACTVR55EV5DBUKPHIAPAGOAC 5MLLDZAW2AG6TGTU6EZJX4N57STAL3IOVO5DJK2XLSFADBUAD23AC QWZR7TCGSJAKK755AVEKFIMF5CX5GQLQC46TLI6URKZO2NJ3O26AC 2C6B6QRTOK2ZMK2ZOF3EPSFUZTKG5B3IZXWBWIUYC4ZOVGQ2OV2QC P5ID2SF6YHSZ75EEU4CQ25HCZ74CWU2JQ2FH536KZEKD4DO3M3FQC 627CM2ZOKVBMPVPBYGWBWWPT2FBMVRRH2VDGPT6Z5XCVJ5R4YQWQC CHO4U5JC3RNTLXVIDXXJYZMOBZJ4VXW2GVJWDOTBRKK3AJ36LDLQC 4ZAYR6K7SNJ45QYS5KLZOJ2T7OKYL4M2RY5UIIMOWRQGZLTME6UQC M4DJQJHLPTFQNOI6S5TDLCTGNQK5SW7H5PTG5M7YWHRGWZGJ72QQC 5BPJZOGZ6VTUNTJXBTP22KIPGT5NNNSXZVW5J2BGQYBP4MTCZ3CQC NQMXQ6OQVUSC7Y7F7IL252QW4A5JED224EECNHWAM4ZZYVNY745AC K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC WG6O475IOLZFMUQSLVR2KHM7XTBF5HH276L2KDGF7UOSESDOAILQC JCWJWGMQIKQGSSFJUQRKNIWW3HBOJSHYDTOPPE5BWOJTIJTDYUTAC MIMVAKQXKJMHYLKXKY2TJEBL4HCOHKLDQYX6J5H4MWCI442NWEHAC 3WAR2UAC4C4D2GOK4AUV4JITGFSBO3NIBAXGQZXSMFUTNTCLTU4AC 2U47I7M3TKXUM3KHMO3UH7KGMRKOGHJQFVYPC4CTAWBV22T2HTEQC DDU4A3JGN5IUIPP5IASOODKPR2WBHSDSV4FITZ6HNXNSXXQACWAQC YCL3W2PFE6ILTGBFODCSXNPDIA46KVSZP2TI7HDMYAOEJT65RIEAC 2UUCC7V3WQ5KBHJS4MTKZ5OIELYJHSTUVRPYGPWIQ5JS6D7YIK4AC OAQEGSRMAOE4UHILW4LSDKERKTPOJPGPJQ3R2FB5QFWFB764UGHQC JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC CGYTZT5QWIEGYKUOLOK7MFXSLJKLYRZONER5ZCDZO5XYWSLG475QC UHOAWBSBZBPHWMNXZCVB4SBJM4DTZAG3YRNNJNIKJN4CE2DP27JQC MDAJYB6STTZPNHRQ2X66MMMSONMKXTESLHJSFPGN7H3D3TOVBAVAC OQ4KB7QCJSK7GSW3DYBARH4DCB75HFKLUSOSOZZZ4IUFKNGFRUDQC CFMZHVC5HEHL2GCHYFUMAEZUUQBM5UB4VOZOTDGUOWFV3NWAU3HAC TH2RUX3XQ5I43J4ASC4C3KHFCBUOYQ4EUBMXPQV4JCJGPTZZAYAAC UCM6RM43UZHOSRI75MQQZPBTLQIV63N4KQ4V7N54ZZGQ7LCR6YGQC DK362IHKSDADMUPD35NOTKM4WESQM37KG2PNOJRV2FGELDWULYPQC NVSFIV2ZKP44XHCSCXG6OZVGL67OIFINC34J2EMKTA4KULCERUEAC TVC7W7C2XKBQSD2IJFMWFVGXZAOD4EUOW43NAQTOF5KFMAUOJABQC NFOXLH722RGWYY5D63VV6SF2XEJBEOQEFQME6FSA4HZRK3CPLSRQC UIRWVLX5LDNWURTZOG7EFLXE5OOEL4XBPSLSUHUQSKHC4A7WCVLQC X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC WT66JDIRTLLP37SHTV4GI3V64JFJ4D25LNRLGCHFG6CLEFKJ3QGQC VYDMJSFXD2E2CWOJEFFVLRBLHDFINBSVL2X6YE6456IQIRGVZIYQC 4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC ASH5CK6CPBKMLGGIRJ5GKTWMS5W3OBVHTL66RTYZIPFM6KFBYA3QC OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC OSGS3PH2L5CBTDVZCZS6OCFQNA4A7RMEXBYJQB7DDZBYYJW7QSSAC AKDVUYRVYFPCV23KOSWGC3VQ52UK5AH2KZONXTPL57I66V4CRFFAC GGEB64C3QQ5PPS7GOFXULDUCRT2NZL2PMIE5UDDUJTUTLLPTDU7QC OFTOEJSRSA2EZOAQOJCWWQNDX7IVVAR565JK3DZCBG54TBHHCIDQC R3ZUGT5VJ2DG5NFPG4RBWDWTULDE7L4REYSGVPHJPDXFG6OBIXYAC NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC LOEVXFCKSHE3TCQSUSHOIHHVDJT3RFLE6U3VDI6JXAQTQI5KCJ4AC 25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC 77H4BWWPPGLM3PLZH4QTAJRXIZTSDVNCOKZE223I437FN2UJ34RQC LBIXGRQC64MEHG7L74PCGU3EXD3WVUCDR7DHEHCI5OCOJAXSA7PQC TS7AQYZVJ5KEACP4MZPD6CTASY27O75U6KL3BYXYDEQZXFGQIJSQC BJPPSWEN35BG4KP3XTXPDMAJ2GAUMHXKHCNALAZ4B4OS6B3KDSUQC KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC P33QUZKDQZ2XKFPFI4HP5A7KG76PTBFGB3ZSGMBN3X6JYOOMYLLQC 4PBRMB7TK2TXL7VSDKMUQMT4QFK3SGRU4TUVMEM7V2VS7KKKILAQC I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC UN4CXQWERF622PXUR3ZM4CJWR6R7OOFVELMY22WLVVT7RD3G2XYAC 5P6MEKBISK6NI4MULM75HHFBQW5MXITSZJDGLLIDKJ7G24F7XYNAC C22455VGUQOSUX2OORA32LROFQ7NNYDMD2ZDTTUZSAQLXK4AD6QAC ED62QWGKBPORWVKDFOQRKJXEIWZVNGR3O4KWQBDSRNPT36AYOQYAC KCHX2F3JFEWOZT3WMJVZAAQUU2QSZ5Q7RDCD7WUJ7VE65J52JFUQC 3XZOL3FFQZITUJIGDD6B6V6ZYMBN524JKNN6ZPJAXEC7RY433I3QC 6QWZDCP5HGYLTJO3WWYJJGRRT7QFY6IG64TC7TUB553Z7GAA2HIQC GPEJOT73KMACP33IPAKFR5ROGHCOIP22VXZMQNYTGLEA2OSZUM2AC JNB3PBPBJHDUHH47ZICB25QENPTMLYK7CXC5BXRVWZ3J3ZZPKCUAC GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC 5K2ANIEXD3CPJM4XNKNPZINP2G4NT7SJBKRN62WNBUKJXFERTILQC YZXHBEKWQPY4BTKG5FFGLP3AIRBQSTKQVLJJHWKQEA3HTN4UHDYQC PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC MZXKH5NHXRMX5Y5FG4XXNHZQ7HTQZFX3ARQU55DO4RM5NR3GIAIQC WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC 5HJJGIOOIIQNCRIL33ZQAY6S57MPTSTG27UETJW3HE3BUUPUKPQAC ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC SLDR32H45VDN74AVZ2JDPLNK7AZWXDS2YRTLMGK7E3FYW6OWOFJAC OTADS6FRT25MVJ3NVA2XBFFX22JS6C6F3IAJBG3OAHYFYTLMYUIAC 7VVRO5HMNNOXVRLBLJUCHUJP6MDIRMC2BWCO7MWH4OLQRM3LMTMQC LOJYD6QZRNLNDDZJKVBMKQIBPTKSRN2ETCYGNVV47M7L3QLUJUJAC 5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC EFWEYIB2R3DPD3JWIPU6LS6SFLPMYN7J7X4GBZR7DJWKHJ3UELSAC UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC NRMSQFTORG3GC7HQBIN5DHB5GLWXM6IQO6PTXD4C7LBQWJIHYIGAC if (env.cgrid[monster->x][monster->y] != EMPTY_CLOUD&& !monster->has_ench(ENCH_SUBMERGED)){_mons_in_cloud( monster );}
_mons_in_cloud( monster );
// bounds check: don't let confused monsters try to run// off the mapif (monster->x + mmov_x < 0|| monster->x + mmov_x >= GXM){
// Bounds check: don't let confused monsters try to run// off the map.if (monster->x + mmov_x < 0 || monster->x + mmov_x >= GXM)
if (coinflip()?_handle_special_ability(monster, beem)|| _handle_monster_spell(monster, beem): _handle_monster_spell(monster, beem)|| _handle_special_ability(monster, beem))
if (coinflip() ? _handle_special_ability(monster, beem)|| _handle_monster_spell(monster, beem): _handle_monster_spell(monster, beem)|| _handle_special_ability(monster, beem))
// the higher this number, the more monsters// will _avoid_ collateral damage to their friends.// setting this to zero will in fact have all// monsters ignore their friends when considering// collateral damage.
// The higher this number, the more monsters will _avoid_// collateral damage to their friends.// Setting this to zero will in fact have all monsters ignore// their friends when considering collateral damage.
// it's an empty wand, inscribe it that waycanned_msg(MSG_NOTHING_HAPPENS);wand.plus2 = ZAPCOUNT_EMPTY;you.turn_is_over = true;return;
if (wand.plus2 == ZAPCOUNT_EMPTY){mpr("This wand has no charges.");return;}has_charges = false;
if ((beam.obvious_effect || type_zapped == ZAP_FIREBALL) &&!alreadyknown)
if (!alreadyknown && (beam.obvious_effect || type_zapped == ZAP_FIREBALL))
if (pbolt.thrower == KILL_YOU_MISSILE){pbolt.is_tracer = true;// XXX: rangeMax needs to be set appropriately for the tracer!pbolt.attitude = ATT_FRIENDLY;pbolt.source_x = you.x_pos;pbolt.source_y = you.y_pos;fire_beam(pbolt);if (pbolt.fr_count > 0 && !yesno("Really fire through this friendly ""creature?", true, 'n')){canned_msg(MSG_OK);you.turn_is_over = false;return (false);}pbolt.is_tracer = false;}
if ((rune_was_near == INFINITE_DISTANCE&& rune_is_near < INFINITE_DISTANCE&& you.attribute[ATTR_ABYSSAL_RUNES] == 0)|| (exit_was_near == INFINITE_DISTANCE &&exit_is_near < INFINITE_DISTANCE))
if (rune_was_near == INFINITE_DISTANCE&& rune_is_near < INFINITE_DISTANCE&& you.attribute[ATTR_ABYSSAL_RUNES] == 0|| exit_was_near == INFINITE_DISTANCE&& exit_is_near < INFINITE_DISTANCE)
one_chance_in(5 + you.skills[SK_INVOCATIONS] / 4)?BEH_HOSTILE : BEH_NEUTRAL;const int mid =create_monster( mgen_data( mons, beh, 5, p ) );
one_chance_in(5 + you.skills[SK_INVOCATIONS] / 4) ? BEH_HOSTILE: BEH_NEUTRAL;const int mid = create_monster( mgen_data( mons, beh, 5, p ) );