-/* NetHack 3.6 were.c $NHDT-Date: 1432512763 2015/05/25 00:12:43 $ $NHDT-Branch: master $:$NHDT-Revision: 1.18 $ */
+/* NetHack 3.6 were.c $NHDT-Date: 1550524568 2019/02/18 21:16:08 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.23 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
+/*-Copyright (c) Robert Patrick Rankin, 2011. */
/* NetHack may be freely redistributed. See license for details. */
/* JNetHack Copyright */
/* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
-/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2019 */
/* JNetHack may be freely redistributed. See license for details. */
#include "hack.h"
} else if (!rn2(30) || Protection_from_shape_changers) {
new_were(mon); /* change back into human form */
}
+ /* update innate intrinsics (mainly Drain_resistance) */
+ set_uasmon(); /* new_were() doesn't do this */
}
int
{
switch (pm) {
case PM_WEREWOLF:
- return (PM_HUMAN_WEREWOLF);
+ return PM_HUMAN_WEREWOLF;
case PM_HUMAN_WEREWOLF:
- return (PM_WEREWOLF);
+ return PM_WEREWOLF;
case PM_WEREJACKAL:
- return (PM_HUMAN_WEREJACKAL);
+ return PM_HUMAN_WEREJACKAL;
case PM_HUMAN_WEREJACKAL:
- return (PM_WEREJACKAL);
+ return PM_WEREJACKAL;
case PM_WERERAT:
- return (PM_HUMAN_WERERAT);
+ return PM_HUMAN_WERERAT;
case PM_HUMAN_WERERAT:
- return (PM_WERERAT);
+ return PM_WERERAT;
default:
return NON_PM;
}
is_human(&mons[pm]) ? "\90l\8aÔ" : beastname(mons[pm].mname));
#endif
- set_mon_data(mon, &mons[pm], 0);
+ set_mon_data(mon, &mons[pm]);
if (mon->msleeping || !mon->mcanmove) {
/* transformation wakens and/or revitalizes */
mon->msleeping = 0;
possibly_unwield(mon, FALSE);
}
-int were_summon(ptr, yours, visible,
- genbuf) /* were-creature (even you) summons a horde */
-register struct permonst *ptr;
-register boolean yours;
+/* were-creature (even you) summons a horde */
+int
+were_summon(ptr, yours, visible, genbuf)
+struct permonst *ptr;
+boolean yours;
int *visible; /* number of visible helpers created */
char *genbuf;
{
- register int i, typ, pm = monsndx(ptr);
- register struct monst *mtmp;
+ int i, typ, pm = monsndx(ptr);
+ struct monst *mtmp;
int total = 0;
*visible = 0;
switch (pm) {
case PM_WERERAT:
case PM_HUMAN_WERERAT:
- typ =
- rn2(3) ? PM_SEWER_RAT : rn2(3) ? PM_GIANT_RAT : PM_RABID_RAT;
+ typ = rn2(3) ? PM_SEWER_RAT
+ : rn2(3) ? PM_GIANT_RAT : PM_RABID_RAT;
if (genbuf)
/*JP
Strcpy(genbuf, "rat");
break;
case PM_WEREJACKAL:
case PM_HUMAN_WEREJACKAL:
- typ = PM_JACKAL;
+ typ = rn2(7) ? PM_JACKAL : rn2(3) ? PM_COYOTE : PM_FOX;
if (genbuf)
/*JP
Strcpy(genbuf, "jackal");
break;
case PM_WEREWOLF:
case PM_HUMAN_WEREWOLF:
- typ = rn2(5) ? PM_WOLF : PM_WINTER_WOLF;
+ typ = rn2(5) ? PM_WOLF : rn2(2) ? PM_WARG : PM_WINTER_WOLF;
if (genbuf)
/*JP
Strcpy(genbuf, "wolf");
char qbuf[QBUFSZ];
boolean controllable_poly = Polymorph_control && !(Stunned || Unaware);
- if (Unchanging || (u.umonnum == u.ulycn))
+ if (Unchanging || u.umonnum == u.ulycn)
return;
if (controllable_poly) {
#if 0 /*JP*/
/* `+4' => skip "were" prefix to get name of beast */
Sprintf(qbuf, "Do you want to change into %s?",
an(mons[u.ulycn].mname + 4));
-#else
+#else /* \93ú\96{\8cê\82Å\82Í\90ê\97p\8aÖ\90\94\82ð\8eg\82¤ */
Sprintf(qbuf, "%s\82É\95Ï\89»\82µ\82Ü\82·\82©\81H",
beastname(mons[u.ulycn].mname));
#endif
- if (yn(qbuf) == 'n')
+ if (!paranoid_query(ParanoidWerechange, qbuf))
return;
}
(void) polymon(u.ulycn);
You_feel("purified.");
*/
You("\8fò\82ß\82ç\82ê\82½\82æ\82¤\82È\8bC\82ª\82µ\82½\81D");
- u.ulycn = NON_PM; /* cure lycanthropy */
+ set_ulycn(NON_PM); /* cure lycanthropy */
}
if (!Unchanging && is_were(youmonst.data)
+ && (!controllable_poly
/*JP
- && (!controllable_poly || yn("Remain in beast form?") == 'n'))
+ || !paranoid_query(ParanoidWerechange, "Remain in beast form?")))
*/
- && (!controllable_poly || yn("\8fb\82Ì\8ep\82Ì\82Ü\82Ü\82Å\82¢\82é\81H") == 'n'))
+ || !paranoid_query(ParanoidWerechange, "\8fb\82Ì\8ep\82Ì\82Ü\82Ü\82Å\82¢\82é\81H")))
rehumanize();
+ else if (is_were(youmonst.data) && !u.mtimedone)
+ u.mtimedone = rn1(200, 200); /* 40% of initial were change */
+}
+
+/* lycanthropy is being caught or cured, but no shape change is involved */
+void
+set_ulycn(which)
+int which;
+{
+ u.ulycn = which;
+ /* add or remove lycanthrope's innate intrinsics (Drain_resistance) */
+ set_uasmon();
}
/*were.c*/