fix github issue #614 - applying polearm at doors
Reported by G7Nation; attacking walls and such with a polearm just
gave lackluster "you miss; nobody's there" feedback.
Make applying a polearm at some non-monster locations give feedback
similar to using 'F'orcefight with melee weapons. Was
|You miss; there is no one there to hit.
now
|You uselessly attack the closed door.
Also, extend the supported locations to include dungeon furniture.
Was
|You attack thin air. ('F')
now
|You harmlessly attack the throne. ('F')
|You uselessly attack the throne. ('a')
This doesn't address #613: attempting to hit non-visible locations
with an applied polearm.
Closes #614
This commit is contained in:
@@ -658,6 +658,8 @@ melting ice timer could persist after the ice was gone from digging or from an
|
|||||||
using 'F'orcefight against iron bars while wielding something breakable could
|
using 'F'orcefight against iron bars while wielding something breakable could
|
||||||
yield erratic outcome because non-deterministic breaktest() was being
|
yield erratic outcome because non-deterministic breaktest() was being
|
||||||
called twice and could yield results that conflicted
|
called twice and could yield results that conflicted
|
||||||
|
have applying a polearm give feedback similar to 'F' for melee weapon when
|
||||||
|
attacking a wall or boulder
|
||||||
|
|
||||||
|
|
||||||
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
|
||||||
|
|||||||
26
src/apply.c
26
src/apply.c
@@ -3054,6 +3054,7 @@ display_polearm_positions(int state)
|
|||||||
static int
|
static int
|
||||||
use_pole(struct obj *obj)
|
use_pole(struct obj *obj)
|
||||||
{
|
{
|
||||||
|
const char thump[] = "Thump! Your blow bounces harmlessly off the %s.";
|
||||||
int res = 0, typ, max_range, min_range, glyph;
|
int res = 0, typ, max_range, min_range, glyph;
|
||||||
coord cc;
|
coord cc;
|
||||||
struct monst *mtmp;
|
struct monst *mtmp;
|
||||||
@@ -3067,8 +3068,7 @@ use_pole(struct obj *obj)
|
|||||||
if (obj != uwep) {
|
if (obj != uwep) {
|
||||||
if (!wield_tool(obj, "swing"))
|
if (!wield_tool(obj, "swing"))
|
||||||
return 0;
|
return 0;
|
||||||
else
|
res = 1;
|
||||||
res = 1;
|
|
||||||
}
|
}
|
||||||
/* assert(obj == uwep); */
|
/* assert(obj == uwep); */
|
||||||
|
|
||||||
@@ -3158,13 +3158,31 @@ use_pole(struct obj *obj)
|
|||||||
Note: we only do this when a statue is displayed here,
|
Note: we only do this when a statue is displayed here,
|
||||||
because the player is probably attempting to attack it;
|
because the player is probably attempting to attack it;
|
||||||
other statues obscured by anything are just ignored. */
|
other statues obscured by anything are just ignored. */
|
||||||
pline("Thump! Your blow bounces harmlessly off the statue.");
|
pline(thump, "statue");
|
||||||
wake_nearto(g.bhitpos.x, g.bhitpos.y, 25);
|
wake_nearto(g.bhitpos.x, g.bhitpos.y, 25);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* no monster here and no statue seen or remembered here */
|
/* no monster here and no statue seen or remembered here */
|
||||||
(void) unmap_invisible(g.bhitpos.x, g.bhitpos.y);
|
(void) unmap_invisible(g.bhitpos.x, g.bhitpos.y);
|
||||||
You("miss; there is no one there to hit.");
|
|
||||||
|
if (glyph_to_obj(glyph) == BOULDER
|
||||||
|
&& sobj_at(BOULDER, g.bhitpos.x, g.bhitpos.y)) {
|
||||||
|
pline(thump, "boulder");
|
||||||
|
wake_nearto(g.bhitpos.x, g.bhitpos.y, 25);
|
||||||
|
} else if (!accessible(g.bhitpos.x, g.bhitpos.y)
|
||||||
|
|| IS_FURNITURE(levl[g.bhitpos.x][g.bhitpos.y].typ)) {
|
||||||
|
/* similar to 'F'orcefight with a melee weapon; we know that
|
||||||
|
the spot can be seen or we wouldn't have gotten this far */
|
||||||
|
You("uselessly attack %s.",
|
||||||
|
(levl[g.bhitpos.x][g.bhitpos.y].typ == STONE
|
||||||
|
|| levl[g.bhitpos.x][g.bhitpos.y].typ == SCORR)
|
||||||
|
? "stone"
|
||||||
|
: glyph_is_cmap(glyph)
|
||||||
|
? the(defsyms[glyph_to_cmap(glyph)].explanation)
|
||||||
|
: (const char *) "an unknown obstacle");
|
||||||
|
} else {
|
||||||
|
You("miss; there is no one there to hit.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
u_wipe_engr(2); /* same as for melee or throwing */
|
u_wipe_engr(2); /* same as for melee or throwing */
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
14
src/hack.c
14
src/hack.c
@@ -1815,7 +1815,7 @@ domove_core(void)
|
|||||||
|| (glyph_is_invisible(glyph) && !g.context.nopick)) {
|
|| (glyph_is_invisible(glyph) && !g.context.nopick)) {
|
||||||
struct obj *boulder = 0;
|
struct obj *boulder = 0;
|
||||||
boolean explo = (Upolyd && attacktype(g.youmonst.data, AT_EXPL)),
|
boolean explo = (Upolyd && attacktype(g.youmonst.data, AT_EXPL)),
|
||||||
solid = !accessible(x, y);
|
solid = (!accessible(x, y) || IS_FURNITURE(levl[x][y].typ));
|
||||||
char buf[BUFSZ];
|
char buf[BUFSZ];
|
||||||
|
|
||||||
if (!Underwater) {
|
if (!Underwater) {
|
||||||
@@ -1859,15 +1859,17 @@ domove_core(void)
|
|||||||
: "nothing");
|
: "nothing");
|
||||||
} else if (solid) {
|
} else if (solid) {
|
||||||
/* glyph might indicate unseen terrain if hero is blind;
|
/* glyph might indicate unseen terrain if hero is blind;
|
||||||
unlike searching, this won't reveal what that terrain is
|
unlike searching, this won't reveal what that terrain is;
|
||||||
(except for solid rock, where the glyph would otherwise
|
3.7: used to say "solid rock" for the stone case, but that
|
||||||
yield ludicrous "dark part of a room") */
|
made it be different from unmapped walls outside of rooms */
|
||||||
Strcpy(buf, (levl[x][y].typ == STONE) ? "solid rock"
|
Strcpy(buf, (levl[x][y].typ == STONE || levl[x][y].typ == SCORR)
|
||||||
|
? "stone"
|
||||||
: glyph_is_cmap(glyph)
|
: glyph_is_cmap(glyph)
|
||||||
? the(defsyms[glyph_to_cmap(glyph)].explanation)
|
? the(defsyms[glyph_to_cmap(glyph)].explanation)
|
||||||
: (const char *) "an unknown obstacle");
|
: (const char *) "an unknown obstacle");
|
||||||
/* note: 'solid' is misleadingly named and catches pools
|
/* note: 'solid' is misleadingly named and catches pools
|
||||||
of water and lava as well as rock and walls */
|
of water and lava as well as rock and walls;
|
||||||
|
3.7: furniture too */
|
||||||
} else {
|
} else {
|
||||||
Strcpy(buf, "thin air");
|
Strcpy(buf, "thin air");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user