reviving invisible troll could appear visible until it moves
adjust some of the shop repair messages
charge for reviving a shop owned corpse or reanimating a shop owned statue
+filled trap doors on castle can be re-dug
Platform- and/or Interface-Specific Fixes
Bitfield(waslit,1); /* remember if a location was lit */
Bitfield(roomno,6); /* room # for special rooms */
Bitfield(edge,1); /* marks boundaries for special rooms*/
+ Bitfield(candig,1); /* Exception to Can_dig_down; was a trapdoor */
};
/*
fillmsg = TRUE;
} else
digactualhole(x, y, BY_OBJECT,
- (rn2(obj->spe) < 3 || !Can_dig_down(&u.uz)) ?
+ (rn2(obj->spe) < 3 ||
+ (!Can_dig_down(&u.uz) && !levl[x][y].candig)) ?
PIT : HOLE);
}
continue;
} else if ((IS_ROCK(levl[x][y].typ) && levl[x][y].typ != SDOOR &&
(levl[x][y].wall_info & W_NONDIGGABLE) != 0)
|| (ttmp &&
- (ttmp->ttyp == MAGIC_PORTAL || !Can_dig_down(&u.uz)))) {
+ (ttmp->ttyp == MAGIC_PORTAL ||
+ (!Can_dig_down(&u.uz) && !levl[x][y].candig)))) {
if(verbose) pline_The("%s here is too hard to %s.",
surface(x,y), verb);
return(FALSE);
return;
}
- if (ttyp != PIT && !Can_dig_down(&u.uz)) {
+ if (ttyp != PIT && (!Can_dig_down(&u.uz) && !lev->candig)) {
impossible("digactualhole: can't dig %s on this level.",
defsyms[trap_to_defsym(ttyp)].explanation);
ttyp = PIT;
struct rm *lev = &levl[u.ux][u.uy];
struct obj *boulder_here;
schar typ;
- boolean nohole = !Can_dig_down(&u.uz);
+ boolean nohole = (!Can_dig_down(&u.uz) && !lev->candig);
if ((ttmp && (ttmp->ttyp == MAGIC_PORTAL || nohole)) ||
(IS_ROCK(lev->typ) && lev->typ != SDOOR &&
deltrap(ttmp);
delobj(otmp);
bury_objs(rx, ry);
+ levl[rx][ry].wall_info &= ~W_NONDIGGABLE;
+ levl[rx][ry].candig = 1;
if (cansee(rx,ry)) newsym(rx,ry);
continue;
case LEVEL_TELEP:
pline_The("digging ray is ineffective.");
return 2;
}
- if (!Can_dig_down(&u.uz)) {
+ if (!Can_dig_down(&u.uz) && !levl[mtmp->mx][mtmp->my].candig) {
if(canseemon(mtmp))
pline_The("%s here is too hard to dig in.",
surface(mtmp->mx, mtmp->my));
if (In_sokoban(&u.uz) && Can_fall_thru(&u.uz))
; /* KMH -- You can't escape the Sokoban level traps */
- else if(Levitation || u.ustuck || !Can_fall_thru(&u.uz)
+ else if(Levitation || u.ustuck
+ || (!Can_fall_thru(&u.uz) && !levl[u.ux][u.uy].candig)
|| Flying || is_clinger(youmonst.data)
|| (Inhell && !u.uevent.invoked &&
newlevel == dunlevs_in_dungeon(&u.uz))