summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/item_use.cc
diff options
context:
space:
mode:
authorj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-10-26 13:18:19 +0000
committerj-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573>2008-10-26 13:18:19 +0000
commitc96c36a0477909874c98bdbda3d13333ddb453e2 (patch)
tree0c2a18233a65c55086d640be41685824c12d782e /crawl-ref/source/item_use.cc
parenta2c2fe61d7f40cb8f5fecd84fdacfdf47d28f16a (diff)
downloadcrawl-ref-c96c36a0477909874c98bdbda3d13333ddb453e2.tar.gz
crawl-ref-c96c36a0477909874c98bdbda3d13333ddb453e2.zip
Implement FR 1894211: All transformations will now cause your equipment
to meld into your body than rather than being removed, so that when untransforming you don't have to put everything on again. * Wielded stuff cannot be melded, and does not yet use the autoswap function. * As before, the low-level transformation spells refuse to work with cursed equipment. * The messages are unnecessarily spammy if you change forms while already transformed (first everything is re-equipped, then unequipped again). Conversely, on simply untransforming the lack of messages might be confusing. * Might be buggy, feedback welcome! git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@7300 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/item_use.cc')
-rw-r--r--crawl-ref/source/item_use.cc19
1 files changed, 13 insertions, 6 deletions
diff --git a/crawl-ref/source/item_use.cc b/crawl-ref/source/item_use.cc
index ce6a2e8b86..ab9a648ccb 100644
--- a/crawl-ref/source/item_use.cc
+++ b/crawl-ref/source/item_use.cc
@@ -1097,7 +1097,7 @@ bool do_wear_armour( int item, bool quiet )
if (you.equip[EQ_BODY_ARMOUR] != -1 &&
item_cursed(you.inv[you.equip[EQ_BODY_ARMOUR]]) )
{
- if ( !quiet )
+ if (!quiet)
{
mprf("%s is stuck to your body!",
you.inv[you.equip[EQ_BODY_ARMOUR]].name(DESC_CAP_YOUR)
@@ -1178,12 +1178,19 @@ bool takeoff_armour(int item)
}
}
+ const equipment_type slot = get_armour_slot(invitem);
+ if (!you_tran_can_wear(invitem) && invitem.link == you.equip[slot])
+ {
+ mprf("%s is melded into your body!",
+ invitem.name(DESC_CAP_YOUR).c_str());
+ return (false);
+ }
+
if (!safe_to_remove_or_wear(invitem, true))
return (false);
bool removedCloak = false;
int cloak = -1;
- const equipment_type slot = get_armour_slot(invitem);
if (slot == EQ_BODY_ARMOUR)
{
@@ -3029,7 +3036,7 @@ bool safe_to_remove_or_wear(const item_def &item, bool remove,
// one of the worn rings.
//
// Does not do amulets.
-static bool swap_rings(int ring_slot)
+static bool _swap_rings(int ring_slot)
{
// Ask the player which existing ring is persona non grata.
int unwanted = prompt_ring_to_remove(ring_slot);
@@ -3086,7 +3093,7 @@ bool puton_item(int item_slot, bool prompt_finger)
if (you.equip[EQ_LEFT_RING] != -1
&& you.equip[EQ_RIGHT_RING] != -1)
{
- return swap_rings(item_slot);
+ return _swap_rings(item_slot);
}
}
else if (you.equip[EQ_AMULET] != -1)
@@ -4698,7 +4705,7 @@ void use_randart(unsigned char item_wield_2)
use_randart( you.inv[ item_wield_2 ] );
}
-void use_randart(item_def &item)
+void use_randart(item_def &item, bool unmeld)
{
#define unknown_proprt(prop) (proprt[(prop)] && !known[(prop)])
@@ -4791,7 +4798,7 @@ void use_randart(item_def &item)
randart_wpn_learn_prop(item, RAP_BERSERK);
}
- if (!item_cursed(item) && proprt[RAP_CURSED] > 0
+ if (!unmeld && !item_cursed(item) && proprt[RAP_CURSED] > 0
&& one_chance_in(proprt[RAP_CURSED]))
{
do_curse_item( item, false );