fix #8924 - demonic bribery while hero is deaf

Even though it isn't using verbalize() to make a specific statement,
don't let a demon ask the hero for a bribe when the hero is deaf.

Also, give alternate setup messages in a couple of places where a
divine voice is overriding deafness.
This commit is contained in:
PatR
2019-06-20 13:08:47 -07:00
parent 05958e9b3a
commit 2da552e22f
3 changed files with 45 additions and 22 deletions

View File

@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.60 $ $NHDT-Date: 1561053256 2019/06/20 17:54:16 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.61 $ $NHDT-Date: 1561061319 2019/06/20 20:08:39 $
This fixes36.3 file is here to capture information about updates in the 3.6.x This fixes36.3 file is here to capture information about updates in the 3.6.x
lineage following the release of 3.6.2 in May 2019. Please note, however, lineage following the release of 3.6.2 in May 2019. Please note, however,
@@ -77,6 +77,7 @@ for wizard mode 'monpolycontrol', allow usually disallowed type 'chameleon',
'doppelganger', or 'sandestin' as answer to "change <monster> @ <x,y> 'doppelganger', or 'sandestin' as answer to "change <monster> @ <x,y>
into what?" prompt when <monster> is really that type of creature into what?" prompt when <monster> is really that type of creature
add Space, Return, and Escape to '? k' (help for menu control keys) add Space, Return, and Escape to '? k' (help for menu control keys)
hero can no longer negotiate a bribe with a demon lord when deaf
Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 minion.c $NHDT-Date: 1544998886 2018/12/16 22:21:26 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.40 $ */ /* NetHack 3.6 minion.c $NHDT-Date: 1561061319 2019/06/20 20:08:39 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.42 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2008. */ /*-Copyright (c) Robert Patrick Rankin, 2008. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -204,9 +204,13 @@ boolean talk;
} }
if (mon) { if (mon) {
if (talk) { if (talk) {
pline_The("voice of %s booms:", align_gname(alignment)); if (!Deaf)
pline_The("voice of %s booms:", align_gname(alignment));
else
You_feel("%s booming voice:",
s_suffix(align_gname(alignment)));
verbalize("Thou shalt pay for thine indiscretion!"); verbalize("Thou shalt pay for thine indiscretion!");
if (!Blind) if (canspotmon(mon))
pline("%s appears before you.", Amonnam(mon)); pline("%s appears before you.", Amonnam(mon));
mon->mstrategy &= ~STRAT_APPEARMSG; mon->mstrategy &= ~STRAT_APPEARMSG;
} }
@@ -254,16 +258,18 @@ register struct monst *mtmp;
newsym(mtmp->mx, mtmp->my); newsym(mtmp->mx, mtmp->my);
} }
if (youmonst.data->mlet == S_DEMON) { /* Won't blackmail their own. */ if (youmonst.data->mlet == S_DEMON) { /* Won't blackmail their own. */
pline("%s says, \"Good hunting, %s.\"", Amonnam(mtmp), if (!Deaf)
flags.female ? "Sister" : "Brother"); pline("%s says, \"Good hunting, %s.\"", Amonnam(mtmp),
flags.female ? "Sister" : "Brother");
else if (canseemon(mtmp))
pline("%s says something.", Amonnam(mtmp));
if (!tele_restrict(mtmp)) if (!tele_restrict(mtmp))
(void) rloc(mtmp, TRUE); (void) rloc(mtmp, TRUE);
return 1; return 1;
} }
cash = money_cnt(invent); cash = money_cnt(invent);
demand = demand = (cash * (rnd(80) + 20 * Athome))
(cash * (rnd(80) + 20 * Athome)) / (100 * (1 + (sgn(u.ualign.type) == sgn(mtmp->data->maligntyp))));
/ (100 * (1 + (sgn(u.ualign.type) == sgn(mtmp->data->maligntyp))));
if (!demand || multi < 0) { /* you have no gold or can't move */ if (!demand || multi < 0) { /* you have no gold or can't move */
mtmp->mpeaceful = 0; mtmp->mpeaceful = 0;
@@ -273,13 +279,22 @@ register struct monst *mtmp;
/* make sure that the demand is unmeetable if the monster /* make sure that the demand is unmeetable if the monster
has the Amulet, preventing monster from being satisfied has the Amulet, preventing monster from being satisfied
and removed from the game (along with said Amulet...) */ and removed from the game (along with said Amulet...) */
if (mon_has_amulet(mtmp)) /* [actually the Amulet is safe; it would be dropped when
demand = cash + (long) rn1(1000, 40); mongone() gets rid of the monster; force combat anyway;
also make it unmeetable if the player is Deaf, to simplify
handling that case as player-won't-pay] */
if (mon_has_amulet(mtmp) || Deaf)
/* 125: 5*25 in case hero has maximum possible charisma */
demand = cash + (long) rn1(1000, 125);
pline("%s demands %ld %s for safe passage.", Amonnam(mtmp), demand, if (!Deaf)
currency(demand)); pline("%s demands %ld %s for safe passage.",
Amonnam(mtmp), demand, currency(demand));
else if (canseemon(mtmp))
pline("%s seems to be demanding something.", Amonnam(mtmp));
if ((offer = bribe(mtmp)) >= demand) { offer = 0L;
if (!Deaf && ((offer = bribe(mtmp)) >= demand)) {
pline("%s vanishes, laughing about cowardly mortals.", pline("%s vanishes, laughing about cowardly mortals.",
Amonnam(mtmp)); Amonnam(mtmp));
} else if (offer > 0L } else if (offer > 0L
@@ -447,12 +462,18 @@ gain_guardian_angel()
Hear_again(); /* attempt to cure any deafness now (divine Hear_again(); /* attempt to cure any deafness now (divine
message will be heard even if that fails) */ message will be heard even if that fails) */
if (Conflict) { if (Conflict) {
pline("A voice booms:"); if (!Deaf)
pline("A voice booms:");
else
You_feel("a booming voice:");
verbalize("Thy desire for conflict shall be fulfilled!"); verbalize("Thy desire for conflict shall be fulfilled!");
/* send in some hostile angels instead */ /* send in some hostile angels instead */
lose_guardian_angel((struct monst *) 0); lose_guardian_angel((struct monst *) 0);
} else if (u.ualign.record > 8) { /* fervent */ } else if (u.ualign.record > 8) { /* fervent */
pline("A voice whispers:"); if (!Deaf)
pline("A voice whispers:");
else
You_feel("a soft voice:");
verbalize("Thou hast been worthy of me!"); verbalize("Thou hast been worthy of me!");
mm.x = u.ux; mm.x = u.ux;
mm.y = u.uy; mm.y = u.uy;

View File

@@ -1,4 +1,4 @@
/* NetHack 3.6 pray.c $NHDT-Date: 1559853037 2019/06/06 20:30:37 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.114 $ */ /* NetHack 3.6 pray.c $NHDT-Date: 1561061321 2019/06/20 20:08:41 $ $NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.115 $ */
/* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -489,7 +489,7 @@ int trouble;
what = rightglow; what = rightglow;
else if (otmp == uleft) else if (otmp == uleft)
what = leftglow; what = leftglow;
decurse: decurse:
if (!otmp) { if (!otmp) {
impossible("fix_worst_trouble: nothing to uncurse."); impossible("fix_worst_trouble: nothing to uncurse.");
return; return;
@@ -721,8 +721,9 @@ aligntyp resp_god;
(on_altar() && (a_align(u.ux, u.uy) != resp_god)) (on_altar() && (a_align(u.ux, u.uy) != resp_god))
? "scorn" ? "scorn"
: "call upon"); : "call upon");
/* [why isn't this using verbalize()?] */
pline("\"Then die, %s!\"", pline("\"Then die, %s!\"",
youmonst.data->mlet == S_HUMAN ? "mortal" : "creature"); (youmonst.data->mlet == S_HUMAN) ? "mortal" : "creature");
summon_minion(resp_god, FALSE); summon_minion(resp_god, FALSE);
break; break;
@@ -802,7 +803,7 @@ gcrownu()
&& uwep->oartifact != ART_STORMBRINGER)) && uwep->oartifact != ART_STORMBRINGER))
&& !carrying(SPE_FINGER_OF_DEATH)) { && !carrying(SPE_FINGER_OF_DEATH)) {
class_gift = SPE_FINGER_OF_DEATH; class_gift = SPE_FINGER_OF_DEATH;
make_splbk: make_splbk:
obj = mksobj(class_gift, TRUE, FALSE); obj = mksobj(class_gift, TRUE, FALSE);
bless(obj); bless(obj);
obj->bknown = 1; /* ok to skip set_bknown() */ obj->bknown = 1; /* ok to skip set_bknown() */
@@ -1488,7 +1489,7 @@ dosacrifice()
if (otmp->otyp == AMULET_OF_YENDOR) { if (otmp->otyp == AMULET_OF_YENDOR) {
if (!highaltar) { if (!highaltar) {
too_soon: too_soon:
if (altaralign == A_NONE && Inhell) if (altaralign == A_NONE && Inhell)
/* hero has left Moloch's Sanctum so is in the process /* hero has left Moloch's Sanctum so is in the process
of getting away with the Amulet (outside of Gehennom, of getting away with the Amulet (outside of Gehennom,
@@ -1584,7 +1585,7 @@ dosacrifice()
} }
if (altaralign != u.ualign.type && highaltar) { if (altaralign != u.ualign.type && highaltar) {
desecrate_high_altar: desecrate_high_altar:
/* /*
* REAL BAD NEWS!!! High altars cannot be converted. Even an attempt * REAL BAD NEWS!!! High altars cannot be converted. Even an attempt
* gets the god who owns it truly pissed off. * gets the god who owns it truly pissed off.