enhance life-saving by preventing subsequent poison from being fatal upon
rescue from death due to spiked pit, dart trap, or poisoned missile
don't create mail daemons when populating special levels with random demons
+teleport control and polymorph control are ineffective while hero is stunned
Platform- and/or Interface-Specific Fixes
if (Sick) make_sick(0L, (char *) 0, FALSE, SICK_ALL);
if (Stoned) make_stoned(0L, (char *)0, 0, (char *)0);
if (u.uhp <= 0) {
- if (Polymorph_control) {
+ if (Polymorph_control) { /* even when Stunned || Unaware */
if (u.uhp <= 0) u.uhp = 1;
} else {
dead: /* we come directly here if their experience level went to 0 or less */
monsterpoly = (psflags == 2),
draconian = (uarm && Is_dragon_armor(uarm)),
iswere = (u.ulycn >= LOW_PM),
- isvamp = (youmonst.data->mlet == S_VAMPIRE);
+ isvamp = (youmonst.data->mlet == S_VAMPIRE),
+ controllable_poly = Polymorph_control && !(Stunned || Unaware);
if (Unchanging) {
pline("You fail to transform!");
return;
}
+ /* being Stunned|Unaware doesn't negate this aspect of Poly_control */
if (!Polymorph_control && !forcecontrol &&
!draconian && !iswere && !isvamp) {
if (rn2(20) > ACURR(A_CON)) {
if (monsterpoly && isvamp)
goto do_vampyr;
- if (Polymorph_control || forcecontrol) {
+ if (controllable_poly || forcecontrol) {
tryct = 5;
do {
mntmp = NON_PM;
mntmp = (youmonst.data != &mons[PM_VAMPIRE] &&
!rn2(10)) ? PM_WOLF :
!rn2(4) ? PM_FOG_CLOUD : PM_VAMPIRE_BAT;
- if (Polymorph_control) {
+ if (controllable_poly) {
Sprintf(buf, "Become %s?",
an(mons[mntmp].mname));
if (yn(buf) != 'y') return;
/* NetHack 3.5 were.c $Date$ $Revision$ */
-/* SCCS Id: @(#)were.c 3.5 2007/06/02 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
you_were()
{
char qbuf[QBUFSZ];
+ boolean controllable_poly = Polymorph_control && !(Stunned || Unaware);
if (Unchanging || (u.umonnum == u.ulycn)) return;
- if (Polymorph_control) {
+ if (controllable_poly) {
/* `+4' => skip "were" prefix to get name of beast */
Sprintf(qbuf, "Do you want to change into %s?",
an(mons[u.ulycn].mname+4));
you_unwere(purify)
boolean purify;
{
+ boolean controllable_poly = Polymorph_control && !(Stunned || Unaware);
+
if (purify) {
You_feel("purified.");
u.ulycn = NON_PM; /* cure lycanthropy */
}
if (!Unchanging && is_were(youmonst.data) &&
- (!Polymorph_control || yn("Remain in beast form?") == 'n'))
+ (!controllable_poly || yn("Remain in beast form?") == 'n'))
rehumanize();
}