summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/items.cc
diff options
context:
space:
mode:
authorharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2006-12-29 13:22:12 +0000
committerharanp <haranp@c06c8d41-db1a-0410-9941-cceddc491573>2006-12-29 13:22:12 +0000
commit031aedb7a9cfa7ad7d86fef1a0ae3b382d31ebb9 (patch)
tree23d9f3d719f5a35a8f256f0df2bf4cfec61680e8 /crawl-ref/source/items.cc
parent883d0ce492391cc7cfeed1836b4a4e5fc5f4b24e (diff)
downloadcrawl-ref-031aedb7a9cfa7ad7d86fef1a0ae3b382d31ebb9.tar.gz
crawl-ref-031aedb7a9cfa7ad7d86fef1a0ae3b382d31ebb9.zip
Fix for bug 1622129, safe_autopickup check was happening before monster
movement. Autopickup is no longer a delay but rather receives special handling (ouch, should be done better.) This necessitated removing a safety assert() in delay.cc. Also, you now get two messages when autopickup kicks in: You see 2 scrolls of identify here. C - 3 scrolls of identify I consider this...a feature. Right. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@729 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/items.cc')
-rw-r--r--crawl-ref/source/items.cc30
1 files changed, 17 insertions, 13 deletions
diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc
index 9a5afc4fcf..180e5d17a2 100644
--- a/crawl-ref/source/items.cc
+++ b/crawl-ref/source/items.cc
@@ -60,12 +60,13 @@
#include "stuff.h"
#include "stash.h"
-static void autopickup(void);
static bool invisible_to_player( const item_def& item );
static void item_list_on_square( std::vector<const item_def*>& items,
int obj, bool force_squelch = false );
static void autoinscribe_item( item_def& item );
-static void autoinscribe_items( void );
+static void autoinscribe_items();
+
+static bool will_autopickup = false;
// Used to be called "unlink_items", but all it really does is make
// sure item coordinates are correct to the stack they're in. -- bwr
@@ -733,6 +734,11 @@ static void item_list_on_square( std::vector<const item_def*>& items,
}
}
+bool need_to_autopickup()
+{
+ return will_autopickup;
+}
+
/*
* Takes keyin as an argument because it will only display a long list of items
* if ; is pressed.
@@ -754,7 +760,7 @@ void item_check(char keyin)
}
autoinscribe_items();
- autopickup();
+ will_autopickup = true;
origin_set(you.x_pos, you.y_pos);
@@ -1522,7 +1528,6 @@ int move_item_to_player( int obj, int quant_got, bool quiet )
item.y = -1;
item.link = freeslot;
- /*** HP CHANGE: do autoinscribe ***/
autoinscribe_item( item );
@@ -2934,19 +2939,20 @@ bool can_autopickup()
return (true);
}
-static void autopickup(void)
+void autopickup()
{
//David Loewenstern 6/99
int result, o, next;
bool did_pickup = false;
bool tried_pickup = false;
+ will_autopickup = false;
+
if (!can_autopickup())
return;
o = igrd[you.x_pos][you.y_pos];
- int unthrown = 0;
while (o != NON_ITEM)
{
next = mitm[o].link;
@@ -2971,9 +2977,6 @@ static void autopickup(void)
num_to_take = num_can_take;
}
- if (!(mitm[o].flags & ISFLAG_THROWN))
- unthrown++;
-
mitm[o].flags &= ~(ISFLAG_THROWN | ISFLAG_DROPPED);
result = move_item_to_player(o, num_to_take);
@@ -2997,13 +3000,14 @@ static void autopickup(void)
o = next;
}
- // move_item_to_player should leave things linked. -- bwr
- // relink_cell(you.x_pos, you.y_pos);
-
if (did_pickup)
{
you.turn_is_over = true;
- start_delay( DELAY_AUTOPICKUP, 1, unthrown );
+ const int estop =
+ you.running == RMODE_EXPLORE_GREEDY?
+ ES_GREEDY_PICKUP : ES_PICKUP;
+ if ((Options.explore_stop & estop) && prompt_stop_explore(estop))
+ stop_delay();
}
// Greedy explore has no good way to deal with an item that we can't
// pick up, so the only thing to do is to stop.