OSDN Git Service

HDを振る処理はキャラクタメイク時と新生等のdo_cmd_rerate()時で共通の関
authornothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 11 May 2003 13:56:16 +0000 (13:56 +0000)
committernothere <nothere@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sun, 11 May 2003 13:56:16 +0000 (13:56 +0000)
数を呼ぶように変更.

src/birth.c
src/externs.h
src/wizard2.c

index 08ffbb0..5c469c9 100644 (file)
@@ -2726,7 +2726,7 @@ void get_max_stats(void)
  */
 static void get_extra(bool roll_hitdie)
 {
-       int             i, j, min_value, max_value;
+       int i, j;
 
        /* Experience factor */
        if (p_ptr->prace == RACE_ANDROID) p_ptr->expfact = rp_ptr->r_exp;
@@ -2766,45 +2766,7 @@ static void get_extra(bool roll_hitdie)
                p_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
 
        /* Roll for hit point unless quick-start */
-       if (roll_hitdie)
-       {
-               /* Minimum hitpoints at highest level */
-               min_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 3 / 8;
-               min_value += p_ptr->hitdie;
-
-               /* Maximum hitpoints at highest level */
-               max_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 5 / 8;
-               max_value += p_ptr->hitdie;
-
-               /* Roll out the hitpoints */
-               while (TRUE)
-               {
-                       /* Pre-calculate level 1 hitdice */
-                       p_ptr->player_hp[0] = p_ptr->hitdie;
-
-                       for (i = 1; i < 4; i++)
-                       {
-                               j = randint1(p_ptr->hitdie);
-                               p_ptr->player_hp[0] += j;
-                       }
-
-                       /* Roll the hitpoint values */
-                       for (i = 1; i < PY_MAX_LEVEL; i++)
-                       {
-                               j = randint1(p_ptr->hitdie);
-                               p_ptr->player_hp[i] = p_ptr->player_hp[i - 1] + j;
-                       }
-
-                       /* XXX Could also require acceptable "mid-level" hitpoints */
-
-                       /* Require "valid" hitpoints at highest level */
-                       if (p_ptr->player_hp[PY_MAX_LEVEL - 1] < min_value) continue;
-                       if (p_ptr->player_hp[PY_MAX_LEVEL - 1] > max_value) continue;
-
-                       /* Acceptable */
-                       break;
-               }
-       }
+       if (roll_hitdie) do_cmd_rerate_aux();
 
        /* Initial hitpoints */
        p_ptr->mhp = p_ptr->player_hp[0];
index bc164c1..406f385 100644 (file)
@@ -692,6 +692,7 @@ extern void do_cmd_aim_wand(void);
 extern void do_cmd_use_staff(void);
 extern void do_cmd_zap_rod(void);
 extern void do_cmd_activate(void);
+extern void do_cmd_rerate_aux(void);
 extern void do_cmd_rerate(bool display);
 extern void ring_of_power(int dir);
 extern void do_cmd_use(void);
index e12a915..3d37b02 100644 (file)
 
 
 /*
- * Hack -- Rerate Hitpoints
+ * Roll the hitdie -- aux of do_cmd_rerate()
  */
-void do_cmd_rerate(bool display)
+void do_cmd_rerate_aux(void)
 {
-       int min_value, max_value, i, percent, j;
+       /* Minimum hitpoints at highest level */
+       int min_value = p_ptr->hitdie + ((PY_MAX_LEVEL + 2) * (p_ptr->hitdie + 1)) * 3 / 8;
 
-       min_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 3 / 8;
-       min_value += p_ptr->hitdie;
+       /* Maximum hitpoints at highest level */
+       int max_value = p_ptr->hitdie + ((PY_MAX_LEVEL + 2) * (p_ptr->hitdie + 1)) * 5 / 8;
 
-       max_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 5 / 8;
-       max_value += p_ptr->hitdie;
+       int i;
 
        /* Rerate */
        while (1)
        {
+               /* Pre-calculate level 1 hitdice */
                p_ptr->player_hp[0] = p_ptr->hitdie;
 
                for (i = 1; i < 4; i++)
                {
-                       j = randint1(p_ptr->hitdie);
-                       p_ptr->player_hp[0] += j;
+                       p_ptr->player_hp[0] += randint1(p_ptr->hitdie);
                }
 
-               /* Collect values */
+               /* Roll the hitpoint values */
                for (i = 1; i < PY_MAX_LEVEL; i++)
                {
-                       p_ptr->player_hp[i] = randint1(p_ptr->hitdie);
-                       p_ptr->player_hp[i] += p_ptr->player_hp[i - 1];
+                       p_ptr->player_hp[i] = p_ptr->player_hp[i - 1] + randint1(p_ptr->hitdie);
                }
 
-               /* Legal values */
+               /* Require "valid" hitpoints at highest level */
                if ((p_ptr->player_hp[PY_MAX_LEVEL - 1] >= min_value) &&
                    (p_ptr->player_hp[PY_MAX_LEVEL - 1] <= max_value)) break;
        }
+}
+
+
+/*
+ * Hack -- Rerate Hitpoints
+ */
+void do_cmd_rerate(bool display)
+{
+       int percent;
+
+       /* Rerate */
+       do_cmd_rerate_aux();
 
        percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) /
                (2 * p_ptr->hitdie +