STATIC_DCL boolean FDECL(u_slip_free, (struct monst *, struct attack *));
STATIC_DCL int FDECL(passiveum, (struct permonst *, struct monst *,
struct attack *));
-STATIC_DCL void FDECL(mayberem, (struct obj *, const char *));
+STATIC_DCL void FDECL(mayberem, (const char *, struct obj *, const char *));
STATIC_DCL boolean FDECL(diseasemu, (struct permonst *));
STATIC_DCL int FDECL(hitmu, (struct monst *, struct attack *));
STATIC_DCL int FDECL(gulpmu, (struct monst *, struct attack *));
if ((compat = could_seduce(mtmp, &youmonst, mattk)) != 0
&& !mtmp->mcan && !mtmp->mspec_used) {
pline("%s %s you %s.", Monst_name,
- Blind ? "talks to" : "smiles at",
+ !Blind ? "smiles at" : !Deaf ? "talks to" : "touches",
(compat == 2) ? "engagingly" : "seductively");
} else {
switch (mattk->aatyp) {
/* maybe it's attacking an image around the corner? */
compat = ((mattk->adtyp == AD_SEDU || mattk->adtyp == AD_SSEX)
- && could_seduce(mtmp, &youmonst, (struct attack *) 0));
+ ? could_seduce(mtmp, &youmonst, (struct attack *) 0) : 0);
Monst_name = Monnam(mtmp);
if (!mtmp->mcansee || (Invis && !perceives(mtmp->data))) {
}
} else if (Displaced) {
+ /* give 'displaced' message even if hero is Blind */
if (compat)
pline("%s smiles %s at your %sdisplaced image...", Monst_name,
(compat == 2) ? "engagingly" : "seductively",
Invis ? "invisible " : "");
else
pline("%s strikes at your %sdisplaced image and misses you!",
- /* Note: if you're both invisible and displaced,
- * only monsters which see invisible will attack your
- * displaced image, since the displaced image is also
- * invisible.
- */
+ /* Note: if you're both invisible and displaced, only
+ * monsters which see invisible will attack your displaced
+ * image, since the displaced image is also invisible. */
Monst_name, Invis ? "invisible " : "");
} else if (Underwater) {
} else if (dmgtype(youmonst.data, AD_SEDU)
|| (SYSOPT_SEDUCE && dmgtype(youmonst.data, AD_SSEX))) {
pline("%s %s.", Monnam(mtmp),
- mtmp->minvent
+ Deaf ? "says something but you can't hear it"
+ : mtmp->minvent
? "brags about the goods some dungeon explorer provided"
: "makes some remarks about how difficult theft is lately");
if (!tele_restrict(mtmp))
if (can_blnd(mtmp, &youmonst, mattk->aatyp, (struct obj *) 0)) {
if (!Blind) {
long was_blinded = Blinded;
+
if (!Blinded)
You_cant("see in here!");
make_blinded((long) tmp, FALSE);
{
struct obj *ring, *nring;
boolean fem = (mon->data == &mons[PM_SUCCUBUS]); /* otherwise incubus */
+ boolean seewho, naked; /* True iff no armor */
int attr_tot, tried_gloves = 0;
- char qbuf[QBUFSZ];
+ char qbuf[QBUFSZ], Who[QBUFSZ];
if (mon->mcan || mon->mspec_used) {
pline("%s acts as though %s has got a %sheadache.", Monnam(mon),
mhe(mon), mon->mcan ? "severe " : "");
return 0;
}
-
if (unconscious()) {
pline("%s seems dismayed at your lack of response.", Monnam(mon));
return 0;
}
-
- if (Blind)
- pline("It caresses you...");
+ seewho = canseemon(mon);
+ if (!seewho)
+ pline("Someone caresses you...");
else
You_feel("very attracted to %s.", mon_nam(mon));
+ /* cache the seducer's name in a local buffer */
+ Strcpy(Who, (!seewho ? (fem ? "She" : "He") : Monnam(mon)));
+
/* if in the process of putting armor on or taking armor off,
interrupt that activity now */
(void) stop_donning((struct obj *) 0);
if (ring->owornmask && uarmg) {
/* don't take off worn ring if gloves are in the way */
if (!tried_gloves++)
- mayberem(uarmg, "gloves");
+ mayberem(Who, uarmg, "gloves");
if (uarmg)
continue; /* next ring might not be worn */
}
- if (rn2(20) < ACURR(A_CHA)) {
+ /* confirmation prompt when charisma is high bypassed if deaf */
+ if (!Deaf && rn2(20) < ACURR(A_CHA)) {
(void) safe_qbuf(qbuf, "\"That ",
" looks pretty. May I have it?\"", ring,
xname, simpleonames, "ring");
continue;
} else
pline("%s decides she'd like %s, and takes it.",
- Blind ? "She" : Monnam(mon), yname(ring));
+ Who, yname(ring));
makeknown(RIN_ADORNMENT);
- if (ring == uleft || ring == uright)
- Ring_gone(ring);
- if (ring == uwep)
- setuwep((struct obj *) 0);
- if (ring == uswapwep)
- setuswapwep((struct obj *) 0);
- if (ring == uquiver)
- setuqwep((struct obj *) 0);
+ /* might be in left or right ring slot or weapon/alt-wep/quiver */
+ if (ring->owornmask)
+ remove_worn_item(ring, FALSE);
freeinv(ring);
(void) mpickobj(mon, ring);
} else {
if (uarmg) {
/* don't put on ring if gloves are in the way */
if (!tried_gloves++)
- mayberem(uarmg, "gloves");
+ mayberem(Who, uarmg, "gloves");
if (uarmg)
break; /* no point trying further rings */
}
- if (rn2(20) < ACURR(A_CHA)) {
+ /* confirmation prompt when charisma is high bypassed if deaf */
+ if (!Deaf && rn2(20) < ACURR(A_CHA)) {
(void) safe_qbuf(qbuf, "\"That ",
- " looks pretty. Would you wear it for me?\"",
+ " looks pretty. Would you wear it for me?\"",
ring, xname, simpleonames, "ring");
makeknown(RIN_ADORNMENT);
if (yn(qbuf) == 'n')
continue;
} else {
pline("%s decides you'd look prettier wearing %s,",
- Blind ? "He" : Monnam(mon), yname(ring));
+ Who, yname(ring));
pline("and puts it on your finger.");
}
makeknown(RIN_ADORNMENT);
if (!uright) {
pline("%s puts %s on your right %s.",
- Blind ? "He" : Monnam(mon), the(xname(ring)),
- body_part(HAND));
+ Who, the(xname(ring)), body_part(HAND));
setworn(ring, RIGHT_RING);
} else if (!uleft) {
pline("%s puts %s on your left %s.",
- Blind ? "He" : Monnam(mon), the(xname(ring)),
- body_part(HAND));
+ Who, the(xname(ring)), body_part(HAND));
setworn(ring, LEFT_RING);
} else if (uright && uright->otyp != RIN_ADORNMENT) {
- pline("%s replaces %s with %s.", Blind ? "He" : Monnam(mon),
- yname(uright), yname(ring));
+ pline("%s replaces %s with %s.",
+ Who, yname(uright), yname(ring));
Ring_gone(uright);
setworn(ring, RIGHT_RING);
} else if (uleft && uleft->otyp != RIN_ADORNMENT) {
- pline("%s replaces %s with %s.", Blind ? "He" : Monnam(mon),
- yname(uleft), yname(ring));
+ pline("%s replaces %s with %s.",
+ Who, yname(uleft), yname(ring));
Ring_gone(uleft);
setworn(ring, LEFT_RING);
} else
}
}
- if (!uarmc && !uarmf && !uarmg && !uarms && !uarmh && !uarmu)
- pline("%s murmurs sweet nothings into your ear.",
- Blind ? (fem ? "She" : "He") : Monnam(mon));
- else
- pline("%s murmurs in your ear, while helping you undress.",
- Blind ? (fem ? "She" : "He") : Monnam(mon));
- mayberem(uarmc, cloak_simple_name(uarmc));
+ naked = (!uarmc && !uarmf && !uarmg && !uarms && !uarmh && !uarmu);
+ pline("%s %s%s.", Who,
+ Deaf ? "seems to murmur into your ear"
+ : naked ? "murmurs sweet nothings into your ear"
+ : "murmurs in your ear",
+ naked ? "" : ", while helping you undress");
+ mayberem(Who, uarmc, cloak_simple_name(uarmc));
if (!uarmc)
- mayberem(uarm, "suit");
- mayberem(uarmf, "boots");
+ mayberem(Who, uarm, "suit");
+ mayberem(Who, uarmf, "boots");
if (!tried_gloves)
- mayberem(uarmg, "gloves");
- mayberem(uarms, "shield");
- mayberem(uarmh, helm_simple_name(uarmh));
+ mayberem(Who, uarmg, "gloves");
+ mayberem(Who, uarms, "shield");
+ mayberem(Who, uarmh, helm_simple_name(uarmh));
if (!uarmc && !uarm)
- mayberem(uarmu, "shirt");
+ mayberem(Who, uarmu, "shirt");
if (uarm || uarmc) {
- verbalize("You're such a %s; I wish...",
- flags.female ? "sweet lady" : "nice guy");
+ if (!Deaf)
+ verbalize("You're such a %s; I wish...",
+ flags.female ? "sweet lady" : "nice guy");
+ else if (seewho)
+ pline("%s appears to sigh.", Monnam(mon));
+ /* else no regret message if can't see or hear seducer */
+
if (!tele_restrict(mon))
(void) rloc(mon, TRUE);
return 1;
}
STATIC_OVL void
-mayberem(obj, str)
+mayberem(seducer, obj, str)
+const char *seducer; /* only used for alternate message */
struct obj *obj;
const char *str;
{
if (!obj || !obj->owornmask)
return;
- if (rn2(20) < ACURR(A_CHA)) {
+ /* being deaf overrides confirmation prompt for high charisma */
+ if (Deaf) {
+ pline("%s takes off your %s.", seducer, str);
+ } else if (rn2(20) < ACURR(A_CHA)) {
Sprintf(qbuf, "\"Shall I remove your %s, %s?\"", str,
(!rn2(2) ? "lover" : !rn2(2) ? "dear" : "sweetheart"));
if (yn(qbuf) == 'n')