OSDN Git Service

Corrected error in merge: expanding game_datadir rather than the game_libpath from...
[hengbandforosx/hengbandosx.git] / src / object2.c
index 746a1c2..13c42c7 100644 (file)
 #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"
 #include "player-move.h"
 
+#include "monsterrace-hook.h"
+
 /*!
  * @brief 床上、モンスター所持でスタックされたアイテムを削除しスタックを補完する / Excise a dungeon object from any stacks
  * @param o_idx 削除対象のオブジェクト構造体ポインタ
@@ -151,11 +154,8 @@ void delete_object_idx(OBJECT_IDX o_idx)
        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);
@@ -197,7 +197,6 @@ void delete_object(POSITION y, POSITION x)
        /* Objects are gone */
        g_ptr->o_idx = 0;
 
-       /* Visual update */
        lite_spot(y, x);
 }
 
@@ -600,7 +599,6 @@ OBJECT_IDX get_obj_num(DEPTH level)
                /* Default */
                table[i].prob3 = 0;
 
-               /* Access the index */
                k_idx = table[i].index;
 
                /* Access the actual kind */
@@ -2230,16 +2228,18 @@ void apply_magic_weapon(object_type *o_ptr, DEPTH level, int power)
                                        }
                                        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;
                                        }
                                }
                        }
@@ -2309,25 +2309,6 @@ void apply_magic_weapon(object_type *o_ptr, DEPTH level, int power)
        }
 }
 
-
-/*!
- * @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"
@@ -3582,26 +3563,6 @@ static void a_m_aux_3(object_type *o_ptr, DEPTH level, int power)
        }
 }
 
-/*!
- * @brief モンスターが人形のベースにできるかを返す
- * @param r_idx チェックしたいモンスター種族のID
- * @return 人形にできるならTRUEを返す
- */
-static bool item_monster_okay(MONRACE_IDX r_idx)
-{
-       monster_race *r_ptr = &r_info[r_idx];
-
-       /* No uniques */
-       if (r_ptr->flags1 & RF1_UNIQUE) return (FALSE);
-       if (r_ptr->flags7 & RF7_KAGE) return (FALSE);
-       if (r_ptr->flagsr & RFR_RES_ALL) return (FALSE);
-       if (r_ptr->flags7 & RF7_NAZGUL) return (FALSE);
-       if (r_ptr->flags1 & RF1_FORCE_DEPTH) return (FALSE);
-       if (r_ptr->flags7 & RF7_UNIQUE2) return (FALSE);
-
-       return (TRUE);
-}
-
 
 /*!
  * @brief その他雑多のオブジェクトに生成ランクごとの強化を与えるサブルーチン
@@ -4317,92 +4278,6 @@ void apply_magic(object_type *o_ptr, DEPTH lev, BIT_FLAGS mode)
 
 
 /*!
- * @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 生成結果を収めたいオブジェクト構造体の参照ポインタ
@@ -4541,11 +4416,8 @@ void place_object(POSITION y, POSITION x, BIT_FLAGS mode)
                /* 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
@@ -4655,11 +4527,8 @@ void place_gold(POSITION y, POSITION x)
                /* 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);
        }
 }
@@ -4788,8 +4657,6 @@ OBJECT_IDX drop_near(object_type *j_ptr, PERCENTAGE chance, POSITION y, POSITION
 
                        /* Add new object */
                        if (!comb) k++;
-
-                       /* Paranoia */
                        if (k > 99) continue;
 
                        /* Calculate score */
@@ -4979,7 +4846,6 @@ OBJECT_IDX drop_near(object_type *j_ptr, PERCENTAGE chance, POSITION y, POSITION
                /* Build a stack */
                j_ptr->next_o_idx = g_ptr->o_idx;
 
-               /* Place the object */
                g_ptr->o_idx = o_idx;
 
                /* Success */
@@ -5463,8 +5329,6 @@ s16b inven_carry(object_type *o_ptr)
                }
        }
 
-
-       /* Paranoia */
        if (inven_cnt > INVEN_PACK) return (-1);
 
        /* Find an empty slot */
@@ -5565,8 +5429,6 @@ INVENTORY_IDX inven_takeoff(INVENTORY_IDX item, ITEM_NUMBER amt)
 
        /* Get the item to take off */
        o_ptr = &inventory[item];
-
-       /* Paranoia */
        if (amt <= 0) return (-1);
 
        /* Verify */