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
|
only give monk's "cumbersome armor" message when the armor penalty causes
|
||||||
an attack to miss
|
an attack to miss
|
||||||
identified touchstone can rub on gold like the data.base entry says
|
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
|
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 struct attack *FDECL(getmattk, (struct permonst *,int,int *,struct attack *));
|
||||||
E int FDECL(mattacku, (struct monst *));
|
E int FDECL(mattacku, (struct monst *));
|
||||||
E int FDECL(magic_negation, (struct monst *));
|
E int FDECL(magic_negation, (struct monst *));
|
||||||
|
E boolean NDECL(gulp_blnd_check);
|
||||||
E int FDECL(gazemu, (struct monst *,struct attack *));
|
E int FDECL(gazemu, (struct monst *,struct attack *));
|
||||||
E void FDECL(mdamageu, (struct monst *,int));
|
E void FDECL(mdamageu, (struct monst *,int));
|
||||||
E int FDECL(could_seduce, (struct monst *,struct monst *,struct attack *));
|
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) {
|
if (Glib) {
|
||||||
Glib = 0;
|
Glib = 0;
|
||||||
You("wipe off your %s.", makeplural(body_part(HAND)));
|
You("wipe off your %s.", makeplural(body_part(HAND)));
|
||||||
return 1;
|
return 1;
|
||||||
} else if(u.ucreamed) {
|
} else if(u.ucreamed) {
|
||||||
Blinded -= u.ucreamed;
|
Blinded -= u.ucreamed;
|
||||||
u.ucreamed = 0;
|
u.ucreamed = 0;
|
||||||
|
|
||||||
if (!Blinded) {
|
if (!Blinded) {
|
||||||
pline("You've got the glop off.");
|
pline("You've got the glop off.");
|
||||||
Blinded = 1;
|
if (!gulp_blnd_check()) {
|
||||||
make_blinded(0L,TRUE);
|
Blinded = 1;
|
||||||
} else {
|
make_blinded(0L,TRUE);
|
||||||
Your("%s feels clean now.", body_part(FACE));
|
|
||||||
}
|
}
|
||||||
return 1;
|
} else {
|
||||||
|
Your("%s feels clean now.", body_part(FACE));
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
Your("%s and %s are already clean.",
|
Your("%s and %s are already clean.",
|
||||||
@@ -1476,7 +1478,10 @@ struct obj *obj;
|
|||||||
|
|
||||||
/* collect property troubles */
|
/* collect property troubles */
|
||||||
if (Sick) prop_trouble(SICK);
|
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 (HHallucination) prop_trouble(HALLUC);
|
||||||
if (Vomiting) prop_trouble(VOMITING);
|
if (Vomiting) prop_trouble(VOMITING);
|
||||||
if (HConfusion) prop_trouble(CONFUSION);
|
if (HConfusion) prop_trouble(CONFUSION);
|
||||||
|
|||||||
6
src/do.c
6
src/do.c
@@ -1580,8 +1580,10 @@ wipeoff()
|
|||||||
if (!Blinded) {
|
if (!Blinded) {
|
||||||
pline("You've got the glop off.");
|
pline("You've got the glop off.");
|
||||||
u.ucreamed = 0;
|
u.ucreamed = 0;
|
||||||
Blinded = 1;
|
if (!gulp_blnd_check()) {
|
||||||
make_blinded(0L,TRUE);
|
Blinded = 1;
|
||||||
|
make_blinded(0L,TRUE);
|
||||||
|
}
|
||||||
return(0);
|
return(0);
|
||||||
} else if (!u.ucreamed) {
|
} else if (!u.ucreamed) {
|
||||||
Your("%s feels clean now.", body_part(FACE));
|
Your("%s feels clean now.", body_part(FACE));
|
||||||
|
|||||||
@@ -912,8 +912,10 @@ register struct obj *otmp;
|
|||||||
if (Punished) set_bc(0);
|
if (Punished) set_bc(0);
|
||||||
}
|
}
|
||||||
} else if (was_blind) {
|
} else if (was_blind) {
|
||||||
changed = TRUE; /* !Blind */
|
if (!gulp_blnd_check()) {
|
||||||
You("can see again.");
|
changed = TRUE; /* !Blind */
|
||||||
|
You("can see again.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (changed) {
|
if (changed) {
|
||||||
/* blindness has just been toggled */
|
/* blindness has just been toggled */
|
||||||
|
|||||||
@@ -1638,7 +1638,9 @@ register struct obj *otmp;
|
|||||||
you_unwere(TRUE);
|
you_unwere(TRUE);
|
||||||
break;
|
break;
|
||||||
case CARROT:
|
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;
|
break;
|
||||||
case FORTUNE_COOKIE:
|
case FORTUNE_COOKIE:
|
||||||
outrumor(bcsign(otmp), BY_COOKIE);
|
outrumor(bcsign(otmp), BY_COOKIE);
|
||||||
|
|||||||
18
src/mhitu.c
18
src/mhitu.c
@@ -1588,6 +1588,24 @@ dopois:
|
|||||||
#endif /* OVL1 */
|
#endif /* OVL1 */
|
||||||
#ifdef OVLB
|
#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
|
STATIC_OVL int
|
||||||
gulpmu(mtmp, mattk) /* monster swallows you, or damage if u.uswallow */
|
gulpmu(mtmp, mattk) /* monster swallows you, or damage if u.uswallow */
|
||||||
register struct monst *mtmp;
|
register struct monst *mtmp;
|
||||||
|
|||||||
@@ -187,7 +187,10 @@ in_trouble()
|
|||||||
}
|
}
|
||||||
#endif
|
#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++)
|
for(i=0; i<A_MAX; i++)
|
||||||
if(ABASE(i) < AMAX(i)) return(TROUBLE_POISONED);
|
if(ABASE(i) < AMAX(i)) return(TROUBLE_POISONED);
|
||||||
if(Wounded_legs
|
if(Wounded_legs
|
||||||
|
|||||||
Reference in New Issue
Block a user