OSDN Git Service

アンドロイドの強化度に対するランダムアーティファクトの評価が低すぎたので調整。
authormogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Wed, 9 Jul 2003 16:01:56 +0000 (16:01 +0000)
committermogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Wed, 9 Jul 2003 16:01:56 +0000 (16:01 +0000)
src/effects.c
src/object2.c

index d540fc1..0b763c2 100644 (file)
@@ -5434,7 +5434,33 @@ void calc_android_exp(void)
                        level = (level + MAX(a_info[o_ptr->name1].level - 8, 5)) / 2;
                        level += MIN(20, a_info[o_ptr->name1].rarity/(a_info[o_ptr->name1].gen_flags & TRG_INSTA_ART ? 10 : 3));
                }
-               else if (o_ptr->name2) level += MAX(3, (e_info[o_ptr->name2].rating - 5)/2);
+               else if (o_ptr->name2)
+               {
+                       level += MAX(3, (e_info[o_ptr->name2].rating - 5)/2);
+               }
+               else if (o_ptr->art_name)
+               {
+                       s32b total_flags = flag_cost(o_ptr, o_ptr->pval);
+                       int fake_level;
+
+                       if (o_ptr->tval >= TV_BOOTS)
+                       {
+                               /* For armors */
+                               if (total_flags < 15000) fake_level = 10;
+                               else if (total_flags < 35000) fake_level = 25;
+                               else fake_level = 40;
+                       }
+                       else
+                       {
+                               /* For weapons */
+                               if (total_flags < 20000) fake_level = 10;
+                               else if (total_flags < 45000) fake_level = 25;
+                               else fake_level = 40;
+                       }
+
+                       level = MAX(level, (level + MAX(fake_level - 8, 5)) / 2 + 3);
+               }
+
                value = object_value_real(q_ptr);
 
                if (value <= 0) continue;
index 0146bc2..0958bed 100644 (file)
@@ -865,16 +865,23 @@ static s32b object_value_base(object_type *o_ptr)
 
 
 /* Return the value of the flags the object has... */
-s32b flag_cost(object_type * o_ptr, int plusses)
+s32b flag_cost(object_type *o_ptr, int plusses)
 {
        s32b total = 0;
        u32b flgs[TR_FLAG_SIZE];
        s32b tmp_cost;
        int count;
        int i;
+       object_kind *k_ptr;
 
        object_flags(o_ptr, flgs);
 
+       /* Base item's value will be added later. */
+       k_ptr = &k_info[o_ptr->k_idx];
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] &= ~(k_ptr->flags[i]);
+
+       /* Fixed artifact's value will be added later. */
        if (o_ptr->name1)
        {
                artifact_type *a_ptr = &a_info[o_ptr->name1];
@@ -882,30 +889,21 @@ s32b flag_cost(object_type * o_ptr, int plusses)
                for (i = 0; i < TR_FLAG_SIZE; i++)
                        flgs[i] &= ~(a_ptr->flags[i]);
        }
-       else
-       {
-               if ((o_ptr->tval == TV_RING) || (o_ptr->tval == TV_AMULET))
-               {
-                       object_kind *k_ptr = &k_info[o_ptr->k_idx];
 
-                       for (i = 0; i < TR_FLAG_SIZE; i++)
-                               flgs[i] &= ~(k_ptr->flags[i]);
-               }
-
-               if (o_ptr->name2)
-               {
-                       ego_item_type *e_ptr = &e_info[o_ptr->name2];
+       /* Fixed ego item's value will be added later. */
+       else if (o_ptr->name2)
+       {
+               ego_item_type *e_ptr = &e_info[o_ptr->name2];
 
-                       for (i = 0; i < TR_FLAG_SIZE; i++)
-                               flgs[i] &= ~(e_ptr->flags[i]);
+               for (i = 0; i < TR_FLAG_SIZE; i++)
+                       flgs[i] &= ~(e_ptr->flags[i]);
 
-               }
-               else if (o_ptr->art_name)
-               {
-                       total = 5000;
-               }
        }
 
+
+       /*
+        * Calucurate values of remaining flags
+        */
        if (have_flag(flgs, TR_STR)) total += (1700 * plusses);
        if (have_flag(flgs, TR_INT)) total += (1700 * plusses);
        if (have_flag(flgs, TR_WIS)) total += (1700 * plusses);