#include "object-boost.h"
#include "object-hook.h"
#include "object-curse.h"
+#include "objectkind-hook.h"
#include "artifact.h"
#include "player-status.h"
#include "feature.h"
if (!(j_ptr->held_m_idx))
{
POSITION y, x;
-
y = j_ptr->iy;
x = j_ptr->ix;
-
- /* Visual update */
lite_spot(y, x);
}
object_wipe(j_ptr);
/* Objects are gone */
g_ptr->o_idx = 0;
- /* Visual update */
lite_spot(y, x);
}
/* Default */
table[i].prob3 = 0;
- /* Access the index */
k_idx = table[i].index;
/* Access the actual kind */
}
switch (o_ptr->name2)
{
- case EGO_MORGUL:
- if (one_in_(6)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
- if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
- case EGO_WEIRD:
- if (one_in_(4)) add_flag(o_ptr->art_flags, TR_BRAND_POIS);
- if (one_in_(4)) add_flag(o_ptr->art_flags, TR_RES_NETHER);
- if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_MAGIC);
- if (one_in_(6)) add_flag(o_ptr->art_flags, TR_NO_TELE);
- if (one_in_(6)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
- if (one_in_(6)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+ case EGO_MORGUL:
+ if (one_in_(6)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ break;
+ case EGO_WEIRD:
+ if (one_in_(4)) add_flag(o_ptr->art_flags, TR_BRAND_POIS);
+ if (one_in_(4)) add_flag(o_ptr->art_flags, TR_RES_NETHER);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_MAGIC);
+ if (one_in_(6)) add_flag(o_ptr->art_flags, TR_NO_TELE);
+ if (one_in_(6)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ if (one_in_(6)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+ break;
}
}
}
}
}
-
-/*!
- * @brief ドラゴン装備にランダムな耐性を与える
- * @param o_ptr 強化を与えたいオブジェクトの構造体参照ポインタ
- * @return なし
- */
-static void dragon_resist(object_type * o_ptr)
-{
- do
- {
- if (one_in_(4))
- one_dragon_ele_resistance(o_ptr);
- else
- one_high_resistance(o_ptr);
- }
- while (one_in_(2));
-}
-
-
/*!
* @brief 防具系オブジェクトに生成ランクごとの強化を与えるサブルーチン
* Apply magic to an item known to be "armor"
/*!
- * @brief ベースアイテムが上質として扱われるかどうかを返す。
- * Hack -- determine if a template is "good"
- * @param k_idx 判定したいベースアイテムのID
- * @return ベースアイテムが上質ならばTRUEを返す。
- */
-static bool kind_is_good(KIND_OBJECT_IDX k_idx)
-{
- object_kind *k_ptr = &k_info[k_idx];
-
- /* Analyze the item type */
- switch (k_ptr->tval)
- {
- /* Armor -- Good unless damaged */
- case TV_HARD_ARMOR:
- case TV_SOFT_ARMOR:
- case TV_DRAG_ARMOR:
- case TV_SHIELD:
- case TV_CLOAK:
- case TV_BOOTS:
- case TV_GLOVES:
- case TV_HELM:
- case TV_CROWN:
- {
- if (k_ptr->to_a < 0) return (FALSE);
- return (TRUE);
- }
-
- /* Weapons -- Good unless damaged */
- case TV_BOW:
- case TV_SWORD:
- case TV_HAFTED:
- case TV_POLEARM:
- case TV_DIGGING:
- {
- if (k_ptr->to_h < 0) return (FALSE);
- if (k_ptr->to_d < 0) return (FALSE);
- return (TRUE);
- }
-
- /* Ammo -- Arrows/Bolts are good */
- case TV_BOLT:
- case TV_ARROW:
- {
- return (TRUE);
- }
-
- /* Books -- High level books are good (except Arcane books) */
- case TV_LIFE_BOOK:
- case TV_SORCERY_BOOK:
- case TV_NATURE_BOOK:
- case TV_CHAOS_BOOK:
- case TV_DEATH_BOOK:
- case TV_TRUMP_BOOK:
- case TV_CRAFT_BOOK:
- case TV_DAEMON_BOOK:
- case TV_CRUSADE_BOOK:
- case TV_MUSIC_BOOK:
- case TV_HISSATSU_BOOK:
- case TV_HEX_BOOK:
- {
- if (k_ptr->sval >= SV_BOOK_MIN_GOOD) return (TRUE);
- return (FALSE);
- }
-
- /* Rings -- Rings of Speed are good */
- case TV_RING:
- {
- if (k_ptr->sval == SV_RING_SPEED) return (TRUE);
- if (k_ptr->sval == SV_RING_LORDLY) return (TRUE);
- return (FALSE);
- }
-
- /* Amulets -- Amulets of the Magi and Resistance are good */
- case TV_AMULET:
- {
- if (k_ptr->sval == SV_AMULET_THE_MAGI) return (TRUE);
- if (k_ptr->sval == SV_AMULET_RESISTANCE) return (TRUE);
- return (FALSE);
- }
- }
-
- /* Assume not good */
- return (FALSE);
-}
-
-/*!
* @brief 生成階に応じたベースアイテムの生成を行う。
* Attempt to make an object (normal or good/great)
* @param j_ptr 生成結果を収めたいオブジェクト構造体の参照ポインタ
/* Build a stack */
o_ptr->next_o_idx = g_ptr->o_idx;
- /* Place the object */
g_ptr->o_idx = o_idx;
-
note_spot(y, x);
-
lite_spot(y, x);
}
else
/* Build a stack */
o_ptr->next_o_idx = g_ptr->o_idx;
- /* Place the object */
g_ptr->o_idx = o_idx;
-
note_spot(y, x);
-
lite_spot(y, x);
}
}
/* Add new object */
if (!comb) k++;
-
- /* Paranoia */
if (k > 99) continue;
/* Calculate score */
/* Build a stack */
j_ptr->next_o_idx = g_ptr->o_idx;
- /* Place the object */
g_ptr->o_idx = o_idx;
/* Success */
}
}
-
- /* Paranoia */
if (inven_cnt > INVEN_PACK) return (-1);
/* Find an empty slot */
/* Get the item to take off */
o_ptr = &inventory[item];
-
- /* Paranoia */
if (amt <= 0) return (-1);
/* Verify */