try turning this option off (forcing NetHack to use its own
delay code) if moving objects seem to teleport across rooms
perm_invent keep inventory in a permanent window [FALSE]
+pickup_thrown override pickup_types for thrown objects [TRUE]
prayconfirm use confirmation prompt when #pray command issued [TRUE]
pushweapon when wielding a new weapon, put your previously
wielded weapon into the secondary weapon slot [FALSE]
level (Unburdened, Burdened, streSsed, straiNed, overTaxed,
or overLoaded), you will be asked if you want to continue.
(Default `S').
+.lp pickup_thrown
+If this option is on and
+.op autopickup
+is also on, try to pick up things that you threw, even if they aren't in
+.op pickup_types
+or match an autopickup exception. Default is on.
.lp pickup_types
Specify the object types to be picked up when
.op autopickup
\begin{document}
%
% input file: guidebook.mn
-% $Revision: 1.97 $ $Date: 2006/04/23 17:22:45 $
+% $Revision: 1.98 $ $Date: 2006/04/30 17:55:09 $
%
%.ds h0 "
%.ds h1 %.ds h2 \%
or overLoaded), you will be asked if you want to continue.
(Default `S').
%.lp
+\item[\ib{pickup\_thrown}]
+If this option is on and ``{\it autopickup\/}'' is also on, try to pick up
+things that you threw, even if they aren't in ``{\it pickup\_types\/}'' or
+match an autopickup exception. Default is on.
+%.lp
\item[\ib{pickup\_types}]
Specify the object types to be picked up when ``{\it autopickup\/}''
is on. Default is all types. If your copy of the game has the
#terrain command for debug mode
digging can activate or disarm some types of traps
some monsters can eat tins in addition to corpses to cure some ailments
+add Roderick Schertler's pickup_thrown patch
Platform- and/or Interface-Specific New Features
boolean null; /* OK to send nulls to the terminal */
boolean perm_invent; /* keep full inventories up until dismissed */
boolean pickup; /* whether you pickup or move and look */
-
+ boolean pickup_thrown; /* auto-pickup items you threw */
boolean pushweapon; /* When wielding, push old weapon into second slot */
boolean rest_on_space; /* space means rest */
boolean safe_dog; /* give complete protection to the dog */
#endif
Bitfield(greased,1); /* covered with grease */
Bitfield(nomerge,1); /* set temporarily to prevent merging */
- /* 1 free bit */
+ Bitfield(was_thrown,1); /* thrown by hero since last picked up */
Bitfield(in_use,1); /* for magic items before useup items */
Bitfield(bypass,1); /* mark this as an object to be skipped by bhito() */
otmp->cknown = 0;
otmp->invlet = 0;
otmp->no_charge = 0;
+ otmp->was_thrown = 0;
/* strip user-supplied names */
/* Statue and some corpse names are left intact,
}
thrownobj = obj;
+ thrownobj->was_thrown = 1;
if(u.uswallow) {
mon = u.ustuck;
if (obj->where != OBJ_FREE)
panic("addinv: obj not free");
obj->no_charge = 0; /* not meaningful for invent */
+ obj->was_thrown = 0; /* ditto */
addinv_core1(obj);
#ifndef GOLDOBJ
{"page_wait", (boolean *)0, FALSE, SET_IN_FILE},
#endif
{"perm_invent", &flags.perm_invent, FALSE, SET_IN_GAME},
+ {"pickup_thrown", &flags.pickup_thrown, TRUE, SET_IN_GAME},
{"popup_dialog", &iflags.wc_popup_dialog, FALSE, SET_IN_GAME}, /*WC*/
{"prayconfirm", &flags.prayconfirm, TRUE, SET_IN_GAME},
{"preload_tiles", &iflags.wc_preload_tiles, TRUE, DISP_IN_GAME}, /*WC*/
menu_item *pi; /* pick item */
struct obj *curr;
int n;
+ boolean pickit;
const char *otypes = flags.pickup_types;
/* first count the number of eligible items */
- for (n = 0, curr = olist; curr; curr = FOLLOW(curr, follow))
-
-
-#ifndef AUTOPICKUP_EXCEPTIONS
- if (!*otypes || index(otypes, curr->oclass))
-#else
- if ((!*otypes || index(otypes, curr->oclass) ||
- is_autopickup_exception(curr, TRUE)) &&
- !is_autopickup_exception(curr, FALSE))
+ for (n = 0, curr = olist; curr; curr = FOLLOW(curr, follow)) {
+ pickit = (!*otypes || index(otypes, curr->oclass));
+#ifdef AUTOPICKUP_EXCEPTIONS
+ /* check for "always pick up */
+ if (!pickit) pickit = is_autopickup_exception(curr, TRUE);
+ /* then for "never pick up */
+ if (pickit) pickit = !is_autopickup_exception(curr, FALSE);
#endif
- n++;
+ /* pickup_thrown overrides pickup_types and exceptions */
+ if (!pickit) pickit = (flags.pickup_thrown && curr->was_thrown);
+ /* finally, do we count this object? */
+ if (pickit) ++n;
+ }
if (n) {
*pick_list = pi = (menu_item *) alloc(sizeof(menu_item) * n);
- for (n = 0, curr = olist; curr; curr = FOLLOW(curr, follow))
-#ifndef AUTOPICKUP_EXCEPTIONS
- if (!*otypes || index(otypes, curr->oclass)) {
-#else
- if ((!*otypes || index(otypes, curr->oclass) ||
- is_autopickup_exception(curr, TRUE)) &&
- !is_autopickup_exception(curr, FALSE)) {
+ for (n = 0, curr = olist; curr; curr = FOLLOW(curr, follow)) {
+ pickit = (!*otypes || index(otypes, curr->oclass));
+#ifdef AUTOPICKUP_EXCEPTIONS
+ if (!pickit) pickit = is_autopickup_exception(curr, TRUE);
+ if (pickit) pickit = !is_autopickup_exception(curr, FALSE);
#endif
+ if (!pickit) pickit = (flags.pickup_thrown && curr->was_thrown);
+ if (pickit) {
pi[n].item.a_obj = curr;
pi[n].count = curr->quan;
n++;
}
+ }
}
return n;
}