thrown potions can sometimes hit saddle

This commit is contained in:
nethack.allison
2004-01-31 14:59:36 +00:00
parent 5d32958e04
commit 1e8c99bcc0
2 changed files with 99 additions and 3 deletions
+1
View File
@@ -56,6 +56,7 @@ player polymorphed as a ceiling hider cannot reach the floor, but
trappers do not hide on the ceiling trappers do not hide on the ceiling
non-magical whistles do not work underwater non-magical whistles do not work underwater
try to restrict whistles and musical instruments to monsters that can blow try to restrict whistles and musical instruments to monsters that can blow
thrown potions can sometimes hit a steed's saddle
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes
+98 -3
View File
@@ -978,6 +978,10 @@ boolean your_fault;
register const char *botlnam = bottlename(); register const char *botlnam = bottlename();
boolean isyou = (mon == &youmonst); boolean isyou = (mon == &youmonst);
int distance; int distance;
#ifdef STEED
struct obj *saddle = (struct obj *)0;
boolean hit_saddle = FALSE;
#endif
if(isyou) { if(isyou) {
distance = 0; distance = 0;
@@ -985,12 +989,29 @@ boolean your_fault;
botlnam, body_part(HEAD)); botlnam, body_part(HEAD));
losehp(Maybe_Half_Phys(rnd(2)), "thrown potion", KILLED_BY_AN); losehp(Maybe_Half_Phys(rnd(2)), "thrown potion", KILLED_BY_AN);
} else { } else {
#ifdef STEED
/* sometimes it hits the saddle */
if(((mon->misc_worn_check & W_SADDLE) &&
(saddle = which_armor(mon, W_SADDLE))) &&
(!rn2(10) ||
(obj->otyp == POT_WATER &&
((rnl(10) > 7 && obj->cursed) ||
(rnl(10) < 4 && obj->blessed) || !rn2(3)))))
hit_saddle = TRUE;
#endif
distance = distu(mon->mx,mon->my); distance = distu(mon->mx,mon->my);
if (!cansee(mon->mx,mon->my)) pline("Crash!"); if (!cansee(mon->mx,mon->my)) pline("Crash!");
else { else {
char *mnam = mon_nam(mon); char *mnam = mon_nam(mon);
char buf[BUFSZ]; char buf[BUFSZ];
#ifdef STEED
if(hit_saddle && saddle) {
Sprintf(buf, "%s saddle", s_suffix(x_monnam(mon,
ARTICLE_THE, (char *)0,
(SUPPRESS_IT|SUPPRESS_SADDLE), FALSE)));
} else
#endif
if(has_head(mon->data)) { if(has_head(mon->data)) {
Sprintf(buf, "%s %s", Sprintf(buf, "%s %s",
s_suffix(mnam), s_suffix(mnam),
@@ -1001,12 +1022,20 @@ boolean your_fault;
pline_The("%s crashes on %s and breaks into shards.", pline_The("%s crashes on %s and breaks into shards.",
botlnam, buf); botlnam, buf);
} }
if(rn2(5) && mon->mhp > 1) if(rn2(5) && mon->mhp > 1
#ifdef STEED
&& !hit_saddle
#endif
)
mon->mhp--; mon->mhp--;
} }
/* oil doesn't instantly evaporate */ /* oil doesn't instantly evaporate; Neither does a saddle hit */
if (obj->otyp != POT_OIL && cansee(mon->mx,mon->my)) if (obj->otyp != POT_OIL &&
#ifdef STEED
!hit_saddle &&
#endif
cansee(mon->mx,mon->my))
pline("%s.", Tobjnam(obj, "evaporate")); pline("%s.", Tobjnam(obj, "evaporate"));
if (isyou) { if (isyou) {
@@ -1030,6 +1059,72 @@ boolean your_fault;
} }
break; break;
} }
#ifdef STEED
} else if (hit_saddle && saddle) {
const char *tmp;
char buf[BUFSZ];
char *mnam = x_monnam(mon, ARTICLE_THE, (char *)0,
(SUPPRESS_IT|SUPPRESS_SADDLE), FALSE);
boolean affected = FALSE;
boolean useeit = !Blind && canseemon(mon) && cansee(mon->mx,mon->my);
Sprintf(buf, "%s", upstart(s_suffix(mnam)));
switch (obj->otyp) {
case POT_WATER:
if (obj->blessed) {
if (saddle->cursed) {
if (useeit)
pline("%s %s %s.",
buf,
aobjnam(saddle, "softly glow"),
hcolor(NH_AMBER));
uncurse(saddle);
saddle->bknown=1;
affected = TRUE;
} else if(!saddle->blessed) {
if (useeit) {
tmp = hcolor(NH_LIGHT_BLUE);
pline("%s %s with a%s %s aura.",
buf,
aobjnam(saddle, "softly glow"),
index(vowels, *tmp) ? "n" : "", tmp);
}
bless(saddle);
saddle->bknown=1;
affected = TRUE;
}
} else if (obj->cursed) {
if (saddle->blessed) {
if (useeit)
pline("%s %s %s.",
buf,
aobjnam(saddle, "glow"),
hcolor((const char *)"brown"));
unbless(saddle);
saddle->bknown=1;
affected = TRUE;
} else if(!saddle->cursed) {
if (useeit) {
tmp = hcolor(NH_BLACK);
pline("%s %s with a%s %s aura.",
buf,
aobjnam(saddle, "glow"),
index(vowels, *tmp) ? "n" : "", tmp);
}
curse(saddle);
saddle->bknown=1;
affected = TRUE;
}
}
break;
case POT_POLYMORPH:
/* Do we allow the saddle to polymorph? */
break;
}
if (useeit && !affected) pline("%s %s wet.",
buf, aobjnam(saddle,"get"));
#endif
} else { } else {
boolean angermon = TRUE; boolean angermon = TRUE;