summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/items.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/items.cc')
-rw-r--r--crawl-ref/source/items.cc27
1 files changed, 25 insertions, 2 deletions
diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc
index 24d63b7dd9..d13e974967 100644
--- a/crawl-ref/source/items.cc
+++ b/crawl-ref/source/items.cc
@@ -114,7 +114,7 @@ void link_items(void)
{
// Don't mess with monster held items, since the index of the holding
// monster is stored in the link field.
- if (held_by_monster(mitm[i]))
+ if (mitm[i].held_by_monster())
continue;
if (!is_valid_item(mitm[i]))
@@ -368,7 +368,7 @@ void unlink_item( int dest )
if (dest == NON_ITEM || !is_valid_item( mitm[dest] ))
return;
- monsters* monster = holding_monster(mitm[dest]);
+ monsters* monster = mitm[dest].holding_monster();
if (monster != NULL)
{
@@ -2688,3 +2688,26 @@ int item_def::armour_rating() const
return (property(*this, PARM_AC) + plus);
}
+
+monsters* item_def::holding_monster() const
+{
+ if (!pos.equals(-2, -2))
+ return (NULL);
+ const int midx = link - NON_ITEM - 1;
+ if (invalid_monster_index(midx))
+ return (NULL);
+
+ return (&menv[midx]);
+}
+
+void item_def::set_holding_monster(int midx)
+{
+ ASSERT(midx != NON_MONSTER);
+ pos.set(-2, -2);
+ link = NON_ITEM + 1 + midx;
+}
+
+bool item_def::held_by_monster() const
+{
+ return (pos.equals(-2, -2) && !invalid_monster_index(link - NON_ITEM - 1));
+}