certain types of golems should not "catch fire" so adjust the messages
no longer need to manually examine inventory after regaining sight in order
to give a type name to an object picked up while blind
+when adding an object to inventory, it is possible for it to becomed both
+ wielded and quivered if it merges with weapon and autoquiver is enabled
+include rocks as likely candidates for quivering if alternate weapon is a sling
Platform- and/or Interface-Specific Fixes
-/* SCCS Id: @(#)dothrow.c 3.4 2003/01/08 */
+/* SCCS Id: @(#)dothrow.c 3.4 2003/01/24 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
static void
autoquiver()
{
- register struct obj *otmp, *oammo = 0, *omissile = 0, *omisc = 0;
+ struct obj *otmp, *oammo = 0, *omissile = 0, *omisc = 0, *altammo = 0;
if (uquiver)
return;
objects[otmp->otyp].oc_material == GLASS)) {
if (uslinging())
oammo = otmp;
+ else if (ammo_and_launcher(otmp, uswapwep))
+ altammo = otmp;
else if (!omisc)
omisc = otmp;
} else if (otmp->oclass == GEM_CLASS) {
if (ammo_and_launcher(otmp, uwep))
/* Ammo matched with launcher (bow and arrow, crossbow and bolt) */
oammo = otmp;
+ else if (ammo_and_launcher(otmp, uswapwep))
+ altammo = otmp;
else
/* Mismatched ammo (no better than an ordinary weapon) */
omisc = otmp;
setuqwep(oammo);
else if (omissile)
setuqwep(omissile);
+ else if (altammo)
+ setuqwep(altammo);
else if (omisc)
setuqwep(omisc);
-/* SCCS Id: @(#)invent.c 3.4 2002/12/13 */
+/* SCCS Id: @(#)invent.c 3.4 2003/01/24 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */
}
}
if (Fumbling) {
- if (drop_fmt) pline(drop_fmt, drop_arg);
- dropy(obj);
+ if (drop_fmt) pline(drop_fmt, drop_arg);
+ dropy(obj);
} else {
- long oquan = obj->quan;
- int prev_encumbr = near_capacity(); /* before addinv() */
-
- /* encumbrance only matters if it would now become worse
- than max( current_value, stressed ) */
- if (prev_encumbr < MOD_ENCUMBER) prev_encumbr = MOD_ENCUMBER;
- if (drop_arg) {
- /* addinv() may redraw the entire inventory, overwriting
- * drop_arg when it comes from something like doname()
- */
- Strcpy(buf, drop_arg);
- drop_arg = buf;
- }
- obj = addinv(obj);
- if (inv_cnt() > 52
+ long oquan = obj->quan;
+ int prev_encumbr = near_capacity(); /* before addinv() */
+
+ /* encumbrance only matters if it would now become worse
+ than max( current_value, stressed ) */
+ if (prev_encumbr < MOD_ENCUMBER) prev_encumbr = MOD_ENCUMBER;
+ /* addinv() may redraw the entire inventory, overwriting
+ drop_arg when it comes from something like doname() */
+ if (drop_arg) drop_arg = strcpy(buf, drop_arg);
+
+ obj = addinv(obj);
+ if (inv_cnt() > 52
|| ((obj->otyp != LOADSTONE || !obj->cursed)
&& near_capacity() > prev_encumbr)) {
- if (drop_fmt) pline(drop_fmt, drop_arg);
- /* undo any merge which took place */
- if (obj->quan > oquan) {
- obj = splitobj(obj, oquan);
- }
- dropx(obj);
- } else {
- if (flags.autoquiver && !uquiver &&
- (is_missile(obj) ||
- (uwep && ammo_and_launcher(obj, uwep))))
- setuqwep(obj);
- if (hold_msg || drop_fmt) prinv(hold_msg, obj, oquan);
- }
+ if (drop_fmt) pline(drop_fmt, drop_arg);
+ /* undo any merge which took place */
+ if (obj->quan > oquan) obj = splitobj(obj, oquan);
+ dropx(obj);
+ } else {
+ if (flags.autoquiver && !uquiver && !obj->owornmask &&
+ (is_missile(obj) ||
+ ammo_and_launcher(obj, uwep) ||
+ ammo_and_launcher(obj, uswapwep)))
+ setuqwep(obj);
+ if (hold_msg || drop_fmt) prinv(hold_msg, obj, oquan);
+ }
}
return obj;
}
dowieldquiver()
{
register struct obj *newquiver;
-
+ const char *quivee_types = (uslinging() ||
+ (uswapwep && objects[uswapwep->otyp].oc_skill == P_SLING)) ?
+ bullets : ready_objs;
/* Since the quiver isn't in your hands, don't check cantwield(), */
/* will_weld(), touch_petrifies(), etc. */
multi = 0;
/* Because 'Q' used to be quit... */
- if (!flags.suppress_alert || flags.suppress_alert < FEATURE_NOTICE_VER(3,3,0))
+ if (flags.suppress_alert < FEATURE_NOTICE_VER(3,3,0))
pline("Note: Please use #quit if you wish to exit the game.");
/* Prompt for a new quiver */
- if (!(newquiver = getobj(uslinging() ? bullets : ready_objs, "ready")))
+ if (!(newquiver = getobj(quivee_types, "ready")))
/* Cancelled */
return (0);