B01003 - blindfold vs dust vortex
This started out as a change to address the strange sequence of messages if you remove a blindfold while engulfed in a dust vortex. That is addressed by a new function that can be called in such situations. Calls to this function were added in all the cases where the can_blnd() engulfing conditions end as a result of player action. There are some other cases that end ucreamed or usleep, but they happen between turns and shouldn't need extra handling. While I was at it, I noticed that a unicorn horn or prayer would cure blindness even while engulfed in a dust vortex. This is useless, because you immediately get blind again the next turn. So, I added checks to avoid doing this. Finally, it didn't make sense for eating a carrot to cure your blindness in these situations either, only for it to return immediately.
This commit is contained in:
@@ -22,6 +22,10 @@ apply weapon skill to-hit bonus or penalty to bare-handed attacks
|
||||
only give monk's "cumbersome armor" message when the armor penalty causes
|
||||
an attack to miss
|
||||
identified touchstone can rub on gold like the data.base entry says
|
||||
dust vortex-induced blindness should kick in immediately when blindfold
|
||||
is removed or glop is wiped off
|
||||
prayer/unicorn-horn won't fix blindness while still engulfed in a dust
|
||||
vortex since it will just return immediately
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific Fixes
|
||||
|
||||
@@ -960,6 +960,7 @@ E void FDECL(expels, (struct monst *,struct permonst *,BOOLEAN_P));
|
||||
E struct attack *FDECL(getmattk, (struct permonst *,int,int *,struct attack *));
|
||||
E int FDECL(mattacku, (struct monst *));
|
||||
E int FDECL(magic_negation, (struct monst *));
|
||||
E boolean NDECL(gulp_blnd_check);
|
||||
E int FDECL(gazemu, (struct monst *,struct attack *));
|
||||
E void FDECL(mdamageu, (struct monst *,int));
|
||||
E int FDECL(could_seduce, (struct monst *,struct monst *,struct attack *));
|
||||
|
||||
31
src/apply.c
31
src/apply.c
@@ -134,21 +134,23 @@ use_towel(obj)
|
||||
}
|
||||
|
||||
if (Glib) {
|
||||
Glib = 0;
|
||||
You("wipe off your %s.", makeplural(body_part(HAND)));
|
||||
return 1;
|
||||
Glib = 0;
|
||||
You("wipe off your %s.", makeplural(body_part(HAND)));
|
||||
return 1;
|
||||
} else if(u.ucreamed) {
|
||||
Blinded -= u.ucreamed;
|
||||
u.ucreamed = 0;
|
||||
Blinded -= u.ucreamed;
|
||||
u.ucreamed = 0;
|
||||
|
||||
if (!Blinded) {
|
||||
pline("You've got the glop off.");
|
||||
Blinded = 1;
|
||||
make_blinded(0L,TRUE);
|
||||
} else {
|
||||
Your("%s feels clean now.", body_part(FACE));
|
||||
if (!Blinded) {
|
||||
pline("You've got the glop off.");
|
||||
if (!gulp_blnd_check()) {
|
||||
Blinded = 1;
|
||||
make_blinded(0L,TRUE);
|
||||
}
|
||||
return 1;
|
||||
} else {
|
||||
Your("%s feels clean now.", body_part(FACE));
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
Your("%s and %s are already clean.",
|
||||
@@ -1476,7 +1478,10 @@ struct obj *obj;
|
||||
|
||||
/* collect property troubles */
|
||||
if (Sick) prop_trouble(SICK);
|
||||
if (Blinded > (long)u.ucreamed) prop_trouble(BLINDED);
|
||||
if (Blinded > (long)u.ucreamed &&
|
||||
!(u.uswallow &&
|
||||
attacktype_fordmg(u.ustuck->data, AT_ENGL, AD_BLND)))
|
||||
prop_trouble(BLINDED);
|
||||
if (HHallucination) prop_trouble(HALLUC);
|
||||
if (Vomiting) prop_trouble(VOMITING);
|
||||
if (HConfusion) prop_trouble(CONFUSION);
|
||||
|
||||
6
src/do.c
6
src/do.c
@@ -1580,8 +1580,10 @@ wipeoff()
|
||||
if (!Blinded) {
|
||||
pline("You've got the glop off.");
|
||||
u.ucreamed = 0;
|
||||
Blinded = 1;
|
||||
make_blinded(0L,TRUE);
|
||||
if (!gulp_blnd_check()) {
|
||||
Blinded = 1;
|
||||
make_blinded(0L,TRUE);
|
||||
}
|
||||
return(0);
|
||||
} else if (!u.ucreamed) {
|
||||
Your("%s feels clean now.", body_part(FACE));
|
||||
|
||||
@@ -912,8 +912,10 @@ register struct obj *otmp;
|
||||
if (Punished) set_bc(0);
|
||||
}
|
||||
} else if (was_blind) {
|
||||
changed = TRUE; /* !Blind */
|
||||
You("can see again.");
|
||||
if (!gulp_blnd_check()) {
|
||||
changed = TRUE; /* !Blind */
|
||||
You("can see again.");
|
||||
}
|
||||
}
|
||||
if (changed) {
|
||||
/* blindness has just been toggled */
|
||||
|
||||
@@ -1638,7 +1638,9 @@ register struct obj *otmp;
|
||||
you_unwere(TRUE);
|
||||
break;
|
||||
case CARROT:
|
||||
make_blinded((long)u.ucreamed,TRUE);
|
||||
if (!u.uswallow ||
|
||||
!attacktype_fordmg(u.ustuck->data, AT_ENGL, AD_BLND))
|
||||
make_blinded((long)u.ucreamed,TRUE);
|
||||
break;
|
||||
case FORTUNE_COOKIE:
|
||||
outrumor(bcsign(otmp), BY_COOKIE);
|
||||
|
||||
18
src/mhitu.c
18
src/mhitu.c
@@ -1588,6 +1588,24 @@ dopois:
|
||||
#endif /* OVL1 */
|
||||
#ifdef OVLB
|
||||
|
||||
/* An interface for use when taking a blindfold off, for example,
|
||||
* to see if an engulfing attack should immediately take affect, like
|
||||
* a passive attack. TRUE if engulfing blindness occurred */
|
||||
boolean
|
||||
gulp_blnd_check()
|
||||
{
|
||||
struct attack *mattk;
|
||||
|
||||
if (!Blinded && u.uswallow &&
|
||||
(mattk = attacktype_fordmg(u.ustuck->data, AT_ENGL, AD_BLND)) &&
|
||||
can_blnd(u.ustuck, &youmonst, mattk->aatyp, (struct obj*)0)) {
|
||||
++u.uswldtim; /* compensate for gulpmu change */
|
||||
(void) gulpmu(u.ustuck, mattk);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
STATIC_OVL int
|
||||
gulpmu(mtmp, mattk) /* monster swallows you, or damage if u.uswallow */
|
||||
register struct monst *mtmp;
|
||||
|
||||
@@ -187,7 +187,10 @@ in_trouble()
|
||||
}
|
||||
#endif
|
||||
|
||||
if (Blinded > 1 && haseyes(youmonst.data)) return(TROUBLE_BLIND);
|
||||
if (Blinded > 1 && haseyes(youmonst.data) &&
|
||||
(!u.uswallow ||
|
||||
!attacktype_fordmg(u.ustuck->data, AT_ENGL, AD_BLND)))
|
||||
return(TROUBLE_BLIND);
|
||||
for(i=0; i<A_MAX; i++)
|
||||
if(ABASE(i) < AMAX(i)) return(TROUBLE_POISONED);
|
||||
if(Wounded_legs
|
||||
|
||||
Reference in New Issue
Block a user