#include "angband.h"
#include "util.h"
+#include "main/sound-definitions-table.h"
#include "avatar.h"
-#include "spells.h"
+#include "spell/spells-type.h"
#include "spells-status.h"
#include "player-status.h"
#include "player-effects.h"
#include "player-class.h"
#include "player-inventory.h"
-#include "objectkind.h"
+#include "object/object-kind.h"
#include "object-hook.h"
#include "cmd-basic.h"
#include "floor.h"
#include "targeting.h"
-#include "view-mainwindow.h"
+#include "view/display-main-window.h"
+#include "spell/spells2.h"
/*!
* @brief 魔法棒の効果を発動する
case SV_WAND_HEAL_MONSTER:
{
HIT_POINT dam = damroll((powerful ? 20 : 10), 10);
- if (heal_monster(dir, dam)) ident = TRUE;
+ if (heal_monster(creature_ptr, dir, dam)) ident = TRUE;
break;
}
case SV_WAND_HASTE_MONSTER:
{
- if (speed_monster(dir, lev)) ident = TRUE;
+ if (speed_monster(creature_ptr, dir, lev)) ident = TRUE;
break;
}
case SV_WAND_CLONE_MONSTER:
{
- if (clone_monster(dir)) ident = TRUE;
+ if (clone_monster(creature_ptr, dir)) ident = TRUE;
break;
}
case SV_WAND_SLEEP_MONSTER:
{
- if (sleep_monster(dir, lev)) ident = TRUE;
+ if (sleep_monster(creature_ptr, dir, lev)) ident = TRUE;
break;
}
case SV_WAND_SLOW_MONSTER:
{
- if (slow_monster(dir, lev)) ident = TRUE;
+ if (slow_monster(creature_ptr, dir, lev)) ident = TRUE;
break;
}
case SV_WAND_CONFUSE_MONSTER:
{
- if (confuse_monster(dir, lev)) ident = TRUE;
+ if (confuse_monster(creature_ptr, dir, lev)) ident = TRUE;
break;
}
case SV_WAND_FEAR_MONSTER:
{
- if (fear_monster(dir, lev)) ident = TRUE;
+ if (fear_monster(creature_ptr, dir, lev)) ident = TRUE;
break;
}
case SV_WAND_POLYMORPH:
{
- if (poly_monster(dir, lev)) ident = TRUE;
+ if (poly_monster(creature_ptr, dir, lev)) ident = TRUE;
break;
}
if (object_is_aware(o_ptr) && (o_ptr->sval == SV_WAND_HEAL_MONSTER
|| o_ptr->sval == SV_WAND_HASTE_MONSTER))
target_pet = TRUE;
- if (!get_aim_dir(&dir))
+ if (!get_aim_dir(creature_ptr, &dir))
{
target_pet = old_target_pet;
return;
sound(SOUND_ZAP);
ident = wand_effect(creature_ptr, o_ptr->sval, dir, FALSE, FALSE);
- creature_ptr->update |= (PU_COMBINE | PU_REORDER);
+
+ /*
+ * Temporarily remove the flags for updating the inventory so
+ * gain_exp() does not reorder the inventory before the charge
+ * is deducted from the wand.
+ */
+ BIT_FLAGS inventory_flags = (PU_COMBINE | PU_REORDER | (creature_ptr->update & PU_AUTODESTROY));
+ creature_ptr->update &= ~(PU_COMBINE | PU_REORDER | PU_AUTODESTROY);
if (!(object_is_aware(o_ptr)))
{
/* Apply identification */
if (ident && !object_is_aware(o_ptr))
{
- object_aware(o_ptr);
+ object_aware(creature_ptr, o_ptr);
gain_exp(creature_ptr, (lev + (creature_ptr->lev >> 1)) / creature_ptr->lev);
}
creature_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);
-
+ creature_ptr->update |= inventory_flags;
/* Use a single charge */
o_ptr->pval--;
- /* Describe the charges in the pack */
if (item >= 0)
{
- inven_item_charges(item);
+ inven_item_charges(creature_ptr, item);
+ return;
}
- /* Describe the charges on the floor */
- else
- {
- floor_item_charges(0 - item);
- }
+ floor_item_charges(creature_ptr->current_floor_ptr, 0 - item);
}
/*!