Merge branch 'master' into win32-x64-working

Conflicts:
	include/extern.h
	src/do.c
	src/mon.c

 Changes to be committed:
	modified:   include/extern.h
	modified:   src/ball.c
	modified:   src/do.c
	modified:   src/eat.c
	modified:   src/hack.c
	modified:   src/invent.c
	modified:   src/lock.c
	modified:   src/mon.c
	modified:   src/pickup.c
	modified:   src/pline.c
	modified:   src/save.c
	modified:   src/sp_lev.c
	modified:   src/steed.c
	modified:   src/trap.c
	modified:   src/uhitm.c
This commit is contained in:
nhmall
2015-04-22 08:08:50 -04:00
15 changed files with 167 additions and 127 deletions
+10 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 extern.h $NHDT-Date: 1429675537 2015/04/22 04:05:37 $ $NHDT-Branch: win32-x64-working $:$NHDT-Revision: 1.471 $ */ /* NetHack 3.5 extern.h $NHDT-Date: 1429666893 2015/04/22 01:41:33 $ $NHDT-Branch: master $:$NHDT-Revision: 1.467 $ */
/* Copyright (c) Steve Creps, 1988. */ /* Copyright (c) Steve Creps, 1988. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -119,6 +119,7 @@ E void FDECL(uchangealign, (int,int));
/* ### ball.c ### */ /* ### ball.c ### */
E void FDECL(ballrelease, (boolean));
E void NDECL(ballfall); E void NDECL(ballfall);
E void NDECL(placebc); E void NDECL(placebc);
E void NDECL(unplacebc); E void NDECL(unplacebc);
@@ -606,6 +607,7 @@ E void NDECL(vomit);
E int FDECL(eaten_stat, (int,struct obj *)); E int FDECL(eaten_stat, (int,struct obj *));
E void FDECL(food_disappears, (struct obj *)); E void FDECL(food_disappears, (struct obj *));
E void FDECL(food_substitution, (struct obj *,struct obj *)); E void FDECL(food_substitution, (struct obj *,struct obj *));
E void FDECL(eating_conducts, (struct permonst *));
E int FDECL(eat_brains, (struct monst *,struct monst *,BOOLEAN_P,int *)); E int FDECL(eat_brains, (struct monst *,struct monst *,BOOLEAN_P,int *));
E void NDECL(fix_petrification); E void NDECL(fix_petrification);
E void FDECL(consume_oeaten, (struct obj *,int)); E void FDECL(consume_oeaten, (struct obj *,int));
@@ -752,6 +754,7 @@ E void NDECL(really_close);
#endif #endif
#ifdef DEBUG #ifdef DEBUG
E boolean FDECL(debugcore, (const char *, boolean)); E boolean FDECL(debugcore, (const char *, boolean));
E boolean FDECL(showdebug, (const char *));
#endif #endif
E boolean FDECL(read_tribute, (const char *,const char *,int)); E boolean FDECL(read_tribute, (const char *,const char *,int));
@@ -782,6 +785,7 @@ E boolean FDECL(bad_rock, (struct permonst *,XCHAR_P,XCHAR_P));
E int FDECL(cant_squeeze_thru, (struct monst *)); E int FDECL(cant_squeeze_thru, (struct monst *));
E boolean FDECL(invocation_pos, (XCHAR_P,XCHAR_P)); E boolean FDECL(invocation_pos, (XCHAR_P,XCHAR_P));
E boolean FDECL(test_move, (int, int, int, int, int)); E boolean FDECL(test_move, (int, int, int, int, int));
E boolean NDECL(u_rooted);
E void NDECL(domove); E void NDECL(domove);
E boolean NDECL(overexertion); E boolean NDECL(overexertion);
E void NDECL(invocation_message); E void NDECL(invocation_message);
@@ -981,6 +985,7 @@ E int NDECL(doforce);
E boolean FDECL(boxlock, (struct obj *,struct obj *)); E boolean FDECL(boxlock, (struct obj *,struct obj *));
E boolean FDECL(doorlock, (struct obj *,int,int)); E boolean FDECL(doorlock, (struct obj *,int,int));
E int NDECL(doopen); E int NDECL(doopen);
E boolean FDECL(stumble_on_door_mimic, (int,int));
E int FDECL(doopen_indir, (int,int)); E int FDECL(doopen_indir, (int,int));
E int NDECL(doclose); E int NDECL(doclose);
@@ -1306,6 +1311,7 @@ E boolean FDECL(hideunder, (struct monst*));
E void FDECL(hide_monst, (struct monst *)); E void FDECL(hide_monst, (struct monst *));
E void FDECL(mon_animal_list, (BOOLEAN_P)); E void FDECL(mon_animal_list, (BOOLEAN_P));
E int FDECL(select_newcham_form, (struct monst *)); E int FDECL(select_newcham_form, (struct monst *));
E void FDECL(mgender_from_permonst, (struct monst *, struct permonst *));
E int FDECL(newcham, (struct monst *,struct permonst *,BOOLEAN_P,BOOLEAN_P)); E int FDECL(newcham, (struct monst *,struct permonst *,BOOLEAN_P,BOOLEAN_P));
E int FDECL(can_be_hatched, (int)); E int FDECL(can_be_hatched, (int));
E int FDECL(egg_type_from_parent, (int,BOOLEAN_P)); E int FDECL(egg_type_from_parent, (int,BOOLEAN_P));
@@ -1698,6 +1704,7 @@ E struct obj *FDECL(pick_obj, (struct obj *));
E int NDECL(encumber_msg); E int NDECL(encumber_msg);
E int NDECL(doloot); E int NDECL(doloot);
E boolean FDECL(container_gone, (int (*)(OBJ_P))); E boolean FDECL(container_gone, (int (*)(OBJ_P)));
E boolean NDECL(u_handsy);
E int FDECL(use_container, (struct obj **,int)); E int FDECL(use_container, (struct obj **,int));
E int FDECL(loot_mon, (struct monst *,int *,boolean *)); E int FDECL(loot_mon, (struct monst *,int *,boolean *));
E int NDECL(dotip); E int NDECL(dotip);
@@ -1723,6 +1730,7 @@ E const char *FDECL(align_str, (ALIGNTYP_P));
E void FDECL(mstatusline, (struct monst *)); E void FDECL(mstatusline, (struct monst *));
E void NDECL(ustatusline); E void NDECL(ustatusline);
E void NDECL(self_invis_message); E void NDECL(self_invis_message);
E void FDECL(pudding_merge_message, (struct obj*, struct obj*));
/* ### polyself.c ### */ /* ### polyself.c ### */
@@ -1979,6 +1987,7 @@ E void NDECL(rumor_check);
E int NDECL(dosave); E int NDECL(dosave);
E int NDECL(dosave0); E int NDECL(dosave0);
E boolean FDECL(tricked_fileremoved, (int, char *));
#ifdef INSURANCE #ifdef INSURANCE
E void NDECL(savestateinlock); E void NDECL(savestateinlock);
#endif #endif
+18 -11
View File
@@ -10,6 +10,23 @@
STATIC_DCL int NDECL(bc_order); STATIC_DCL int NDECL(bc_order);
STATIC_DCL void NDECL(litter); STATIC_DCL void NDECL(litter);
void
ballrelease(showmsg)
boolean showmsg;
{
if (carried(uball)) {
if (showmsg) pline("Startled, you drop the iron ball.");
if (uwep == uball)
setuwep((struct obj *)0);
if (uswapwep == uball)
setuswapwep((struct obj *)0);
if (uquiver == uball)
setuqwep((struct obj *)0);;
if (uwep != uball)
freeinv(uball);
}
}
void void
ballfall() ballfall()
{ {
@@ -17,17 +34,7 @@ ballfall()
gets_hit = (((uball->ox != u.ux) || (uball->oy != u.uy)) && gets_hit = (((uball->ox != u.ux) || (uball->oy != u.uy)) &&
((uwep == uball)? FALSE : (boolean)rn2(5))); ((uwep == uball)? FALSE : (boolean)rn2(5)));
if (carried(uball)) { ballrelease(TRUE);
pline("Startled, you drop the iron ball.");
if (uwep == uball)
setuwep((struct obj *)0);
if (uswapwep == uball)
setuswapwep((struct obj *)0);
if (uquiver == uball)
setuqwep((struct obj *)0);;
if (uwep != uball)
freeinv(uball);
}
if(gets_hit){ if(gets_hit){
int dmg = rn1(7,25); int dmg = rn1(7,25);
pline_The("iron ball falls on your %s.", pline_The("iron ball falls on your %s.",
+7 -31
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 do.c $NHDT-Date: 1426991040 2015/03/22 02:24:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.111 $ */ /* NetHack 3.5 do.c $NHDT-Date: 1429666911 2015/04/22 01:41:51 $ $NHDT-Branch: master $:$NHDT-Revision: 1.130 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -216,7 +216,7 @@ const char *verb;
} else if (obj->globby) { } else if (obj->globby) {
/* Globby things like puddings might stick together */ /* Globby things like puddings might stick together */
while (obj && (otmp = obj_nexto_xy(obj->otyp, x, y, obj->o_id)) != (struct obj*)0) { while (obj && (otmp = obj_nexto_xy(obj->otyp, x, y, obj->o_id)) != (struct obj*)0) {
pline("The %s coalesce.", makeplural(obj_typename(obj->otyp))); pudding_merge_message(obj, otmp);
obj_meld(&obj, &otmp); obj_meld(&obj, &otmp);
} }
return (obj == NULL); return (obj == NULL);
@@ -839,13 +839,7 @@ dodown()
(u.ux == sstairs.sx && u.uy == sstairs.sy && !sstairs.up)), (u.ux == sstairs.sx && u.uy == sstairs.sy && !sstairs.up)),
ladder_down = (u.ux == xdnladder && u.uy == ydnladder); ladder_down = (u.ux == xdnladder && u.uy == ydnladder);
if(!youmonst.data->mmove) { if (u_rooted()) return 1;
You("are rooted %s.",
Levitation || Is_airlevel(&u.uz) || Is_waterlevel(&u.uz) ?
"in place" : "to the ground");
nomul(0);
return 1;
}
if (stucksteed(TRUE)) { if (stucksteed(TRUE)) {
return 0; return 0;
@@ -946,13 +940,7 @@ dodown()
int int
doup() doup()
{ {
if(!youmonst.data->mmove) { if (u_rooted()) return 1;
You("are rooted %s.",
Levitation || Is_airlevel(&u.uz) || Is_waterlevel(&u.uz) ?
"in place" : "to the ground");
nomul(0);
return 1;
}
/* "up" to get out of a pit... */ /* "up" to get out of a pit... */
if (u.utrap && u.utraptype == TT_PIT) { if (u.utrap && u.utraptype == TT_PIT) {
@@ -1230,11 +1218,7 @@ boolean at_stairs, falling, portal;
} else { } else {
/* returning to previously visited level; reload it */ /* returning to previously visited level; reload it */
fd = open_levelfile(new_ledger, whynot); fd = open_levelfile(new_ledger, whynot);
if (fd < 0) { if (tricked_fileremoved(fd, whynot)) {
pline1(whynot);
pline("Probably someone removed it.");
Strcpy(killer.name, whynot);
done(TRICKED);
/* we'll reach here if running in wizard mode */ /* we'll reach here if running in wizard mode */
error("Cannot continue this game."); error("Cannot continue this game.");
} }
@@ -1291,16 +1275,8 @@ boolean at_stairs, falling, portal;
Punished || Fumbling) { Punished || Fumbling) {
You("fall down the %s.", at_ladder ? "ladder" : "stairs"); You("fall down the %s.", at_ladder ? "ladder" : "stairs");
if (Punished) { if (Punished) {
drag_down(); drag_down();
if (carried(uball)) { ballrelease(FALSE);
if (uwep == uball)
setuwep((struct obj *)0);
if (uswapwep == uball)
setuswapwep((struct obj *)0);
if (uquiver == uball)
setuqwep((struct obj *)0);
freeinv(uball);
}
} }
/* falling off steed has its own losehp() call */ /* falling off steed has its own losehp() call */
if (u.usteed) if (u.usteed)
+13 -11
View File
@@ -430,6 +430,17 @@ boolean message;
context.victual.fullwarn = context.victual.eating = context.victual.doreset = FALSE; context.victual.fullwarn = context.victual.eating = context.victual.doreset = FALSE;
} }
void
eating_conducts(pd)
struct permonst *pd;
{
u.uconduct.food++;
if (!vegan(pd))
u.uconduct.unvegan++;
if (!vegetarian(pd))
violated_vegetarian();
}
/* handle side-effects of mind flayer's tentacle attack */ /* handle side-effects of mind flayer's tentacle attack */
int int
eat_brains(magr, mdef, visflag, dmg_p) eat_brains(magr, mdef, visflag, dmg_p)
@@ -482,11 +493,7 @@ int *dmg_p; /* for dishing out extra damage in lieu of Int loss */
/* /*
* player mind flayer is eating something's brain * player mind flayer is eating something's brain
*/ */
u.uconduct.food++; eating_conducts(pd);
if (!vegan(pd))
u.uconduct.unvegan++;
if (!vegetarian(pd))
violated_vegetarian();
if (mindless(pd)) { /* (cannibalism not possible here) */ if (mindless(pd)) { /* (cannibalism not possible here) */
pline("%s doesn't notice.", Monnam(mdef)); pline("%s doesn't notice.", Monnam(mdef));
/* all done; no extra harm inflicted upon target */ /* all done; no extra harm inflicted upon target */
@@ -1269,12 +1276,7 @@ const char *mesg;
You("consume %s %s.", tintxts[r].txt, mons[mnum].mname); You("consume %s %s.", tintxts[r].txt, mons[mnum].mname);
/* KMH, conduct */ eating_conducts(&mons[mnum]);
u.uconduct.food++;
if (!vegan(&mons[mnum]))
u.uconduct.unvegan++;
if (!vegetarian(&mons[mnum]))
violated_vegetarian();
tin->dknown = tin->known = 1; tin->dknown = tin->known = 1;
cprefx(mnum); cprefx(mnum);
+16 -7
View File
@@ -1111,6 +1111,19 @@ struct trap *desttrap; /* nonnull if another trap at <x,y> */
return FALSE; return FALSE;
} }
boolean
u_rooted()
{
if(!youmonst.data->mmove) {
You("are rooted %s.",
Levitation || Is_airlevel(&u.uz) || Is_waterlevel(&u.uz) ?
"in place" : "to the ground");
nomul(0);
return TRUE;
}
return FALSE;
}
void void
domove() domove()
{ {
@@ -1414,13 +1427,9 @@ domove()
nomul(0); nomul(0);
return; return;
} }
if(!youmonst.data->mmove) {
You("are rooted %s.", if (u_rooted()) return;
Levitation || Is_airlevel(&u.uz) || Is_waterlevel(&u.uz) ?
"in place" : "to the ground");
nomul(0);
return;
}
if(u.utrap) { if(u.utrap) {
if (!trapmove(x, y, trap)) return; if (!trapmove(x, y, trap)) return;
} }
+1 -1
View File
@@ -301,7 +301,7 @@ struct obj **potmp, **pobj;
* free the other object automatically so we can just * free the other object automatically so we can just
* return out from here. */ * return out from here. */
if (Is_pudding(obj)) { if (Is_pudding(obj)) {
pline("The %s coalesce.", makeplural(obj_typename(obj->otyp))); pudding_merge_message(otmp, obj);
obj_absorb(potmp, pobj); obj_absorb(potmp, pobj);
return(1); return(1);
} }
+17 -9
View File
@@ -526,6 +526,22 @@ doopen() /* try to open a door */
return doopen_indir(0, 0); return doopen_indir(0, 0);
} }
boolean
stumble_on_door_mimic(x,y)
int x,y;
{
struct monst *mtmp;
if ((mtmp = m_at(x,y)) &&
mtmp->m_ap_type == M_AP_FURNITURE &&
(mtmp->mappearance == S_hcdoor ||
mtmp->mappearance == S_vcdoor) &&
!Protection_from_shape_changers) {
stumble_onto_mimic(mtmp);
return TRUE;
}
return FALSE;
}
int int
doopen_indir(x, y) /* try to open a door in direction u.dx/u.dy */ doopen_indir(x, y) /* try to open a door in direction u.dx/u.dy */
int x, y; int x, y;
@@ -554,15 +570,7 @@ int x, y;
if((cc.x == u.ux) && (cc.y == u.uy)) return(0); if((cc.x == u.ux) && (cc.y == u.uy)) return(0);
if ((mtmp = m_at(cc.x,cc.y)) && if (stumble_on_door_mimic(cc.x, cc.y)) return 1;
mtmp->m_ap_type == M_AP_FURNITURE &&
(mtmp->mappearance == S_hcdoor ||
mtmp->mappearance == S_vcdoor) &&
!Protection_from_shape_changers) {
stumble_onto_mimic(mtmp);
return(1);
}
/* when choosing a direction is impaired, use a turn /* when choosing a direction is impaired, use a turn
regardless of whether a door is successfully targetted */ regardless of whether a door is successfully targetted */
+17 -9
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 mon.c $NHDT-Date: 1429584308 2015/04/21 02:45:08 $ $NHDT-Branch: master $:$NHDT-Revision: 1.164 $ */ /* NetHack 3.5 mon.c $NHDT-Date: 1429666918 2015/04/22 01:41:58 $ $NHDT-Branch: master $:$NHDT-Revision: 1.165 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -280,7 +280,7 @@ unsigned corpseflags;
x, y, TRUE, FALSE); x, y, TRUE, FALSE);
while ((obj && (otmp = obj_nexto(obj)) != (struct obj*)0)) { while ((obj && (otmp = obj_nexto(obj)) != (struct obj*)0)) {
pline("The %s coalesce.", makeplural(obj_typename(obj->otyp))); pudding_merge_message(obj, otmp);
obj = obj_meld(&obj, &otmp); obj = obj_meld(&obj, &otmp);
} }
free_mname(mtmp); free_mname(mtmp);
@@ -2744,6 +2744,20 @@ int mndx;
return polyok(mdat) ? mdat : 0; return polyok(mdat) ? mdat : 0;
} }
void
mgender_from_permonst(mtmp, mdat)
struct monst *mtmp;
struct permonst *mdat;
{
if(is_male(mdat)) {
if(mtmp->female) mtmp->female = FALSE;
} else if (is_female(mdat)) {
if(!mtmp->female) mtmp->female = TRUE;
} else if (!is_neuter(mdat)) {
if(!rn2(10)) mtmp->female = !mtmp->female;
}
}
/* make a chameleon take on another shape, or a polymorph target /* make a chameleon take on another shape, or a polymorph target
(possibly self-infliced) become a different monster; (possibly self-infliced) become a different monster;
returns 1 if it actually changes form */ returns 1 if it actually changes form */
@@ -2783,13 +2797,7 @@ boolean msg; /* "The oldmon turns into a newmon!" */
} else if (mvitals[monsndx(mdat)].mvflags & G_GENOD) } else if (mvitals[monsndx(mdat)].mvflags & G_GENOD)
return(0); /* passed in mdat is genocided */ return(0); /* passed in mdat is genocided */
if(is_male(mdat)) { mgender_from_permonst(mtmp, mdat);
if(mtmp->female) mtmp->female = FALSE;
} else if (is_female(mdat)) {
if(!mtmp->female) mtmp->female = TRUE;
} else if (!is_neuter(mdat)) {
if(!rn2(10)) mtmp->female = !mtmp->female;
}
if (In_endgame(&u.uz) && is_mplayer(olddata) && has_mname(mtmp)) { if (In_endgame(&u.uz) && is_mplayer(olddata) && has_mname(mtmp)) {
/* mplayers start out as "Foo the Bar", but some of the /* mplayers start out as "Foo the Bar", but some of the
+16 -7
View File
@@ -2098,6 +2098,19 @@ explain_container_prompt()
} }
} }
boolean
u_handsy()
{
if (nohands(youmonst.data)) {
You("have no hands!"); /* not `body_part(HAND)' */
return FALSE;
} else if (!freehand()) {
You("have no free %s.", body_part(HAND));
return FALSE;
}
return TRUE;
}
static const char stashable[] = { ALLOW_COUNT, COIN_CLASS, ALL_CLASSES, 0 }; static const char stashable[] = { ALLOW_COUNT, COIN_CLASS, ALL_CLASSES, 0 };
int int
@@ -2114,13 +2127,9 @@ int held;
int used = 0; int used = 0;
emptymsg[0] = '\0'; emptymsg[0] = '\0';
if (nohands(youmonst.data)) {
You("have no hands!"); /* not `body_part(HAND)' */ if (!u_handsy()) return 0;
return 0;
} else if (!freehand()) {
You("have no free %s.", body_part(HAND));
return 0;
}
if (obj->olocked) { if (obj->olocked) {
pline("%s locked.", Tobjnam(obj, "are")); pline("%s locked.", Tobjnam(obj, "are"));
if (held) You("must put it down to unlock."); if (held) You("must put it down to unlock.");
+30 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 pline.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ /* NetHack 3.5 pline.c $NHDT-Date: 1429666920 2015/04/22 01:42:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.37 $ */
/* NetHack 3.5 pline.c $Date: 2013/02/09 01:33:37 $ $Revision: 1.30 $ */ /* NetHack 3.5 pline.c $Date: 2013/02/09 01:33:37 $ $Revision: 1.30 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -489,4 +489,33 @@ self_invis_message()
"can't see yourself"); "can't see yourself");
} }
void
pudding_merge_message(otmp, otmp2)
struct obj* otmp;
struct obj* otmp2;
{
boolean visible = cansee(otmp->ox, otmp->oy) || cansee(otmp2->ox, otmp2->oy);
boolean onfloor = otmp->where == OBJ_FLOOR || otmp2->where == OBJ_FLOOR;
boolean inpack = carried(otmp) || carried(otmp2);
/* the player will know something happened inside his own inventory */
if ((!Blind && visible) || inpack) {
if (Hallucination) {
if (onfloor) {
You_see("parts of the floor melting!");
} else if (inpack) {
Your("pack reaches out and grabs something!");
}
/* even though we can see where they should be,
* they'll be out of our view (minvent or container)
* so don't actually show anything */
} else if (onfloor || inpack) {
pline("The %s coalesce%s.", makeplural(obj_typename(otmp->otyp)),
inpack ? " inside your pack" : "");
}
} else {
You_hear("a faint sloshing sound.");
}
}
/*pline.c*/ /*pline.c*/
+16 -7
View File
@@ -359,6 +359,21 @@ register int fd, mode;
bflush(fd); bflush(fd);
} }
boolean
tricked_fileremoved(fd, whynot)
int fd;
char *whynot;
{
if (fd < 0) {
pline1(whynot);
pline("Probably someone removed it.");
Strcpy(killer.name, whynot);
done(TRICKED);
return TRUE;
}
return FALSE;
}
#ifdef INSURANCE #ifdef INSURANCE
void void
savestateinlock() savestateinlock()
@@ -386,13 +401,7 @@ savestateinlock()
* readable by an external utility * readable by an external utility
*/ */
fd = open_levelfile(0, whynot); fd = open_levelfile(0, whynot);
if (fd < 0) { if (tricked_fileremoved(fd, whynot)) return;
pline1(whynot);
pline("Probably someone removed it.");
Strcpy(killer.name, whynot);
done(TRICKED);
return;
}
(void) read(fd, (genericptr_t) &hpid, sizeof(hpid)); (void) read(fd, (genericptr_t) &hpid, sizeof(hpid));
if (hackpid != hpid) { if (hackpid != hpid) {
+2 -8
View File
@@ -1498,14 +1498,8 @@ struct mkroom *croom;
if ((mndx != NON_PM) && (&mons[mndx] != mtmp->data)) { if ((mndx != NON_PM) && (&mons[mndx] != mtmp->data)) {
struct permonst *mdat = &mons[mndx]; struct permonst *mdat = &mons[mndx];
struct permonst *olddata = mtmp->data; struct permonst *olddata = mtmp->data;
/* this code duplicated from newcham() */
if(is_male(mdat)) { mgender_from_permonst(mtmp, mdat);
if(mtmp->female) mtmp->female = FALSE;
} else if (is_female(mdat)) {
if(!mtmp->female) mtmp->female = TRUE;
} else if (!is_neuter(mdat)) {
if(!rn2(10)) mtmp->female = !mtmp->female;
}
set_mon_data(mtmp, mdat, 0); set_mon_data(mtmp, mdat, 0);
if (emits_light(olddata) != emits_light(mtmp->data)) { if (emits_light(olddata) != emits_light(mtmp->data)) {
/* used to give light, now doesn't, or vice versa, /* used to give light, now doesn't, or vice versa,
+1 -8
View File
@@ -46,14 +46,7 @@ use_saddle(otmp)
const char *s; const char *s;
/* Can you use it? */ if (!u_handsy()) return 0;
if (nohands(youmonst.data)) {
You("have no hands!"); /* not `body_part(HAND)' */
return 0;
} else if (!freehand()) {
You("have no free %s.", body_part(HAND));
return 0;
}
/* Select an animal */ /* Select an animal */
if (u.uswallow || Underwater || !getdir((char *)0)) { if (u.uswallow || Underwater || !getdir((char *)0)) {
+1 -8
View File
@@ -4107,14 +4107,7 @@ boolean force;
return(0); return(0);
} }
if ((mtmp = m_at(x,y)) && if (stumble_on_door_mimic(x,y)) return 1;
mtmp->m_ap_type == M_AP_FURNITURE &&
(mtmp->mappearance == S_hcdoor ||
mtmp->mappearance == S_vcdoor) &&
!Protection_from_shape_changers) {
stumble_onto_mimic(mtmp);
return(1);
}
} /* deal_with_floor_trap */ } /* deal_with_floor_trap */
/* doors can be manipulated even while levitating/unskilled riding */ /* doors can be manipulated even while levitating/unskilled riding */
+2 -8
View File
@@ -1809,14 +1809,8 @@ register struct attack *mattk;
(mattk->adtyp == AD_DGST && (is_rider(pd) || (mattk->adtyp == AD_DGST && (is_rider(pd) ||
(pd == &mons[PM_MEDUSA] && !Stone_resistance))); (pd == &mons[PM_MEDUSA] && !Stone_resistance)));
if ((mattk->adtyp == AD_DGST && !Slow_digestion) || fatal_gulp) { if ((mattk->adtyp == AD_DGST && !Slow_digestion) || fatal_gulp)
/* KMH, conduct */ eating_conducts(pd);
u.uconduct.food++;
if (!vegan(pd))
u.uconduct.unvegan++;
if (!vegetarian(pd))
violated_vegetarian();
}
if (fatal_gulp && !is_rider(pd)) { /* petrification */ if (fatal_gulp && !is_rider(pd)) { /* petrification */
char kbuf[BUFSZ]; char kbuf[BUFSZ];