From: nothere Date: Sun, 11 May 2003 13:56:16 +0000 (+0000) Subject: HDを振る処理はキャラクタメイク時と新生等のdo_cmd_rerate()時で共通の関 X-Git-Tag: v2.1.2~1543 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=fc6c8b560d94e8867b62e8323024eefdc869b130;p=hengbandforosx%2Fhengbandosx.git HDを振る処理はキャラクタメイク時と新生等のdo_cmd_rerate()時で共通の関 数を呼ぶように変更. --- diff --git a/src/birth.c b/src/birth.c index 08ffbb0cf..5c469c9d9 100644 --- a/src/birth.c +++ b/src/birth.c @@ -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]; diff --git a/src/externs.h b/src/externs.h index bc164c1ec..406f385ff 100644 --- a/src/externs.h +++ b/src/externs.h @@ -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); diff --git a/src/wizard2.c b/src/wizard2.c index e12a915c7..3d37b024c 100644 --- a/src/wizard2.c +++ b/src/wizard2.c @@ -14,40 +14,51 @@ /* - * 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 +