From: PatR Date: Fri, 17 Jun 2016 00:11:25 +0000 (-0700) Subject: lycanthropy tweaks X-Git-Tag: NetHack-3.6.1_RC01~670 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f4574b6c8710492de2cb366f9e420b636b0365b;p=nethack lycanthropy tweaks Make it be cannabalism for a were to eat a corpse. Let werejackals summon foxes and coyotes in addition to jackals, and werewolves summon wargs in addition to wolves and winter wolves. --- diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 6cfc02584..456c8772c 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -294,6 +294,7 @@ don't give "you cannot pass through the bars" when travel is testing possible paths in the vicinity of iron bars if blind and no gloves, using 'm' to move and then 'e' could be used to locate cockatrice corpse without fatal touching (by declining to eat) +it's cannabilism for a were to eat a corpse Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository @@ -416,6 +417,7 @@ pressing d or D when cursor positioning targets doors and doorways pressing x or X when cursor positioning targets possibly unexplored location (potentially useful when using '_' [not mouse] to invoke travel) swallowers can't re-engulf hero immediately after spitting him/her out +werejackals can summon foxes and coyotes; werewolves can summon wargs Platform- and/or Interface-Specific New Features diff --git a/src/eat.c b/src/eat.c index 59a33053f..ffc787d8a 100644 --- a/src/eat.c +++ b/src/eat.c @@ -619,7 +619,9 @@ boolean allowmsg; and also shouldn't eat current species when polymorphed (even if having the form of something which doesn't care about cannibalism--hero's innate traits aren't altered) */ - && (your_race(fptr) || (Upolyd && same_race(youmonst.data, fptr)))) { + && (your_race(fptr) + || (Upolyd && same_race(youmonst.data, fptr)) + || (u.ulycn >= LOW_PM && were_beastie(pm) == u.ulycn))) { if (allowmsg) { if (Upolyd && your_race(fptr)) You("have a bad feeling deep inside."); diff --git a/src/were.c b/src/were.c index b9e58dd2b..c8ee49650 100644 --- a/src/were.c +++ b/src/were.c @@ -47,17 +47,17 @@ int pm; { 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; } @@ -121,7 +121,8 @@ register struct monst *mon; } /* were-creature (even you) summons a horde */ -int were_summon(ptr, yours, visible, genbuf) +int +were_summon(ptr, yours, visible, genbuf) struct permonst *ptr; boolean yours; int *visible; /* number of visible helpers created */ @@ -138,20 +139,20 @@ char *genbuf; 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) 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) 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) Strcpy(genbuf, "wolf"); break; @@ -176,7 +177,7 @@ you_were() 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) { /* `+4' => skip "were" prefix to get name of beast */