lycanthropy tweaks

Make it be cannabalism for a were<foo> to eat a <foo> corpse.

Let werejackals summon foxes and coyotes in addition to jackals,
and werewolves summon wargs in addition to wolves and winter wolves.
This commit is contained in:
PatR
2016-06-16 17:11:25 -07:00
parent 09326f03bf
commit 1f4574b6c8
3 changed files with 18 additions and 13 deletions

View File

@@ -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<dir>' 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<foo> to eat a <foo> 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

View File

@@ -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.");

View File

@@ -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 */