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 map
if (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 way
canned_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 ) );