Merge branch 'NetHack-3.6.2'
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
/* NetHack 3.6 dothrow.c $NHDT-Date: 1545597420 2018/12/23 20:37:00 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.155 $ */
|
||||
/* NetHack 3.6 dothrow.c $NHDT-Date: 1550784489 2019/02/21 21:28:09 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.157 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/*-Copyright (c) Robert Patrick Rankin, 2013. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -382,6 +382,8 @@ dofire()
|
||||
/* if autoquiver is disabled or has failed, prompt for missile;
|
||||
fill quiver with it if it's not wielded */
|
||||
if (!obj) {
|
||||
/* direction of previous throw is not suitable answer here */
|
||||
in_doagain = FALSE;
|
||||
obj = getobj(uslinging() ? bullets : toss_objs, "throw");
|
||||
/* Q command doesn't allow gold in quiver */
|
||||
if (obj && !obj->owornmask && obj->oclass != COIN_CLASS)
|
||||
@@ -725,12 +727,11 @@ int x, y;
|
||||
}
|
||||
|
||||
/* FIXME:
|
||||
* Each trap should really trigger on the recoil if
|
||||
* it would trigger during normal movement. However,
|
||||
* not all the possible side-effects of this are
|
||||
* tested [as of 3.4.0] so we trigger those that
|
||||
* we have tested, and offer a message for the
|
||||
* ones that we have not yet tested.
|
||||
* Each trap should really trigger on the recoil if it would
|
||||
* trigger during normal movement. However, not all the possible
|
||||
* side-effects of this are tested [as of 3.4.0] so we trigger
|
||||
* those that we have tested, and offer a message for the ones
|
||||
* that we have not yet tested.
|
||||
*/
|
||||
if ((ttmp = t_at(x, y)) != 0) {
|
||||
if (stopping_short) {
|
||||
@@ -1035,7 +1036,7 @@ boolean hitsroof;
|
||||
} else if (petrifier && !Stone_resistance
|
||||
&& !(poly_when_stoned(g.youmonst.data)
|
||||
&& polymon(PM_STONE_GOLEM))) {
|
||||
petrify:
|
||||
petrify:
|
||||
g.killer.format = KILLED_BY;
|
||||
Strcpy(g.killer.name, "elementary physics"); /* "what goes up..." */
|
||||
You("turn to stone.");
|
||||
@@ -1102,9 +1103,9 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
||||
if ((obj->cursed || obj->greased) && (u.dx || u.dy) && !rn2(7)) {
|
||||
boolean slipok = TRUE;
|
||||
|
||||
if (ammo_and_launcher(obj, uwep))
|
||||
if (ammo_and_launcher(obj, uwep)) {
|
||||
pline("%s!", Tobjnam(obj, "misfire"));
|
||||
else {
|
||||
} else {
|
||||
/* only slip if it's greased or meant to be thrown */
|
||||
if (obj->greased || throwing_weapon(obj))
|
||||
/* BUG: this message is grammatically incorrect if obj has
|
||||
@@ -1148,7 +1149,8 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
||||
if (u.dz < 0
|
||||
/* Mjollnir must we wielded to be thrown--caller verifies this;
|
||||
aklys must we wielded as primary to return when thrown */
|
||||
&& ((Role_if(PM_VALKYRIE) && obj->oartifact == ART_MJOLLNIR) || tethered_weapon)
|
||||
&& ((Role_if(PM_VALKYRIE) && obj->oartifact == ART_MJOLLNIR)
|
||||
|| tethered_weapon)
|
||||
&& !impaired) {
|
||||
pline("%s the %s and returns to your hand!", Tobjnam(obj, "hit"),
|
||||
ceiling(u.ux, u.uy));
|
||||
@@ -1188,8 +1190,8 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
||||
}
|
||||
} else {
|
||||
/* crossbow range is independent of strength */
|
||||
crossbowing =
|
||||
(ammo_and_launcher(obj, uwep) && weapon_type(uwep) == P_CROSSBOW);
|
||||
crossbowing = (ammo_and_launcher(obj, uwep)
|
||||
&& weapon_type(uwep) == P_CROSSBOW);
|
||||
urange = (crossbowing ? 18 : (int) ACURRSTR) / 2;
|
||||
/* balls are easy to throw or at least roll;
|
||||
* also, this insures the maximum range of a ball is greater
|
||||
@@ -1358,7 +1360,8 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
||||
g.thrownobj = (struct obj *) 0;
|
||||
return;
|
||||
} else {
|
||||
if (tethered_weapon) tmp_at(DISP_END, 0);
|
||||
if (tethered_weapon)
|
||||
tmp_at(DISP_END, 0);
|
||||
/* when this location is stepped on, the weapon will be
|
||||
auto-picked up due to 'obj->was_thrown' of 1;
|
||||
addinv() prevents thrown Mjollnir from being placed
|
||||
@@ -1423,8 +1426,7 @@ boolean twoweap; /* used to restore twoweapon mode if wielded weapon returns */
|
||||
}
|
||||
}
|
||||
|
||||
/* an object may hit a monster; various factors adjust the chance of hitting
|
||||
*/
|
||||
/* an object may hit a monster; various factors adjust chance of hitting */
|
||||
int
|
||||
omon_adj(mon, obj, mon_notices)
|
||||
struct monst *mon;
|
||||
@@ -1523,7 +1525,7 @@ register struct obj *obj; /* g.thrownobj or g.kickedobj or uwep */
|
||||
* No bonuses for fleeing or stunned targets (they don't dodge
|
||||
* melee blows as readily, but dodging arrows is hard anyway).
|
||||
* Not affected by traps, etc.
|
||||
* Certain items which don't in themselves do damage ignore tmp.
|
||||
* Certain items which don't in themselves do damage ignore 'tmp'.
|
||||
* Distance and monster size affect chance to hit.
|
||||
*/
|
||||
tmp = -1 + Luck + find_mac(mon) + u.uhitinc
|
||||
@@ -1846,7 +1848,7 @@ register struct obj *obj;
|
||||
(void) mpickobj(mon, obj); /* may merge and free obj */
|
||||
ret = 1;
|
||||
|
||||
nopick:
|
||||
nopick:
|
||||
if (!Blind)
|
||||
pline1(buf);
|
||||
if (!tele_restrict(mon))
|
||||
|
||||
Reference in New Issue
Block a user