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 hostileselse if (mon->behaviour == BEH_FLEE){mprf(MSGCH_EXAMINE, "%s is retreating.",mon->pronoun(PRONOUN_CAP).c_str());}// hostile with target != youelse 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 hostileselse if (mon->behaviour == BEH_FLEE){mprf(MSGCH_EXAMINE, "%s is retreating.",mon->pronoun(PRONOUN_CAP).c_str());}// hostile with target != youelse 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" beamspbolt.flavour = BEAM_MAGIC; // default for "0" beamspbolt.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" beamspbolt.flavour = BEAM_MAGIC; // default for "0" beamspbolt.ench_power = power;
pbolt.is_beam = false; // default for all beams.pbolt.is_tracer = false; // default for all player beamspbolt.thrower = KILL_YOU_MISSILE; // missile from playerpbolt.aux_source.clear(); // additional source info, unused
pbolt.is_beam = false; // default for all beams.pbolt.is_tracer = false; // default for all player beamspbolt.thrower = KILL_YOU_MISSILE; // missile from playerpbolt.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: 5pbolt.hit = 8 + power / 10; // 25: 10pbolt.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: 5pbolt.hit = 8 + power / 10; // 25: 10pbolt.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: 1d8pbolt.hit = AUTOMATIC_HIT; // hits alwayspbolt.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: 1d8pbolt.hit = AUTOMATIC_HIT; // hits alwayspbolt.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: 1d8pbolt.hit = 8 + power / 5; // 25: 13pbolt.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: 1d8pbolt.hit = 8 + power / 5; // 25: 13pbolt.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 beampbolt.damage = dice_def( 1, 3 + random2(power) / 2 ); // 25: 1d11pbolt.hit = 8 + power / 7; // 25: 11pbolt.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 beampbolt.damage = dice_def( 1, 3 + random2(power) / 2 );// 25: 1d11pbolt.hit = 8 + power / 7; // 25: 11pbolt.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: 1d9pbolt.ench_power *= 3;
pbolt.name = "0";pbolt.flavour = BEAM_DISINTEGRATION;pbolt.range = 7 + random2(8);pbolt.damage = dice_def( 1, 4 + power / 5 ); // 25: 1d9pbolt.ench_power *= 3;
pbolt.name = "0";pbolt.flavour = BEAM_PAIN;pbolt.range = 7 + random2(8);pbolt.damage = dice_def( 1, 4 + power / 5 ); // 25: 1d9pbolt.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: 1d9pbolt.ench_power *= 7;pbolt.ench_power /= 2;
pbolt.damage = dice_def( 1, 8 + power / 4 ); // 25: 1d14pbolt.hit = 7 + power / 6; // 25: 11pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);pbolt.flavour = BEAM_FIRE;
pbolt.damage = dice_def( 1, 8 + power / 4 ); // 25: 1d14pbolt.hit = 7 + power / 6; // 25: 11pbolt.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: 1d14pbolt.hit = 8 + power / 5; // 25: 13pbolt.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: 2d12pbolt.hit = 13 + power / 10; // 25: 15pbolt.type = dchar_glyph(DCHAR_FIRED_BOLT);pbolt.flavour = BEAM_FRAG; // extra AC resist
pbolt.damage = dice_def( 2, 4 + power / 3 ); // 25: 2d12pbolt.hit = 13 + power / 10; // 25: 15pbolt.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: 53pbolt.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: 53pbolt.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: 2d9pbolt.hit = 8 + power / 10; // 25: 10 50: 13pbolt.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: 2d9pbolt.hit = 8 + power / 10; // 25: 10 50: 13pbolt.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: 2d9pbolt.hit = 8 + power / 10; // 50: 10 50: 13pbolt.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: 2d9pbolt.hit = 8 + power / 10; // 25: 10 50: 13pbolt.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: 2d12pbolt.hit = 8 + power / 10; // 25: 10 50: 13pbolt.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: 2d12pbolt.hit = 8 + power / 10; // 25: 10 50: 13pbolt.type = dchar_glyph(DCHAR_FIRED_MISSILE);pbolt.flavour = BEAM_MMISSILE; // irresistible
pbolt.name = "sticky flame"; // extra damagepbolt.colour = RED;pbolt.range = 8 + random2(5);pbolt.damage = dice_def( 2, 3 + power / 12 ); // 50: 2d7 100: 2d11pbolt.hit = 11 + power / 10; // 50: 16 100: 21pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_FIRE;
pbolt.name = "sticky flame"; // extra damagepbolt.colour = RED;pbolt.range = 8 + random2(5);// 50: 2d7 100: 2d11pbolt.damage = dice_def( 2, 3 + power / 12 );// 50: 16 100: 21pbolt.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: 24pbolt.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: 24pbolt.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: 17pbolt.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: 17pbolt.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: 14pbolt.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: 14pbolt.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: 14pbolt.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: 14pbolt.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: 14pbolt.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: 14pbolt.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: 13pbolt.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: 13pbolt.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: 13pbolt.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: 13pbolt.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: 13pbolt.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: 13pbolt.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: 15pbolt.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: 15pbolt.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 beampbolt.damage = calc_dice( 1, 10 + (power * 3) / 5 );pbolt.hit = 7 + random2(power) / 20; // 50: 7-9 100: 7-12pbolt.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 beampbolt.damage = calc_dice( 1, 10 + (power * 3) / 5 );pbolt.hit = 7 + random2(power) / 20; // 50: 7-9 100: 7-12pbolt.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: 40pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_FIRE; // firepbolt.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: 40pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_FIRE; // firepbolt.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 damagepbolt.hit = 40; // hit: 40pbolt.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 damagepbolt.hit = 40; // hit: 40pbolt.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: 20pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_FRAG; // extra AC resistpbolt.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: 20pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_FRAG; // extra AC resistpbolt.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: 16pbolt.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: 16pbolt.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: 30pbolt.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: 30pbolt.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 damagepbolt.hit = 20 + power / 10; // 50: 25 100: 30pbolt.ench_power = power; // used for radiuspbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_ICE; // half resistedpbolt.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 damagepbolt.hit = 20 + power / 10; // 50: 25 100: 30pbolt.ench_power = power; // used for radiuspbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_ICE; // half resistedpbolt.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: 25pbolt.hit = 5 + random2( 1 + power / 3 ); // max hit: 19pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_POISON;
pbolt.damage = dice_def( 1, 4 + power / 2 ); // max dam: 25pbolt.hit = 5 + random2( 1 + power / 3 ); // max hit: 19pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_POISON;
pbolt.damage = dice_def( 3, 4 + power / 3 ); // max dam: 60pbolt.hit = 8 + random2( 1 + power / 3 ); // max hit: 25pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_FIRE;
pbolt.damage = dice_def( 3, 4 + power / 3 ); // max dam: 60pbolt.hit = 8 + random2( 1 + power / 3 ); // max hit: 25pbolt.type = dchar_glyph(DCHAR_FIRED_ZAP);pbolt.flavour = BEAM_FIRE;
pbolt.damage = dice_def( 3, 4 + power / 3 ); // max dam: 39pbolt.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: 39pbolt.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: 36pbolt.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: 36pbolt.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: 18pbolt.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: 18pbolt.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: 36pbolt.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: 36pbolt.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: 27pbolt.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: 1500pbolt.hit = 1500; // hit: 1500pbolt.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: 1500pbolt.hit = 1500; // hit: 1500pbolt.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)
// poisoningif (beam.name.find("poisoned") != std::string::npos&& beam.flavour != BEAM_POISON&& beam.flavour != BEAM_POISON_ARROW&& !player_res_poison())
// handling of missilesif (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++;}elsenum_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++;}elsenum_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);