OSDN Git Service

Add some Heavy Crossbow Artifacts.
[hengband/hengband.git] / src / object2.c
index 98f554d..bff5004 100644 (file)
@@ -2583,7 +2583,7 @@ static bool add_esp_strong(object_type *o_ptr)
 }
 
 
-#define MAX_ESP_WEAK 9
+#define MAX_ESP_WEAK 10
 static void add_esp_weak(object_type *o_ptr, bool extra)
 {
        int i = 0;
@@ -2619,6 +2619,7 @@ static void add_esp_weak(object_type *o_ptr, bool extra)
        case 7: add_flag(o_ptr->art_flags, TR_ESP_DRAGON);   break;
        case 8: add_flag(o_ptr->art_flags, TR_ESP_HUMAN); break;
        case 9: add_flag(o_ptr->art_flags, TR_ESP_GOOD); break;
+       case 10: add_flag(o_ptr->art_flags, TR_ESP_UNIQUE); break;
        }
 }
 
@@ -4348,7 +4349,7 @@ void apply_magic(object_type *o_ptr, int lev, u32b mode)
        }
 
        /* Hack -- analyze ego-items */
-       else if (object_is_ego(o_ptr))
+       if (object_is_ego(o_ptr))
        {
                ego_item_type *e_ptr = &e_info[o_ptr->name2];
 
@@ -4521,6 +4522,7 @@ static bool kind_is_good(int k_idx)
                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);
@@ -5754,7 +5756,7 @@ bool object_sort_comp(object_type *o_ptr, s32b o_value, object_type *j_ptr)
        case TV_CAPTURE:
                if (r_info[o_ptr->pval].level < r_info[j_ptr->pval].level) return TRUE;
                if ((r_info[o_ptr->pval].level == r_info[j_ptr->pval].level) && (o_ptr->pval < j_ptr->pval)) return TRUE;
-               break;
+               return FALSE;
 
        case TV_SHOT:
        case TV_ARROW:
@@ -5892,8 +5894,8 @@ s16b inven_carry(object_type *o_ptr)
        /* Forget location */
        j_ptr->iy = j_ptr->ix = 0;
 
-       /* No longer marked */
-       j_ptr->marked = 0;
+       /* Player touches it, and no longer marked */
+       j_ptr->marked = OM_TOUCHED;
 
        /* Increase the weight */
        p_ptr->total_weight += (j_ptr->number * j_ptr->weight);
@@ -7358,7 +7360,7 @@ static void drain_essence(void)
        int i, item;
        int dec = 4;
        bool observe = FALSE;
-       int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
+       int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2, old_timeout;
        u32b old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
        object_type *o_ptr;
        cptr            q, s;
@@ -7426,6 +7428,7 @@ static void drain_essence(void)
        old_dd = o_ptr->dd;
        old_pval = o_ptr->pval;
        old_name2 = o_ptr->name2;
+       old_timeout = o_ptr->timeout;
        if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
        if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
        if (have_flag(old_flgs, TR_NO_TELE)) dec--;
@@ -7446,6 +7449,7 @@ static void drain_essence(void)
        o_ptr->next_o_idx=next_o_idx;
        o_ptr->marked=marked;
        o_ptr->number = number;
+       if (o_ptr->tval == TV_DRAG_ARMOR) o_ptr->timeout = old_timeout;
        if (item >= 0) p_ptr->total_weight += (o_ptr->weight*o_ptr->number - weight*number);
        o_ptr->ident |= (IDENT_MENTAL);
        object_aware(o_ptr);