Merge branch 'NetHack-3.6.2'
This commit is contained in:
35
src/dokick.c
35
src/dokick.c
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 dokick.c $NHDT-Date: 1547086527 2019/01/10 02:15:27 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.129 $ */
|
||||
/* NetHack 3.6 dokick.c $NHDT-Date: 1548209738 2019/01/23 02:15:38 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.130 $ */
|
||||
/* Copyright (c) Izchak Miller, Mike Stephenson, Steve Linhart, 1989. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -23,15 +23,15 @@ STATIC_DCL void FDECL(drop_to, (coord *, SCHAR_P));
|
||||
|
||||
static const char kick_passes_thru[] = "kick passes harmlessly through";
|
||||
|
||||
/* kicking damage when not poly'd into a form with a kick attack */
|
||||
STATIC_OVL void
|
||||
kickdmg(mon, clumsy)
|
||||
register struct monst *mon;
|
||||
register boolean clumsy;
|
||||
struct monst *mon;
|
||||
boolean clumsy;
|
||||
{
|
||||
register int mdx, mdy;
|
||||
register int dmg = (ACURRSTR + ACURR(A_DEX) + ACURR(A_CON)) / 15;
|
||||
int kick_skill = P_NONE;
|
||||
int blessed_foot_damage = 0;
|
||||
int mdx, mdy;
|
||||
int dmg = (ACURRSTR + ACURR(A_DEX) + ACURR(A_CON)) / 15;
|
||||
int specialdmg, kick_skill = P_NONE;
|
||||
boolean trapkilled = FALSE;
|
||||
|
||||
if (uarmf && uarmf->otyp == KICKING_BOOTS)
|
||||
@@ -45,15 +45,13 @@ register boolean clumsy;
|
||||
if (thick_skinned(mon->data))
|
||||
dmg = 0;
|
||||
|
||||
/* attacking a shade is useless */
|
||||
/* attacking a shade is normally useless */
|
||||
if (mon->data == &mons[PM_SHADE])
|
||||
dmg = 0;
|
||||
|
||||
if ((is_undead(mon->data) || is_demon(mon->data) || is_vampshifter(mon))
|
||||
&& uarmf && uarmf->blessed)
|
||||
blessed_foot_damage = 1;
|
||||
specialdmg = special_dmgval(&youmonst, mon, W_ARMF, (long *) 0);
|
||||
|
||||
if (mon->data == &mons[PM_SHADE] && !blessed_foot_damage) {
|
||||
if (mon->data == &mons[PM_SHADE] && !specialdmg) {
|
||||
pline_The("%s.", kick_passes_thru);
|
||||
/* doesn't exercise skill or abuse alignment or frighten pet,
|
||||
and shades have no passive counterattack */
|
||||
@@ -85,8 +83,7 @@ register boolean clumsy;
|
||||
/* a good kick exercises your dex */
|
||||
exercise(A_DEX, TRUE);
|
||||
}
|
||||
if (blessed_foot_damage)
|
||||
dmg += rnd(4);
|
||||
dmg += specialdmg; /* for blessed (or hypothetically, silver) boots */
|
||||
if (uarmf)
|
||||
dmg += uarmf->spe;
|
||||
dmg += u.udaminc; /* add ring(s) of increase damage */
|
||||
@@ -184,7 +181,7 @@ xchar x, y;
|
||||
*/
|
||||
if (Upolyd && attacktype(g.youmonst.data, AT_KICK)) {
|
||||
struct attack *uattk;
|
||||
int sum, kickdieroll, armorpenalty,
|
||||
int sum, kickdieroll, armorpenalty, specialdmg,
|
||||
attknum = 0,
|
||||
tmp = find_roll_to_hit(mon, AT_KICK, (struct obj *) 0, &attknum,
|
||||
&armorpenalty);
|
||||
@@ -200,14 +197,16 @@ xchar x, y;
|
||||
if (uattk->aatyp != AT_KICK)
|
||||
continue;
|
||||
|
||||
if (mon->data == &mons[PM_SHADE] && (!uarmf || !uarmf->blessed)) {
|
||||
kickdieroll = rnd(20);
|
||||
specialdmg = special_dmgval(&youmonst, mon, W_ARMF, (long *) 0);
|
||||
if (mon->data == &mons[PM_SHADE] && !specialdmg) {
|
||||
/* doesn't matter whether it would have hit or missed,
|
||||
and shades have no passive counterattack */
|
||||
Your("%s %s.", kick_passes_thru, mon_nam(mon));
|
||||
break; /* skip any additional kicks */
|
||||
} else if (tmp > (kickdieroll = rnd(20))) {
|
||||
} else if (tmp > kickdieroll) {
|
||||
You("kick %s.", mon_nam(mon));
|
||||
sum = damageum(mon, uattk);
|
||||
sum = damageum(mon, uattk, specialdmg);
|
||||
(void) passive(mon, uarmf, (boolean) (sum > 0),
|
||||
(sum != 2), AT_KICK, FALSE);
|
||||
if (sum == 2)
|
||||
|
||||
Reference in New Issue
Block a user