Comparisons for missiles are done with the actual item now, rather than beam.name, so this fixes (user specified) randart names containing "poisoned" being actually poisoning. I guess this would also allow printing the stats in the hiscores when killed by a thrown weapon.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@4360 c06c8d41-db1a-0410-9941-cceddc491573
PI5BATR2SER3RFE76IUGHM2AGXVFOUM3PLU7WC2K2Q2BA5K2E73QC
24UHFHJ4KS2OM7XQ2KXAPTNMQGWVBGCKKXWEOCHHTM23VQRYJTLAC
NPSD6NLNUAHTBSYG5SKUDMU6HFPR6I2AWE4QPNRXZCPVIEWLBRQAC
MIMVAKQXKJMHYLKXKY2TJEBL4HCOHKLDQYX6J5H4MWCI442NWEHAC
V4YSWQNZA226B5JRY6EYZOFICHA2KBIZXZGFPQS7KDDSSKVI4GEQC
U7KJTY5O74XXVEZCFH6FBEOX6H5RB2DNBYNXMWUB5PROSBGUETQAC
HNXLYJP4RNTWVR47WDYODOXRHBPMGGDD4QXVAPQJFZZF6AJ7Z4RQC
RK6RL6JBZZ2DFPWAT5UFLB5X5F7V6MXKM5YRZ2JLTRELZ43XJ6UQC
QEUSVFA6MSROOLK5TVDHKOGIDXRUHJ4CA5FP22EVYKEQF66KJPXQC
YT23TCUEE6A3I7EX6WIZYHCPRYJDE74IZKR5YKPHKOFSYJCKFUCQC
27PHKHPXXI2JPK74EQCGO6YF4ABXQTZ37GZWSMD4AGOQZPD2VSLQC
7YUGK5Q64KG5O7GJGTUBRRLHAHBCJ5YOE23YUPT6UBKUSB67CYAQC
3ZWALZFSTSIVYXY4BAY6ANGINTDACZC6RSSJTEMQSTSUIE66YOBQC
H55P74Y6NHAPF3VPWXIAP7DODA3DV7NCT3SK6VVLWNNWZ7JIMBTAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
B62ICMDTN5V7R7RBL4JALFVKEMVOOVLRSJASRNYS6CGFWBEEF5JQC
5XSXMOBGXFLTIQE6WDXWWFVDOTUPZSIQ2FWT3YI5QMVU6D76IUYQC
R22TTMI6WXWULC7ODKFF3QCB7MOTETQQ6IR4BUCUPOCQKQNCTT5AC
E77ASJLF52YJ4DQIZ4GLNN3PB3AOUPWS5UVETBEHANA3U7OG3OJAC
KBNY5FWKTEAKABFCLPC3QFKFSVZKAGXINPCIFV6WDSWFO4VCKNTAC
L4UCVNVRFTHENDKDOY6X75LXIE2B7XIMSKGVKHBOXNID7RDTBQRAC
52FEQPZJXSIC2RBEQDRP4CW56AQTFKQ434GI6PBMEOUGM6KUMHMAC
QDTVLBRGHDTRUVT7I3O72K6TMOYAUSAJBZUHGOEFU2RKJNUPWZSQC
PR42BCP5BPRFD2MP5H6CIJP7E57Q6TKL6SOXZWFKMFVR2OZWHT7AC
RBAGQ2PB7V5YAM5KSHSZR2E3MLKDSRVM5XYGI2TIXP5QMVBOQHDQC
HPUNJMYBCMRXIRCDNPIA6DU2QAMK4VZCAK6J6LZ4INLLS5BI7A5QC
ACKNLTFL2RI3PMRWLNRVLRWGQAMLRFKNGNS5LED6NFE5GVGFIHFAC
L4PKJZERR7WADKWHY3MR6J6OZFREVPL3CB43I6MLJ2BVKWCUTE7AC
GWI7AK6M7OHFP72G54U44O4XMQ6RLJLY27XGPDU7GJBVCZDSCHVAC
L254F6ZIU2HWGLFFGPIORTN4C3TDQ3E5JZ7Z7GQA5AEDIKL6PKDAC
OWERGKLVPNPGIIS23FZ7ZDOBWUIXCKYAFG3URXU75JAUDX3N5ENAC
V53DXVC5T3N6J47H2CNG4MMPRR4PHW4AIS66QNVTKJNNYTTTQL4AC
33ZMPQC6OXTESW7SRW765GRNJUEJRSYONRVZVIEUDAUEJ2PPMB4AC
2WVP47RBNL5OVYMAZH7TKRYD7F2TGSZ5X74PWVGAYCQP26G3JUHQC
KN5WFFRSNGHIGI5IUYRBOA4R4K7XK3AEAAMN6ELDFTSYKPN7QX7AC
U3SFBWHMMMO2PY6PAX7FMSBSND4RCWGJR42HB47LNQXLOX7ZOB6QC
C5VA63WAQRWPENIMXRPUPZLZJMC77PL2B3A77HYFWDCZU5QDG7VQC
I2B33Z7NZGC33AMDSSK446AZZYWKPHWLAGULVHKKZU4MVB4BNJOAC
W5VEC2PBIM5DMU5233HOWAZUEPTGWJRZZIA3H35YYQQW6BTP6XUAC
NNG27Y5ZQAZX6UD7F7M4F6KEZBEDFXPEEC3LFUSX4ESKT7K6UJQAC
C67GX7W5HBCDPQJRSHWMLM4DUJ3ELFSHH42SVICFJVCJW25T5Z3AC
PFMHSDAXQN4VDSDA6QBDIK2DPJKGYX5HYLTSZNTKMRJYXYLIKGOQC
OP6CTAKWCAU64JXQ3USQYR5E5IFHQHNCACII5UMVRXUTZXJQOAZAC
OWNMHNCGA5H3A6AULXXW473PKC7N6IINE3LJCB3KCFG2XA3TYCQQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
ASLW3Z5PAVZSWJEMMMVZT226P44EKSAD47QS72JIFJESAI3RPN3AC
TJRYL3NXPW5IUGEV3YOC7JYWEXCZDBFPLT4AUG4P227WVKVB72ZAC
YHSVOROKPYS33Y4RYZRVZTE3G5LXOFX52HEDNLV6HIXOJYNOKH3QC
4PUWNQO7QMEWY3GSUHLBKMYOAI7ASYSRM32KDGTA7DLNDIGFAWFAC
CH7JECYYH35H4TRHRNRTRJCQTQLZ2WRH62TKV72SUIU2RTK5OH7AC
SXLHOSCHX4BPRYRR35DI5GWISPIDKRFUSRVCYYHUUAYLAYFHSPBQC
DS2GZKISEP2DM2VU6EJ525Q7W3WVOKJXG5PY2OY4VNFCLBHVVOTAC
QYQKV4R47PTERXVFQNNWWQVICGSOMBHW6WM5TAZAKLIYOLLPUAJAC
6ME4TYV7ITXCAUMNVB27LRRHB72J2FVVZMJNS34IMAN57R37AE2QC
B3FDHXVBFR7YQF56JLQT2EYWRTWV6Y4N44GI6EWVWUU2KBNMZDCAC
N5XD5IAOMEDF37AXEBALHFINB4H527T6YNTCHN5KKO6YHXAP5PNQC
JQFDRS5YPQ5KKTCNXW2XNUZU2XK2CW4PXRD6BSQFKMC5QFG3Y23AC
LC2XZTUD56PLARIGBTDXDPJIYJNMJU446GFDGLRIFD2I4F66L6TAC
RYT42Z6CED4KV5CCJ45CHZ3DQGLFMDCVH6CSQZNXOILULDG4MXVQC
CIPVRZGLOZHCERK6YPOBV3P2E4IAB4H6D5EHLRQE2O5E4P4VCBUAC
I4HQEB6RVIPJD3EQCNADMQJVGYAIIHTBGFVMPXHDNLYYG5JVIK4AC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
HSRRNAU5UAYC6B6IQWGJPFROMZBTJICPCH6DJVZDHDTAGOQ6IOYAC
25CH7HH4LKXFIZ75YNMXS3TSXO6O27DYSOPLOD45K4OCNFWLS4LQC
J6APXOT4QOGQFONWB7G546VTVF6QG42HVOROMHF7YBDJPR4K26OAC
7U7IZUR2C7UALYI4Y3SHBYGTHYVQM6JI4PXDFXUFL3T3L6JBSC6AC
LWVP2PEWXDDSVOYQDOMHBW267KDDT6FS7ZN7IZUYRENTSSZMVIUQC
3D6NWJ44UYHLZMD3BOQIWXJUEGITAVCHK6Z2WWDQONVQC4HSBRXQC
P2YNOE2TUTZFAOBTHJOIVD6TCV7J7D2UKUX67LHZUL6QY44ZMENQC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
GT7BSR54BVJKHUCLEBTELGBMNBFFDQW52EVC4XKVEMUVG2UGZMDAC
KAOE5HB3THUKVGFZRO5EZESHEB3Q34WUO5DFMLWIKOBF47LZTIYAC
UZ5623MOLKBTGBSRBJ4OBOEI4IEZSPV3NCV2DRMUZ3CHHJQVHIIAC
LS3DAZVRDCXVN2BKBC6RGCKO3R43Z7HKG4GXJWLBK4AKBL2G6QDQC
4PGOIN7EO5PXZHDRHBIWFTT4UI6QTINSWVN333R7S6VHFMOYQYIAC
P33QUZKDQZ2XKFPFI4HP5A7KG76PTBFGB3ZSGMBN3X6JYOOMYLLQC
BW2AIV5GQCTDX3P56GZRFP3H2APGGA2LUZV6OYOT66RUOP277MOAC
WG2IBEY4INAZZL3XJXC4PHLH36TRYZAP5CEZGXMJ5BLEJM7LEOKQC
RBKHIKKQ5LSNWJA7ZIJ6B7HF36UA6LPZLVEWOJ3X5CUSQUOJGFZQC
AS2IQQJNNCEQNXXKTGYHLB7RO3ZKCF4F7GK6FJH66BOOKDDRGNIQC
TQLWCGVXVZ75H7MDBJD3DJDUFNW62WOAEDJUVKCHQTAXKBP47CSAC
C5U3HSOOQ7BKXKXIDS7MLVXUKDTHAWJ5NXNX6YDXTM3GWY5UWX4QC
VK3LNDA3TXEPBMLDWBTEBDOZMPP3YUED3A624XMHWI6FI7LP3HGAC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
2H32CFFM2FNS63JJPNM2S6HMO543EX72GMPOU5GI6HTMQYPL6I3AC
TPZ3PNJN3TYJY2UDMZYE2K2J5ZQJXKHSWWLPVHMOEFCADK6UAGOAC
HFXCFYFH2X3BIZR55ZADL3CV4MQJEEHDSIJZ7YSTHO3HTZP7GWEAC
JW5AXME4PI4FNLNKE4NA5BK4FUWH2ZQQAWPVOGLQQBQI5QZNQUHAC
AOAJ6D3OKSELEYKAT55XCVU5LYJ7SMCZKC6DIEGLLB3TF2LEENWQC
XGHRLF5KASEHD5UTAT7XBQFET3EXXFBYNT5KM6VGWVW4URJNKAYQC
B3MFLKPJ34I2USQX7UM3SPDIFVGACB5HXYLEKT3FDULL57QOE2LAC
NRMSQFTORG3GC7HQBIN5DHB5GLWXM6IQO6PTXD4C7LBQWJIHYIGAC
RCPQNIRPR3NQXEMVLBAQW6657UJFIP43N54UJVEZHJH22OH4UQIQC
5K2ANIEXD3CPJM4XNKNPZINP2G4NT7SJBKRN62WNBUKJXFERTILQC
CAGCTYIUYWDHQAJOLVLKOEV5HG6K5ZG7IDHONLIG6BDNCWZJAK4AC
QNKMXCJSGRBEPE6ZNPEXU5EQIOME6EI4DECVC56GLOBCMGWWE6MQC
AUXVWXWIFSTWFA6VZXN2FMG7FQEKRZVV6MD32VQQ7J2RKCXHAVGAC
SWE3F3BLKHYMJEJLXNFH3MR2E6VDEYXJ6DL7QLPP47BJEKEUCAMAC
QKGDOYIYKE6B36ION5O2DRW65DWWPZMYNWJVH7LJJ7FPGGM2MYAQC
ZP2KE7A2LE7Z2S7AC45WE4CXDSEVDTWIMV2EM4IBUKXYJIDU6R7QC
DT6OBXKHMLODEFK6UOIYCR4EJSVJKGYWCM35BVM5SN55K2736QHQC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
4UXFU3FZOCBSLDQ4S7MJKAE2H7VUHCNRDQMIY6NJ3PHYXWNGISDQC
TCZNXMPFNAWJYUIBTUEOTT73KLB4CU5S6HBKTHRT6KCD4ZVGBGUQC
MG6LLF3XYCOEBQRX7TJ4MUTKM3IROYWUMZGCMYVW4TGDG36CJMJQC
B6X2JQ6LF5EEDKFOXKX4RQYH6GW3LXB5E4WTIUVHSXTO4TIZA24QC
X76YXE6RFL7QY5WL6MSSS44WHVA5FQMDQY3XTYP2UL6UZB4E6XMQC
7TK2D5RI45FKCIQBHGU4FA75NSFZA3ZYFF2UYQJEGHCOV7I4XUGQC
if ((!player_genus(GENPC_DRACONIAN)
&& (!(you.species == SP_MERFOLK && player_is_swimming()))
&& !player_mutation_level( MUT_STINGER ))
if (!player_genus(GENPC_DRACONIAN)
&& !(you.species == SP_MERFOLK && player_is_swimming())
&& !player_mutation_level(MUT_STINGER)
wpn_skill = SK_UNARMED_COMBAT;
aux_damage = player_apply_weapon_skill(aux_damage);
aux_damage = player_apply_fighting_skill(aux_damage, true);
aux_damage = player_apply_misc_modifiers(aux_damage);
wpn_skill = SK_UNARMED_COMBAT;
aux_damage = player_apply_weapon_skill(aux_damage);
aux_damage = player_apply_fighting_skill(aux_damage, true);
aux_damage = player_apply_misc_modifiers(aux_damage);
void melee_attack::calc_elemental_brand_damage(
beam_type flavour,
int res,
const char *verb)
void melee_attack::calc_elemental_brand_damage( beam_type flavour,
int res,
const char *verb)
if (you.received_weapon_warning == false &&
weapon && weapon->base_type != OBJ_STAVES &&
(weapon->base_type != OBJ_WEAPONS || is_range_weapon(*weapon)))
if (you.received_weapon_warning == false
&& weapon && weapon->base_type != OBJ_STAVES
&& (weapon->base_type != OBJ_WEAPONS || is_range_weapon(*weapon)))
const int wpn_skill = weapon_skill( wpn_class, wpn_type );
const int hands = hands_reqd( wpn_class, wpn_type, player_size() );
const int wpn_skill = weapon_skill( wpn_class, wpn_type );
const int hands = hands_reqd( wpn_class, wpn_type, player_size() );
const bool shield = (you.equip[EQ_SHIELD] != -1);
const int hands = hands_reqd(you.inv[weapon], player_size());
const bool shield = (you.equip[EQ_SHIELD] != -1);
const int hands = hands_reqd(you.inv[weapon], player_size());
if ( moves.isTarget &&
moves.tx == you.x_pos && moves.ty == you.y_pos &&
mode == TARG_ENEMY &&
!yesno("Really target yourself?", false, 'n'))
if ( moves.isTarget
&& moves.tx == you.x_pos && moves.ty == you.y_pos
&& mode == TARG_ENEMY
&& !yesno("Really target yourself?", false, 'n'))
if (mon->behaviour == BEH_SLEEP)
{
mprf(MSGCH_EXAMINE, "%s appears to be resting.",
mon->pronoun(PRONOUN_CAP).c_str());
}
// Applies to both friendlies and hostiles
else if (mon->behaviour == BEH_FLEE)
{
mprf(MSGCH_EXAMINE, "%s is retreating.",
mon->pronoun(PRONOUN_CAP).c_str());
}
// hostile with target != you
else if (!mons_friendly(mon) && !mons_neutral(mon) && mon->foe != MHITYOU)
{
// special case: batty monsters get set to BEH_WANDER as
// part of their special behaviour.
if (!testbits(mon->flags, MF_BATTY))
{
mprf(MSGCH_EXAMINE, "%s doesn't appear to have noticed you.",
mon->pronoun(PRONOUN_CAP).c_str());
}
}
if (mon->behaviour == BEH_SLEEP)
{
mprf(MSGCH_EXAMINE, "%s appears to be resting.",
mon->pronoun(PRONOUN_CAP).c_str());
}
// Applies to both friendlies and hostiles
else if (mon->behaviour == BEH_FLEE)
{
mprf(MSGCH_EXAMINE, "%s is retreating.",
mon->pronoun(PRONOUN_CAP).c_str());
}
// hostile with target != you
else if (!mons_friendly(mon) && !mons_neutral(mon) && mon->foe != MHITYOU)
{
// special case: batty monsters get set to BEH_WANDER as
// part of their special behaviour.
if (!testbits(mon->flags, MF_BATTY))
{
mprf(MSGCH_EXAMINE, "%s doesn't appear to have noticed you.",
mon->pronoun(PRONOUN_CAP).c_str());
}
}
if (!player_monster_visible(&menv[i]) && !mons_flies(&menv[i]))
{
mpr("There is a strange disturbance in the water here.",
MSGCH_EXAMINE_FILTER);
}
mpr("There is a strange disturbance in the water here.",
MSGCH_EXAMINE_FILTER);
case 'F': return CMD_TARGET_WIZARD_MAKE_FRIENDLY;
case 's': return CMD_TARGET_WIZARD_MAKE_SHOUT;
case 'g': return CMD_TARGET_WIZARD_GIVE_ITEM;
case 'F': return CMD_TARGET_WIZARD_MAKE_FRIENDLY;
case 's': return CMD_TARGET_WIZARD_MAKE_SHOUT;
case 'g': return CMD_TARGET_WIZARD_GIVE_ITEM;
case 'v': return CMD_TARGET_DESCRIBE;
case '?': return CMD_TARGET_HELP;
case ' ': return just_looking? CMD_TARGET_CANCEL : CMD_TARGET_SELECT;
case 'v': return CMD_TARGET_DESCRIBE;
case '?': return CMD_TARGET_HELP;
case ' ': return just_looking? CMD_TARGET_CANCEL : CMD_TARGET_SELECT;
case '\\': case '\t': return CMD_TARGET_FIND_PORTAL;
case '^': return CMD_TARGET_FIND_TRAP;
case '_': return CMD_TARGET_FIND_ALTAR;
case '<': return CMD_TARGET_FIND_UPSTAIR;
case '>': return CMD_TARGET_FIND_DOWNSTAIR;
case '\\':
case '\t': return CMD_TARGET_FIND_PORTAL;
case '^': return CMD_TARGET_FIND_TRAP;
case '_': return CMD_TARGET_FIND_ALTAR;
case '<': return CMD_TARGET_FIND_UPSTAIR;
case '>': return CMD_TARGET_FIND_DOWNSTAIR;
case 'p': return CMD_TARGET_PREV_TARGET;
case 'f': return CMD_TARGET_MAYBE_PREV_TARGET;
case 't': return CMD_TARGET_MAYBE_PREV_TARGET; // f. users of the 0.3.4 keys
case 'p': return CMD_TARGET_PREV_TARGET;
case 'f': return CMD_TARGET_MAYBE_PREV_TARGET;
case 't': return CMD_TARGET_MAYBE_PREV_TARGET; // for the 0.3.4 keys
case '-': return CMD_TARGET_CYCLE_BACK;
case '+': case '=': return CMD_TARGET_CYCLE_FORWARD;
case ';': case '/': return CMD_TARGET_OBJ_CYCLE_BACK;
case '*': case '\'': return CMD_TARGET_OBJ_CYCLE_FORWARD;
case '-': return CMD_TARGET_CYCLE_BACK;
case '+':
case '=': return CMD_TARGET_CYCLE_FORWARD;
case ';':
case '/': return CMD_TARGET_OBJ_CYCLE_BACK;
case '*':
case '\'': return CMD_TARGET_OBJ_CYCLE_FORWARD;
case 'b': return CMD_TARGET_DOWN_LEFT;
case 'h': return CMD_TARGET_LEFT;
case 'j': return CMD_TARGET_DOWN;
case 'k': return CMD_TARGET_UP;
case 'l': return CMD_TARGET_RIGHT;
case 'n': return CMD_TARGET_DOWN_RIGHT;
case 'u': return CMD_TARGET_UP_RIGHT;
case 'y': return CMD_TARGET_UP_LEFT;
case 'b': return CMD_TARGET_DOWN_LEFT;
case 'h': return CMD_TARGET_LEFT;
case 'j': return CMD_TARGET_DOWN;
case 'k': return CMD_TARGET_UP;
case 'l': return CMD_TARGET_RIGHT;
case 'n': return CMD_TARGET_DOWN_RIGHT;
case 'u': return CMD_TARGET_UP_RIGHT;
case 'y': return CMD_TARGET_UP_LEFT;
case 'B': return CMD_TARGET_DIR_DOWN_LEFT;
case 'H': return CMD_TARGET_DIR_LEFT;
case 'J': return CMD_TARGET_DIR_DOWN;
case 'K': return CMD_TARGET_DIR_UP;
case 'L': return CMD_TARGET_DIR_RIGHT;
case 'N': return CMD_TARGET_DIR_DOWN_RIGHT;
case 'U': return CMD_TARGET_DIR_UP_RIGHT;
case 'Y': return CMD_TARGET_DIR_UP_LEFT;
case 'B': return CMD_TARGET_DIR_DOWN_LEFT;
case 'H': return CMD_TARGET_DIR_LEFT;
case 'J': return CMD_TARGET_DIR_DOWN;
case 'K': return CMD_TARGET_DIR_UP;
case 'L': return CMD_TARGET_DIR_RIGHT;
case 'N': return CMD_TARGET_DIR_DOWN_RIGHT;
case 'U': return CMD_TARGET_DIR_UP_RIGHT;
case 'Y': return CMD_TARGET_DIR_UP_LEFT;
pbolt.range = 8 + random2(5); // default for "0" beams (I think)
pbolt.rangeMax = 0;
pbolt.hit = 0; // default for "0" beams (I think)
pbolt.damage = dice_def( 1, 0 ); // default for "0" beams (I think)
pbolt.type = 0; // default for "0" beams
pbolt.flavour = BEAM_MAGIC; // default for "0" beams
pbolt.ench_power = power;
pbolt.range = 8 + random2(5); // default for "0" beams (I think)
pbolt.rangeMax = 0;
pbolt.hit = 0; // default for "0" beams (I think)
pbolt.damage = dice_def( 1, 0 ); // default for "0" beams (I think)
pbolt.type = 0; // default for "0" beams
pbolt.flavour = BEAM_MAGIC; // default for "0" beams
pbolt.ench_power = power;
pbolt.is_beam = false; // default for all beams.
pbolt.is_tracer = false; // default for all player beams
pbolt.thrower = KILL_YOU_MISSILE; // missile from player
pbolt.aux_source.clear(); // additional source info, unused
pbolt.is_beam = false; // default for all beams.
pbolt.is_tracer = false; // default for all player beams
pbolt.thrower = KILL_YOU_MISSILE; // missile from player
pbolt.aux_source.clear(); // additional source info, unused
pbolt.name = "force bolt";
pbolt.colour = BLACK;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 1, 5 ); // dam: 5
pbolt.hit = 8 + power / 10; // 25: 10
pbolt.type = dchar_glyph(DCHAR_SPACE);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "force bolt";
pbolt.colour = BLACK;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 1, 5 ); // dam: 5
pbolt.hit = 8 + power / 10; // 25: 10
pbolt.type = dchar_glyph(DCHAR_SPACE);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "magic dart";
pbolt.colour = LIGHTMAGENTA;
pbolt.range = random2(5) + 8;
pbolt.damage = dice_def( 1, 3 + power / 5 ); // 25: 1d8
pbolt.hit = AUTOMATIC_HIT; // hits always
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "magic dart";
pbolt.colour = LIGHTMAGENTA;
pbolt.range = random2(5) + 8;
pbolt.damage = dice_def( 1, 3 + power / 5 ); // 25: 1d8
pbolt.hit = AUTOMATIC_HIT; // hits always
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "sting";
pbolt.colour = GREEN;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 1, 3 + power / 5 ); // 25: 1d8
pbolt.hit = 8 + power / 5; // 25: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_POISON; // extra damage
pbolt.name = "sting";
pbolt.colour = GREEN;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 1, 3 + power / 5 ); // 25: 1d8
pbolt.hit = 8 + power / 5; // 25: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_POISON; // extra damage
pbolt.name = "zap";
pbolt.colour = LIGHTCYAN;
pbolt.range = 6 + random2(8); // extended in beam
pbolt.damage = dice_def( 1, 3 + random2(power) / 2 ); // 25: 1d11
pbolt.hit = 8 + power / 7; // 25: 11
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ELECTRICITY; // beams & reflects
pbolt.name = "zap";
pbolt.colour = LIGHTCYAN;
pbolt.range = 6 + random2(8); // extended in beam
pbolt.damage = dice_def( 1, 3 + random2(power) / 2 );// 25: 1d11
pbolt.hit = 8 + power / 7; // 25: 11
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ELECTRICITY; // beams & reflects
pbolt.name = "0";
pbolt.flavour = BEAM_DISINTEGRATION;
pbolt.range = 7 + random2(8);
pbolt.damage = dice_def( 1, 4 + power / 5 ); // 25: 1d9
pbolt.ench_power *= 3;
pbolt.name = "0";
pbolt.flavour = BEAM_DISINTEGRATION;
pbolt.range = 7 + random2(8);
pbolt.damage = dice_def( 1, 4 + power / 5 ); // 25: 1d9
pbolt.ench_power *= 3;
pbolt.name = "0";
pbolt.flavour = BEAM_PAIN;
pbolt.range = 7 + random2(8);
pbolt.damage = dice_def( 1, 4 + power / 5 ); // 25: 1d9
pbolt.ench_power *= 7;
pbolt.ench_power /= 2;
pbolt.name = "0";
pbolt.flavour = BEAM_PAIN;
pbolt.range = 7 + random2(8);
pbolt.damage = dice_def( 1, 4 + power / 5 ); // 25: 1d9
pbolt.ench_power *= 7;
pbolt.ench_power /= 2;
pbolt.damage = dice_def( 1, 8 + power / 4 ); // 25: 1d14
pbolt.hit = 7 + power / 6; // 25: 11
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.flavour = BEAM_FIRE;
pbolt.damage = dice_def( 1, 8 + power / 4 ); // 25: 1d14
pbolt.hit = 7 + power / 6; // 25: 11
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.flavour = BEAM_FIRE;
temp_rand = random2(4);
pbolt.name += (temp_rand == 0) ? "dust" :
(temp_rand == 1) ? "dirt" :
(temp_rand == 2) ? "grit" : "sand";
pbolt.colour = BROWN;
pbolt.range = (random2(power) > random2(30)) ? 2 : 1;
pbolt.damage = dice_def( 1, 8 + power / 4 ); // 25: 1d14
pbolt.hit = 8 + power / 5; // 25: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.flavour = BEAM_FRAG; // extra AC resist
temp_rand = random2(4);
pbolt.name += (temp_rand == 0) ? "dust" :
(temp_rand == 1) ? "dirt" :
(temp_rand == 2) ? "grit" : "sand";
pbolt.damage = dice_def( 2, 4 + power / 3 ); // 25: 2d12
pbolt.hit = 13 + power / 10; // 25: 15
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.flavour = BEAM_FRAG; // extra AC resist
pbolt.damage = dice_def( 2, 4 + power / 3 ); // 25: 2d12
pbolt.hit = 13 + power / 10; // 25: 15
pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);
pbolt.flavour = BEAM_FRAG; // extra AC resist
pbolt.name = "spray of bone shards";
pbolt.colour = LIGHTGREY;
pbolt.range = 7 + random2(10);
pbolt.name = "spray of bone shards";
pbolt.colour = LIGHTGREY;
pbolt.range = 7 + random2(10);
pbolt.damage = dice_def( 3, 2 + (power / 250) );
pbolt.hit = 8 + (power / 100); // max hit: 53
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_MAGIC; // unresisted
pbolt.damage = dice_def( 3, 2 + (power / 250) );
pbolt.hit = 8 + (power / 100); // max hit: 53
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_MAGIC; // unresisted
pbolt.name = "puff of flame";
pbolt.colour = RED;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 2, 4 + power / 10 ); // 25: 2d6 50: 2d9
pbolt.hit = 8 + power / 10; // 25: 10 50: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE;
pbolt.name = "puff of flame";
pbolt.colour = RED;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 2, 4 + power / 10 );// 25: 2d6 50: 2d9
pbolt.hit = 8 + power / 10; // 25: 10 50: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE;
pbolt.name = "puff of frost";
pbolt.colour = WHITE;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 2, 4 + power / 10 ); // 25: 2d6 50: 2d9
pbolt.hit = 8 + power / 10; // 50: 10 50: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_COLD;
pbolt.name = "puff of frost";
pbolt.colour = WHITE;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 2, 4 + power / 10 );// 25: 2d6 50: 2d9
pbolt.hit = 8 + power / 10; // 25: 10 50: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_COLD;
pbolt.name = "stone arrow";
pbolt.colour = LIGHTGREY;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 2, 5 + power / 7 ); // 25: 2d8 50: 2d12
pbolt.hit = 8 + power / 10; // 25: 10 50: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);
pbolt.flavour = BEAM_MMISSILE; // irresistible
pbolt.name = "stone arrow";
pbolt.colour = LIGHTGREY;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 2, 5 + power / 7 );// 25: 2d8 50: 2d12
pbolt.hit = 8 + power / 10; // 25: 10 50: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);
pbolt.flavour = BEAM_MMISSILE; // irresistible
pbolt.name = "sticky flame"; // extra damage
pbolt.colour = RED;
pbolt.range = 8 + random2(5);
pbolt.damage = dice_def( 2, 3 + power / 12 ); // 50: 2d7 100: 2d11
pbolt.hit = 11 + power / 10; // 50: 16 100: 21
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE;
pbolt.name = "sticky flame"; // extra damage
pbolt.colour = RED;
pbolt.range = 8 + random2(5);
// 50: 2d7 100: 2d11
pbolt.damage = dice_def( 2, 3 + power / 12 );
// 50: 16 100: 21
pbolt.hit = 11 + power / 10;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE;
pbolt.name = "orb of energy";
pbolt.colour = LIGHTMAGENTA;
pbolt.range = 8 + random2(5);
pbolt.damage = calc_dice( 2, 15 + (power * 2) / 5 );
pbolt.hit = 10 + power / 7; // 50: 17 100: 24
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "orb of energy";
pbolt.colour = LIGHTMAGENTA;
pbolt.range = 8 + random2(5);
pbolt.damage = calc_dice( 2, 15 + (power * 2) / 5 );
pbolt.hit = 10 + power / 7; // 50: 17 100: 24
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "bolt of ice";
pbolt.colour = WHITE;
pbolt.range = 8 + random2(5);
pbolt.damage = calc_dice( 3, 10 + power / 2 );
pbolt.hit = 9 + power / 12; // 50: 13 100: 17
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ICE; // half resistable
pbolt.name = "bolt of ice";
pbolt.colour = WHITE;
pbolt.range = 8 + random2(5);
pbolt.damage = calc_dice( 3, 10 + power / 2 );
pbolt.hit = 9 + power / 12; // 50: 13 100: 17
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ICE; // half resistable
pbolt.name = "0";
pbolt.flavour = BEAM_DISPEL_UNDEAD;
pbolt.range = 7 + random2(8);
pbolt.damage = calc_dice( 3, 20 + (power * 3) / 4 );
pbolt.ench_power *= 3;
pbolt.ench_power /= 2;
pbolt.name = "0";
pbolt.flavour = BEAM_DISPEL_UNDEAD;
pbolt.range = 7 + random2(8);
pbolt.damage = calc_dice( 3, 20 + (power * 3) / 4 );
pbolt.ench_power *= 3;
pbolt.ench_power /= 2;
pbolt.name = "bolt of magma";
pbolt.colour = RED;
pbolt.range = 5 + random2(4);
pbolt.damage = calc_dice( 4, 10 + (power * 3) / 5 );
pbolt.hit = 8 + power / 25; // 50: 10 100: 14
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_LAVA;
pbolt.name = "bolt of magma";
pbolt.colour = RED;
pbolt.range = 5 + random2(4);
pbolt.damage = calc_dice( 4, 10 + (power * 3) / 5 );
pbolt.hit = 8 + power / 25; // 50: 10 100: 14
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_LAVA;
pbolt.name = "bolt of fire";
pbolt.colour = RED;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 6, 18 + power * 2 / 3 );
pbolt.hit = 10 + power / 25; // 50: 12 100: 14
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE;
pbolt.name = "bolt of fire";
pbolt.colour = RED;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 6, 18 + power * 2 / 3 );
pbolt.hit = 10 + power / 25; // 50: 12 100: 14
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE;
pbolt.name = "bolt of cold";
pbolt.colour = WHITE;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 6, 18 + power * 2 / 3 );
pbolt.hit = 10 + power / 25; // 50: 12 100: 14
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_COLD;
pbolt.name = "bolt of cold";
pbolt.colour = WHITE;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 6, 18 + power * 2 / 3 );
pbolt.hit = 10 + power / 25; // 50: 12 100: 14
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_COLD;
pbolt.name = "bolt of poison";
pbolt.colour = LIGHTGREEN;
pbolt.range = 8 + random2(10);
pbolt.damage = calc_dice( 4, 15 + power / 2 );
pbolt.hit = 8 + power / 20; // 50: 10 100: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_POISON; // extra damage
pbolt.name = "bolt of poison";
pbolt.colour = LIGHTGREEN;
pbolt.range = 8 + random2(10);
pbolt.damage = calc_dice( 4, 15 + power / 2 );
pbolt.hit = 8 + power / 20; // 50: 10 100: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_POISON; // extra damage
pbolt.name = "bolt of negative energy";
pbolt.colour = DARKGREY;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 4, 15 + (power * 3) / 5 );
pbolt.hit = 8 + power / 20; // 50: 10 100: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_NEG; // drains levels
pbolt.name = "bolt of negative energy";
pbolt.colour = DARKGREY;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 4, 15 + (power * 3) / 5 );
pbolt.hit = 8 + power / 20; // 50: 10 100: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_NEG; // drains levels
pbolt.name = "iron bolt";
pbolt.colour = LIGHTCYAN;
pbolt.range = 5 + random2(5);
pbolt.damage = calc_dice( 9, 15 + (power * 3) / 4 );
pbolt.hit = 7 + power / 15; // 50: 10 100: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "iron bolt";
pbolt.colour = LIGHTCYAN;
pbolt.range = 5 + random2(5);
pbolt.damage = calc_dice( 9, 15 + (power * 3) / 4 );
pbolt.hit = 7 + power / 15; // 50: 10 100: 13
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "poison arrow";
pbolt.colour = LIGHTGREEN;
pbolt.range = 8 + random2(5);
pbolt.damage = calc_dice( 4, 15 + power );
pbolt.hit = 5 + power / 10; // 50: 10 100: 15
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);
pbolt.flavour = BEAM_POISON_ARROW; // extra damage
pbolt.name = "poison arrow";
pbolt.colour = LIGHTGREEN;
pbolt.range = 8 + random2(5);
pbolt.damage = calc_dice( 4, 15 + power );
pbolt.hit = 5 + power / 10; // 50: 10 100: 15
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);
pbolt.flavour = BEAM_POISON_ARROW; // extra damage
pbolt.name = "0";
pbolt.flavour = BEAM_DISINTEGRATION;
pbolt.range = 7 + random2(8);
pbolt.damage = calc_dice( 3, 15 + (power * 3) / 4 );
pbolt.ench_power *= 5;
pbolt.ench_power /= 2;
pbolt.is_beam = true;
pbolt.name = "0";
pbolt.flavour = BEAM_DISINTEGRATION;
pbolt.range = 7 + random2(8);
pbolt.damage = calc_dice( 3, 15 + (power * 3) / 4 );
pbolt.ench_power *= 5;
pbolt.ench_power /= 2;
pbolt.is_beam = true;
pbolt.name = "bolt of lightning";
pbolt.colour = LIGHTCYAN;
pbolt.range = 8 + random2(10); // extended in beam
pbolt.damage = calc_dice( 1, 10 + (power * 3) / 5 );
pbolt.hit = 7 + random2(power) / 20; // 50: 7-9 100: 7-12
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ELECTRICITY; // beams & reflects
pbolt.name = "bolt of lightning";
pbolt.colour = LIGHTCYAN;
pbolt.range = 8 + random2(10); // extended in beam
pbolt.damage = calc_dice( 1, 10 + (power * 3) / 5 );
pbolt.hit = 7 + random2(power) / 20; // 50: 7-9 100: 7-12
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ELECTRICITY; // beams & reflects
pbolt.name = "fireball";
pbolt.colour = RED;
pbolt.range = 8 + random2(5);
pbolt.damage = calc_dice( 3, 10 + power / 2 );
pbolt.hit = 40; // hit: 40
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE; // fire
pbolt.is_explosion = true;
pbolt.name = "fireball";
pbolt.colour = RED;
pbolt.range = 8 + random2(5);
pbolt.damage = calc_dice( 3, 10 + power / 2 );
pbolt.hit = 40; // hit: 40
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE; // fire
pbolt.is_explosion = true;
pbolt.name = "orb of electricity";
pbolt.colour = LIGHTBLUE;
pbolt.range = 9 + random2(12);
pbolt.damage = calc_dice( 1, 15 + (power * 4) / 5 );
pbolt.damage.num = 0; // only does explosion damage
pbolt.hit = 40; // hit: 40
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ELECTRICITY;
pbolt.is_explosion = true;
pbolt.name = "orb of electricity";
pbolt.colour = LIGHTBLUE;
pbolt.range = 9 + random2(12);
pbolt.damage = calc_dice( 1, 15 + (power * 4) / 5 );
pbolt.damage.num = 0; // only does explosion damage
pbolt.hit = 40; // hit: 40
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ELECTRICITY;
pbolt.is_explosion = true;
pbolt.name = "metal orb";
pbolt.colour = CYAN;
pbolt.range = 9 + random2(7);
pbolt.damage = calc_dice( 3, 30 + (power * 3) / 4 );
pbolt.hit = 20; // hit: 20
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FRAG; // extra AC resist
pbolt.is_explosion = true;
pbolt.name = "metal orb";
pbolt.colour = CYAN;
pbolt.range = 9 + random2(7);
pbolt.damage = calc_dice( 3, 30 + (power * 3) / 4 );
pbolt.hit = 20; // hit: 20
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FRAG; // extra AC resist
pbolt.is_explosion = true;
pbolt.name = "golden flame";
pbolt.colour = YELLOW;
pbolt.range = 7;
pbolt.damage = calc_dice( 3, 20 + (power * 2) / 3 );
pbolt.hit = 150;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_HOLY;
pbolt.name = "golden flame";
pbolt.colour = YELLOW;
pbolt.range = 7;
pbolt.damage = calc_dice( 3, 20 + (power * 2) / 3 );
pbolt.hit = 150;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_HOLY;
pbolt.name = "crystal spear";
pbolt.colour = WHITE;
pbolt.range = 6 + random2(4);
pbolt.damage = calc_dice( 10, 23 + power );
pbolt.hit = 10 + power / 15; // 50: 13 100: 16
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "crystal spear";
pbolt.colour = WHITE;
pbolt.range = 6 + random2(4);
pbolt.damage = calc_dice( 10, 23 + power );
pbolt.hit = 10 + power / 15; // 50: 13 100: 16
pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "hellfire";
pbolt.colour = RED;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 3, 10 + (power * 3) / 4 );
pbolt.hit = 20 + power / 10; // 50: 25 100: 30
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_HELLFIRE;
pbolt.name = "hellfire";
pbolt.colour = RED;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 3, 10 + (power * 3) / 4 );
pbolt.hit = 20 + power / 10; // 50: 25 100: 30
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_HELLFIRE;
pbolt.name = "great blast of cold";
pbolt.colour = BLUE;
pbolt.range = 9 + random2(5);
pbolt.damage = calc_dice( 10, 18 + power );
pbolt.damage.num = 0; // only does explosion damage
pbolt.hit = 20 + power / 10; // 50: 25 100: 30
pbolt.ench_power = power; // used for radius
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ICE; // half resisted
pbolt.is_explosion = true;
pbolt.name = "great blast of cold";
pbolt.colour = BLUE;
pbolt.range = 9 + random2(5);
pbolt.damage = calc_dice( 10, 18 + power );
pbolt.damage.num = 0; // only does explosion damage
pbolt.hit = 20 + power / 10; // 50: 25 100: 30
pbolt.ench_power = power; // used for radius
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ICE; // half resisted
pbolt.is_explosion = true;
pbolt.name = "narrow beam of energy";
pbolt.colour = YELLOW;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 12, 40 + (power * 3) / 2 );
pbolt.hit = 1;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ENERGY; // unresisted
pbolt.name = "narrow beam of energy";
pbolt.colour = YELLOW;
pbolt.range = 7 + random2(10);
pbolt.damage = calc_dice( 12, 40 + (power * 3) / 2 );
pbolt.hit = 1;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ENERGY; // unresisted
pbolt.damage = dice_def( 1, 4 + power / 2 ); // max dam: 25
pbolt.hit = 5 + random2( 1 + power / 3 ); // max hit: 19
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_POISON;
pbolt.damage = dice_def( 1, 4 + power / 2 ); // max dam: 25
pbolt.hit = 5 + random2( 1 + power / 3 ); // max hit: 19
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_POISON;
pbolt.damage = dice_def( 3, 4 + power / 3 ); // max dam: 60
pbolt.hit = 8 + random2( 1 + power / 3 ); // max hit: 25
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE;
pbolt.damage = dice_def( 3, 4 + power / 3 ); // max dam: 60
pbolt.hit = 8 + random2( 1 + power / 3 ); // max hit: 25
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_FIRE;
pbolt.damage = dice_def( 3, 4 + power / 3 ); // max dam: 39
pbolt.hit = 8 + random2( 1 + power / 3 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_COLD;
pbolt.damage = dice_def( 3, 4 + power / 3 ); // max dam: 39
pbolt.hit = 8 + random2( 1 + power / 3 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_COLD;
pbolt.damage = dice_def( 3, 3 + power / 3 ); // max dam: 36
pbolt.hit = 5 + random2( 1 + power / 3 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ACID;
pbolt.damage = dice_def( 3, 3 + power / 3 ); // max dam: 36
pbolt.hit = 5 + random2( 1 + power / 3 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_ACID;
pbolt.damage = dice_def( 3, 2 + power / 6 ); // max dam: 18
pbolt.hit = 6 + random2( 1 + power / 3 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_POISON;
pbolt.damage = dice_def( 3, 2 + power / 6 ); // max dam: 18
pbolt.hit = 6 + random2( 1 + power / 3 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_POISON;
pbolt.damage = dice_def( 3, 3 + power / 3 ); // max dam: 36
pbolt.hit = 5 + random2( 1 + power / 3 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.damage = dice_def( 3, 3 + power / 3 ); // max dam: 36
pbolt.hit = 5 + random2( 1 + power / 3 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.damage = dice_def( 3, 4 + power / 5 ); // max dam: 27
pbolt.hit = 10 + random2( 1 + power / 5 );
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.flavour = BEAM_STEAM;
pbolt.name = "0";
pbolt.flavour = BEAM_HEALING;
pbolt.damage = dice_def( 1, 7 + power / 3 );
pbolt.name = "0";
pbolt.flavour = BEAM_HEALING;
pbolt.damage = dice_def( 1, 7 + power / 3 );
pbolt.name = "0";
pbolt.flavour = BEAM_POLYMORPH;
pbolt.range = 9 + random2(5);
pbolt.name = "0";
pbolt.flavour = BEAM_POLYMORPH;
pbolt.range = 9 + random2(5);
pbolt.name = "0";
pbolt.flavour = BEAM_DEGENERATE;
pbolt.range = 7 + random2(5);
pbolt.name = "0";
pbolt.flavour = BEAM_DEGENERATE;
pbolt.range = 7 + random2(5);
pbolt.name = "0";
pbolt.flavour = BEAM_ENSLAVE_UNDEAD;
pbolt.range = 7 + random2(5);
pbolt.name = "0";
pbolt.flavour = BEAM_ENSLAVE_UNDEAD;
pbolt.range = 7 + random2(5);
pbolt.name = "0agony";
pbolt.flavour = BEAM_PAIN;
pbolt.range = 7 + random2(8);
pbolt.ench_power *= 5;
pbolt.name = "0agony";
pbolt.flavour = BEAM_PAIN;
pbolt.range = 7 + random2(8);
pbolt.ench_power *= 5;
pbolt.name = "0";
pbolt.flavour = BEAM_ENSLAVE_DEMON;
pbolt.range = 7 + random2(5);
pbolt.ench_power *= 3;
pbolt.ench_power /= 2;
pbolt.name = "0";
pbolt.flavour = BEAM_ENSLAVE_DEMON;
pbolt.range = 7 + random2(5);
pbolt.ench_power *= 3;
pbolt.ench_power /= 2;
pbolt.name = "0";
pbolt.flavour = BEAM_BACKLIGHT;
pbolt.colour = BLUE;
pbolt.range = 7 + random2(5);
pbolt.name = "0";
pbolt.flavour = BEAM_BACKLIGHT;
pbolt.colour = BLUE;
pbolt.range = 7 + random2(5);
pbolt.name = "debugging ray";
pbolt.colour = random_colour();
pbolt.range = 7 + random2(10);
pbolt.damage = dice_def( 1500, 1 ); // dam: 1500
pbolt.hit = 1500; // hit: 1500
pbolt.type = dchar_glyph(DCHAR_FIRED_DEBUG);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "debugging ray";
pbolt.colour = random_colour();
pbolt.range = 7 + random2(10);
pbolt.damage = dice_def( 1500, 1 ); // dam: 1500
pbolt.hit = 1500; // hit: 1500
pbolt.type = dchar_glyph(DCHAR_FIRED_DEBUG);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "buggy beam";
pbolt.colour = random_colour();
pbolt.range = 7 + random2(10);
pbolt.damage = dice_def( 1, 0 );
pbolt.hit = 60;
pbolt.type = dchar_glyph(DCHAR_FIRED_DEBUG);
pbolt.flavour = BEAM_MMISSILE; // unresistable
pbolt.name = "buggy beam";
pbolt.colour = random_colour();
pbolt.range = 7 + random2(10);
pbolt.damage = dice_def( 1, 0 );
pbolt.hit = 60;
pbolt.type = dchar_glyph(DCHAR_FIRED_DEBUG);
pbolt.flavour = BEAM_MMISSILE; // unresistable
hurted
= resist_adjust_damage(
monster,
pbolt.flavour,
(pbolt.flavour == BEAM_FIRE) ? monster->res_fire()
: monster->res_steam(),
hurted, true);
hurted = resist_adjust_damage(
monster,
pbolt.flavour,
(pbolt.flavour == BEAM_FIRE) ? monster->res_fire()
: monster->res_steam(),
hurted, true);
else
{
if (simple_monster_message(monster, " is healed somewhat."))
pbolt.obvious_effect = true;
}
else if (simple_monster_message(monster, " is healed somewhat."))
pbolt.obvious_effect = true;
pbolt.is_tracer = true;
pbolt.source_x = monster->x; // always safe to do.
pbolt.source_y = monster->y;
pbolt.is_tracer = true;
pbolt.source_x = monster->x; // always safe to do.
pbolt.source_y = monster->y;
pbolt.foe_count = pbolt.fr_count = 0;
pbolt.foe_power = pbolt.fr_power = 0;
pbolt.fr_helped = pbolt.fr_hurt = 0;
pbolt.foe_helped = pbolt.foe_hurt = 0;
pbolt.foe_ratio = 80; // default - see mons_should_fire()
pbolt.foe_count = pbolt.fr_count = 0;
pbolt.foe_power = pbolt.fr_power = 0;
pbolt.fr_helped = pbolt.fr_hurt = 0;
pbolt.foe_helped = pbolt.foe_hurt = 0;
pbolt.foe_ratio = 80; // default - see mons_should_fire()
return beam.name == "bolt of fire"
|| beam.name == "bolt of magma"
|| (beam.name.find("hellfire") != std::string::npos
&& beam.in_explosion_phase);
return (beam.name == "bolt of fire"
|| beam.name == "bolt of magma"
|| beam.name.find("hellfire") != std::string::npos
&& beam.in_explosion_phase);
if ( (grd[x][y] == DNGN_LAVA && beam.flavour == BEAM_COLD)
|| (grid_is_watery(grd[x][y]) && beam.flavour == BEAM_FIRE) )
if (grd[x][y] == DNGN_LAVA && beam.flavour == BEAM_COLD
|| grid_is_watery(grd[x][y]) && beam.flavour == BEAM_FIRE)
if ( (grd[x][y] == DNGN_LAVA && beam.flavour == BEAM_COLD)
|| ((grd[x][y] == DNGN_DEEP_WATER || grd[x][y] == DNGN_SHALLOW_WATER)
&& beam.flavour == BEAM_FIRE) )
if ( grd[x][y] == DNGN_LAVA && beam.flavour == BEAM_COLD
|| (grd[x][y] == DNGN_DEEP_WATER || grd[x][y] == DNGN_SHALLOW_WATER)
&& beam.flavour == BEAM_FIRE )
if (objs_vulnerable != OBJ_UNASSIGNED &&
mitm[igrd[x][y]].base_type == objs_vulnerable)
if (objs_vulnerable != OBJ_UNASSIGNED
&& mitm[igrd[x][y]].base_type == objs_vulnerable)
// poisoning
if (beam.name.find("poisoned") != std::string::npos
&& beam.flavour != BEAM_POISON
&& beam.flavour != BEAM_POISON_ARROW
&& !player_res_poison())
// handling of missiles
if (item && item->base_type == OBJ_MISSILES)
}
if (beam.name.find("throwing net") != std::string::npos)
{
player_caught_in_net();
was_affected = true;
}
if (beam.name.find("curare") != std::string::npos)
{
if (random2(100) < 90 - (3 * player_AC()))
else if (item->special == SPMSL_CURARE)
curare_hits_player( _beam_ouch_agent(beam), 1 + random2(3) );
was_affected = true;
if (random2(100) < 90 - (3 * player_AC()))
{
curare_hits_player( _beam_ouch_agent(beam), 1 + random2(3) );
was_affected = true;
}
return MON_KILL(beam.thrower) ? beam.beam_source :
beam.thrower == KILL_MISC ? MHITNOT :
MHITYOU;
return (MON_KILL(beam.thrower) ? beam.beam_source :
beam.thrower == KILL_MISC ? MHITNOT
: MHITYOU);
if (beam.name.find("poisoned") != std::string::npos
&& beam.flavour != BEAM_POISON
&& beam.flavour != BEAM_POISON_ARROW)
if (item)
int num_levels = 0;
// ench_power == AUTOMATIC_HIT if this is a poisoned needle.
if (beam.ench_power == AUTOMATIC_HIT
&& random2(100) < 90 - (3 * mon->ac))
{
num_levels = 2;
}
else if (random2(hurt_final) - random2(mon->ac) > 0)
if (item->base_type == OBJ_MISSILES
&& item->special == SPMSL_POISONED)
num_levels = 1;
}
int num_levels = 0;
// ench_power == AUTOMATIC_HIT if this is a poisoned needle.
if (beam.ench_power == AUTOMATIC_HIT
&& random2(100) < 90 - (3 * mon->ac))
{
num_levels = 2;
}
else if (random2(hurt_final) - random2(mon->ac) > 0)
{
num_levels = 1;
}
int num_success = 0;
if ( YOU_KILL(beam.thrower) )
{
const int skill_level = _name_to_skill_level(beam.name);
if ( skill_level + 25 > random2(50) )
num_success++;
if ( skill_level > random2(50) )
num_success++;
}
else
num_success = 1;
int num_success = 0;
if ( YOU_KILL(beam.thrower) )
{
const int skill_level = _name_to_skill_level(beam.name);
if ( skill_level + 25 > random2(50) )
num_success++;
if ( skill_level > random2(50) )
num_success++;
}
else
num_success = 1;
if ( num_success )
{
if ( num_success == 2 )
num_levels++;
poison_monster( mon, _whose_kill(beam), num_levels );
if ( num_success )
{
if ( num_success == 2 )
num_levels++;
poison_monster( mon, _whose_kill(beam), num_levels );
}
pbolt.type = dchar_glyph(DCHAR_FIRED_BURST);
pbolt.flavour = BEAM_ELECTRICITY;
pbolt.colour = LIGHTCYAN;
pbolt.type = dchar_glyph(DCHAR_FIRED_BURST);
pbolt.flavour = BEAM_ELECTRICITY;
pbolt.colour = LIGHTCYAN;
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.colour = WHITE;
ex_size = 2 + (random2( pbolt.ench_power ) > 75);
pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);
pbolt.colour = WHITE;
ex_size = 2 + (random2( pbolt.ench_power ) > 75);