OSDN Git Service

Fix bug of light of darkness radius
authordis- <dis-@0568b783-4c39-0410-ac80-bf13821ea2a2>
Mon, 24 Jun 2013 13:59:29 +0000 (13:59 +0000)
committerdis- <dis-@0568b783-4c39-0410-ac80-bf13821ea2a2>
Mon, 24 Jun 2013 13:59:29 +0000 (13:59 +0000)
src/defines.h
src/load.c
src/object1.c
src/object2.c
src/xtra1.c

index abf9d53..d006762 100644 (file)
@@ -76,7 +76,7 @@
 #define H_VER_MAJOR 2
 #define H_VER_MINOR 1
 #define H_VER_PATCH 2
-#define H_VER_EXTRA 3
+#define H_VER_EXTRA 4
 
 
 #define ANGBAND_2_8_1
index a84b28b..940a58c 100644 (file)
@@ -663,7 +663,7 @@ static void rd_item(object_type *o_ptr)
        }
        else o_ptr->art_name = 0;
        
-       if(h_older_than(2,1,2,3))
+       if(h_older_than(2,1,2,4))
        {
                u32b flgs[TR_FLAG_SIZE];
                object_flags(o_ptr, flgs);
index 2bfaa0f..f88472f 100644 (file)
@@ -677,16 +677,16 @@ info[i++] = "
        if (o_ptr->name2 == EGO_LITE_DARKNESS) info[i++] = _("¤½¤ì¤ÏÁ´¤¯¸÷¤é¤Ê¤¤¡£", "It provides no light.");
        
        rad = 0;
-       if (have_flag(flgs, TR_LITE_1))  rad += 1;
-       if (have_flag(flgs, TR_LITE_2))  rad += 2;
-       if (have_flag(flgs, TR_LITE_3))  rad += 3;
+       if (have_flag(flgs, TR_LITE_1) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 1;
+       if (have_flag(flgs, TR_LITE_2) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 2;
+       if (have_flag(flgs, TR_LITE_3) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 3;
        if (have_flag(flgs, TR_LITE_M1)) rad -= 1;
        if (have_flag(flgs, TR_LITE_M2)) rad -= 2;
        if (have_flag(flgs, TR_LITE_M3)) rad -= 3;
        
        if(o_ptr->name2 == EGO_LITE_SHINE) rad++;
                
-       if (have_flag(flgs, TR_LITE_FUEL))
+       if (have_flag(flgs, TR_LITE_FUEL) && o_ptr->name2 != EGO_LITE_DARKNESS)
        {
                if(rad > 0) sprintf(desc, _("¤½¤ì¤ÏdzÎÁÊäµë¤Ë¤è¤Ã¤ÆÌÀ¤«¤ê(Ⱦ·Â %d)¤ò¼ø¤±¤ë¡£", "It provides light (radius %d) when fueled."), rad);     
        }
index c4a811c..792c44c 100644 (file)
@@ -3968,6 +3968,19 @@ static void a_m_aux_4(object_type *o_ptr, int level, int power)
                                {
                                case EGO_LITE_DARKNESS:
                                        o_ptr->xtra4 = 0;
+                                       
+                                       if (o_ptr->sval == SV_LITE_TORCH)
+                                       {
+                                               add_flag(o_ptr->art_flags, TR_LITE_M1);
+                                       }
+                                       else if (o_ptr->sval == SV_LITE_LANTERN)
+                                       {
+                                               add_flag(o_ptr->art_flags, TR_LITE_M2);
+                                       }
+                                       else if (o_ptr->sval == SV_LITE_FEANOR)
+                                       {
+                                               add_flag(o_ptr->art_flags, TR_LITE_M3);
+                                       }
                                        break;
                                }
                        }
index 28f4bb8..0969c8b 100644 (file)
@@ -3016,7 +3016,7 @@ static void calc_hitpoints(void)
  */
 static void calc_torch(void)
 {
-       int i;
+       int i, rad;
        object_type *o_ptr;
        u32b flgs[TR_FLAG_SIZE];
 
@@ -3046,12 +3046,15 @@ static void calc_torch(void)
                object_flags(o_ptr, flgs);
 
                /* calc the lite_radius */
-               if (have_flag(flgs, TR_LITE_1)) p_ptr->cur_lite += 1;
-               if (have_flag(flgs, TR_LITE_2)) p_ptr->cur_lite += 2;
-               if (have_flag(flgs, TR_LITE_3)) p_ptr->cur_lite += 3;
-               if (have_flag(flgs, TR_LITE_M1)) p_ptr->cur_lite -= 1;
-               if (have_flag(flgs, TR_LITE_M2)) p_ptr->cur_lite -= 2;
-               if (have_flag(flgs, TR_LITE_M3)) p_ptr->cur_lite -= 3;
+               
+               rad = 0;
+               if (have_flag(flgs, TR_LITE_1) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 1;
+               if (have_flag(flgs, TR_LITE_2) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 2;
+               if (have_flag(flgs, TR_LITE_3) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 3;
+               if (have_flag(flgs, TR_LITE_M1)) rad -= 1;
+               if (have_flag(flgs, TR_LITE_M2)) rad -= 2;
+               if (have_flag(flgs, TR_LITE_M3)) rad -= 3;
+               p_ptr->cur_lite += rad;
        }
 
        /* max radius is 14 (was 5) without rewriting other code -- */