OSDN Git Service

Add new option -- show_ammo_detail / show_ammo_no_crit
[hengband/hengband.git] / src / flavor.c
index 7d967f6..fe67653 100644 (file)
@@ -2367,7 +2367,22 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                t = object_desc_chr(t, 'x');
                t = object_desc_num(t, power);
                t = object_desc_chr(t, p2);
-
+               
+               int fire_rate = calc_num_fire(o_ptr);
+               /* Show Fire rate */
+               if (fire_rate != 0 && power > 0 && known)
+               {       
+                       fire_rate = bow_energy(o_ptr->sval) / fire_rate;
+                       
+                       t = object_desc_chr(t, ' ');
+                       t = object_desc_chr(t, p1);                     
+                       t = object_desc_num(t,  fire_rate/100);
+                       t = object_desc_chr(t,  '.');
+                       t = object_desc_num(t,  fire_rate%100);
+                       t = object_desc_str(t, "turn");
+                       t = object_desc_chr(t, p2);
+               }
+               
                /* All done */
                break;
        }
@@ -2432,15 +2447,27 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
 
                /* Get extra damage from concentration */
                if (p_ptr->concent) avgdam = boost_concentration_damage(avgdam);
-
+               
                if (avgdam < 0) avgdam = 0;
 
-               /* Display (shot damage/ avg damage) */
+               /* Display (shot damage/ shot damage with critical/ avg damage with critical) */
                t = object_desc_chr(t, ' ');
                t = object_desc_chr(t, p1);
+               
+               if(show_ammo_no_crit)
+               {
+                       /* Damage with no-crit */
+                       t = object_desc_num(t, avgdam);
+                       t = object_desc_str(t, show_ammo_detail ? "/shot " : "/");
+               }
+               
+               /* Apply Expect damage of Critical */
+               avgdam = calc_expect_crit_shot(o_ptr->weight, o_ptr->to_h, bow_ptr->to_h, avgdam);
                t = object_desc_num(t, avgdam);
-               t = object_desc_chr(t, '/');
-
+               
+               t = show_ammo_no_crit ? object_desc_str(t, show_ammo_detail ? "/crit " : "/")
+                                                         : object_desc_str(t, show_ammo_detail ? "/shot " : "/");
+       
                if (p_ptr->num_fire == 0)
                {
                        t = object_desc_chr(t, '0');
@@ -2451,6 +2478,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode)
                        avgdam *= (p_ptr->num_fire * 100);
                        avgdam /= energy_fire;
                        t = object_desc_num(t, avgdam);
+                       t = object_desc_str(t, show_ammo_detail ? "/turn" : "");
                }
 
                t = object_desc_chr(t, p2);