Streamline digactualhole messaging
Merge some nearly-duplicate code for the two trap types. Also include alignment name when referring to an altar's destruction, since it provides some context for the immediate follow-up by its god.
This commit is contained in:
@@ -561,7 +561,8 @@ digactualhole(coordxy x, coordxy y, struct monst *madeby, int ttyp)
|
|||||||
{
|
{
|
||||||
struct obj *oldobjs, *newobjs;
|
struct obj *oldobjs, *newobjs;
|
||||||
register struct trap *ttmp;
|
register struct trap *ttmp;
|
||||||
const char *surface_type, *furniture = (const char *) 0;
|
const char *surface_type, *tname, *in_thru;
|
||||||
|
char furniture[BUFSZ];
|
||||||
struct rm *lev = &levl[x][y];
|
struct rm *lev = &levl[x][y];
|
||||||
boolean shopdoor;
|
boolean shopdoor;
|
||||||
struct monst *mtmp = m_at(x, y); /* may be madeby */
|
struct monst *mtmp = m_at(x, y); /* may be madeby */
|
||||||
@@ -587,13 +588,20 @@ digactualhole(coordxy x, coordxy y, struct monst *madeby, int ttyp)
|
|||||||
ttyp = PIT;
|
ttyp = PIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
old_typ = lev->typ; /* maketrap() might change it */
|
/* maketrap() might change terrain type but we deliver messages after
|
||||||
|
that, so prepare in advance */
|
||||||
|
old_typ = lev->typ;
|
||||||
|
furniture[0] = '\0';
|
||||||
if (IS_FURNITURE(lev->typ)) {
|
if (IS_FURNITURE(lev->typ)) {
|
||||||
surface_type = (IS_ROOM(old_typ) && !Is_earthlevel(&u.uz)
|
/* should mirror the word used by surface() for normal floor */
|
||||||
|
surface_type = (IS_ROOM(lev->typ) && !Is_earthlevel(&u.uz)
|
||||||
? "floor" : "ground");
|
? "floor" : "ground");
|
||||||
furniture = surface(x, y);
|
if (IS_ALTAR(lev->typ)) {
|
||||||
if (IS_ALTAR(lev->typ))
|
|
||||||
old_aligntyp = Amask2align(levl[x][y].altarmask & AM_MASK);
|
old_aligntyp = Amask2align(levl[x][y].altarmask & AM_MASK);
|
||||||
|
Strcpy(furniture, align_str(old_aligntyp));
|
||||||
|
Strcat(furniture, " ");
|
||||||
|
}
|
||||||
|
Strcat(furniture, surface(x, y));
|
||||||
} else {
|
} else {
|
||||||
surface_type = surface(x, y);
|
surface_type = surface(x, y);
|
||||||
}
|
}
|
||||||
@@ -610,27 +618,34 @@ digactualhole(coordxy x, coordxy y, struct monst *madeby, int ttyp)
|
|||||||
else if (madeby_u)
|
else if (madeby_u)
|
||||||
feeltrap(ttmp);
|
feeltrap(ttmp);
|
||||||
|
|
||||||
|
tname = trapname(ttyp, TRUE);
|
||||||
|
in_thru = (ttyp == HOLE ? "through" : "in");
|
||||||
|
if (madeby_u) {
|
||||||
|
if (x != u.ux || y != u.uy)
|
||||||
|
You("dig an adjacent %s.", tname);
|
||||||
|
else
|
||||||
|
You("dig %s %s the %s.", an(tname), in_thru, surface_type);
|
||||||
|
} else if (!madeby_obj && canseemon(madeby)) {
|
||||||
|
pline("%s digs %s %s the %s.", Monnam(madeby), an(tname), in_thru,
|
||||||
|
surface_type);
|
||||||
|
} else if (cansee(x, y) && flags.verbose) {
|
||||||
|
pline("%s appears in the %s.", An(tname), surface_type);
|
||||||
|
}
|
||||||
|
if (IS_FURNITURE(old_typ) && cansee(x, y))
|
||||||
|
pline_The("%s falls into the %s!", furniture, tname);
|
||||||
|
/* wrath should immediately follow altar destruction message */
|
||||||
|
if ((madeby_u || madeby_obj) && old_typ == ALTAR)
|
||||||
|
desecrate_altar(FALSE, old_aligntyp);
|
||||||
|
|
||||||
|
/* now deal with actual post-trap creation effects */
|
||||||
if (ttyp == PIT) {
|
if (ttyp == PIT) {
|
||||||
if (madeby_u) {
|
if (madeby_u) {
|
||||||
if (x != u.ux || y != u.uy)
|
|
||||||
You("dig an adjacent pit.");
|
|
||||||
else
|
|
||||||
You("dig a pit in the %s.", surface_type);
|
|
||||||
if (shopdoor)
|
if (shopdoor)
|
||||||
pay_for_damage("ruin", FALSE);
|
pay_for_damage("ruin", FALSE);
|
||||||
else
|
else
|
||||||
add_damage(x, y, madeby_u ? SHOP_PIT_COST : 0L);
|
add_damage(x, y, SHOP_PIT_COST);
|
||||||
wake_nearby();
|
wake_nearby();
|
||||||
} else if (!madeby_obj && canseemon(madeby)) {
|
|
||||||
pline("%s digs a pit in the %s.", Monnam(madeby), surface_type);
|
|
||||||
} else if (cansee(x, y) && flags.verbose) {
|
|
||||||
pline("A pit appears in the %s.", surface_type);
|
|
||||||
}
|
}
|
||||||
if (furniture && cansee(x, y))
|
|
||||||
pline_The("%s falls into the pit!", furniture);
|
|
||||||
/* wrath should immediately follow altar destruction message */
|
|
||||||
if ((madeby_u || madeby_obj) && old_typ == ALTAR)
|
|
||||||
desecrate_altar(FALSE, old_aligntyp);
|
|
||||||
/* in case we're digging down while encased in solid rock
|
/* in case we're digging down while encased in solid rock
|
||||||
which is blocking levitation or flight */
|
which is blocking levitation or flight */
|
||||||
switch_terrain();
|
switch_terrain();
|
||||||
@@ -654,20 +669,6 @@ digactualhole(coordxy x, coordxy y, struct monst *madeby, int ttyp)
|
|||||||
(void) mintrap(mtmp, NO_TRAP_FLAGS);
|
(void) mintrap(mtmp, NO_TRAP_FLAGS);
|
||||||
}
|
}
|
||||||
} else { /* was TRAPDOOR now a HOLE*/
|
} else { /* was TRAPDOOR now a HOLE*/
|
||||||
if (madeby_u) {
|
|
||||||
You("dig a hole through the %s.", surface_type);
|
|
||||||
} else if (!madeby_obj && canseemon(madeby)) {
|
|
||||||
pline("%s digs a hole through the %s.", Monnam(madeby),
|
|
||||||
surface_type);
|
|
||||||
} else if (cansee(x, y) && flags.verbose) {
|
|
||||||
pline("A hole appears in the %s.", surface_type);
|
|
||||||
}
|
|
||||||
if (furniture && cansee(x, y))
|
|
||||||
pline_The("%s falls through the hole!", furniture);
|
|
||||||
/* wrath should immediately follow altar destruction message */
|
|
||||||
if ((madeby_u || madeby_obj) && old_typ == ALTAR)
|
|
||||||
desecrate_altar(FALSE, old_aligntyp);
|
|
||||||
|
|
||||||
if (at_u) {
|
if (at_u) {
|
||||||
/* in case we're digging down while encased in solid rock
|
/* in case we're digging down while encased in solid rock
|
||||||
which is blocking levitation or flight */
|
which is blocking levitation or flight */
|
||||||
|
|||||||
Reference in New Issue
Block a user