変愚蛮怒のメインリポジトリです
Revision | fc6c8b560d94e8867b62e8323024eefdc869b130 (tree) |
---|---|
Time | 2003-05-11 22:56:16 |
Author | nothere <nothere@0568...> |
Commiter | nothere |
HDを振る処理はキャラクタメイク時と新生等のdo_cmd_rerate()時で共通の関
数を呼ぶように変更.
@@ -2726,7 +2726,7 @@ void get_max_stats(void) | ||
2726 | 2726 | */ |
2727 | 2727 | static void get_extra(bool roll_hitdie) |
2728 | 2728 | { |
2729 | - int i, j, min_value, max_value; | |
2729 | + int i, j; | |
2730 | 2730 | |
2731 | 2731 | /* Experience factor */ |
2732 | 2732 | if (p_ptr->prace == RACE_ANDROID) p_ptr->expfact = rp_ptr->r_exp; |
@@ -2766,45 +2766,7 @@ static void get_extra(bool roll_hitdie) | ||
2766 | 2766 | p_ptr->hitdie = rp_ptr->r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp; |
2767 | 2767 | |
2768 | 2768 | /* Roll for hit point unless quick-start */ |
2769 | - if (roll_hitdie) | |
2770 | - { | |
2771 | - /* Minimum hitpoints at highest level */ | |
2772 | - min_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 3 / 8; | |
2773 | - min_value += p_ptr->hitdie; | |
2774 | - | |
2775 | - /* Maximum hitpoints at highest level */ | |
2776 | - max_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 5 / 8; | |
2777 | - max_value += p_ptr->hitdie; | |
2778 | - | |
2779 | - /* Roll out the hitpoints */ | |
2780 | - while (TRUE) | |
2781 | - { | |
2782 | - /* Pre-calculate level 1 hitdice */ | |
2783 | - p_ptr->player_hp[0] = p_ptr->hitdie; | |
2784 | - | |
2785 | - for (i = 1; i < 4; i++) | |
2786 | - { | |
2787 | - j = randint1(p_ptr->hitdie); | |
2788 | - p_ptr->player_hp[0] += j; | |
2789 | - } | |
2790 | - | |
2791 | - /* Roll the hitpoint values */ | |
2792 | - for (i = 1; i < PY_MAX_LEVEL; i++) | |
2793 | - { | |
2794 | - j = randint1(p_ptr->hitdie); | |
2795 | - p_ptr->player_hp[i] = p_ptr->player_hp[i - 1] + j; | |
2796 | - } | |
2797 | - | |
2798 | - /* XXX Could also require acceptable "mid-level" hitpoints */ | |
2799 | - | |
2800 | - /* Require "valid" hitpoints at highest level */ | |
2801 | - if (p_ptr->player_hp[PY_MAX_LEVEL - 1] < min_value) continue; | |
2802 | - if (p_ptr->player_hp[PY_MAX_LEVEL - 1] > max_value) continue; | |
2803 | - | |
2804 | - /* Acceptable */ | |
2805 | - break; | |
2806 | - } | |
2807 | - } | |
2769 | + if (roll_hitdie) do_cmd_rerate_aux(); | |
2808 | 2770 | |
2809 | 2771 | /* Initial hitpoints */ |
2810 | 2772 | p_ptr->mhp = p_ptr->player_hp[0]; |
@@ -692,6 +692,7 @@ extern void do_cmd_aim_wand(void); | ||
692 | 692 | extern void do_cmd_use_staff(void); |
693 | 693 | extern void do_cmd_zap_rod(void); |
694 | 694 | extern void do_cmd_activate(void); |
695 | +extern void do_cmd_rerate_aux(void); | |
695 | 696 | extern void do_cmd_rerate(bool display); |
696 | 697 | extern void ring_of_power(int dir); |
697 | 698 | extern void do_cmd_use(void); |
@@ -14,40 +14,51 @@ | ||
14 | 14 | |
15 | 15 | |
16 | 16 | /* |
17 | - * Hack -- Rerate Hitpoints | |
17 | + * Roll the hitdie -- aux of do_cmd_rerate() | |
18 | 18 | */ |
19 | -void do_cmd_rerate(bool display) | |
19 | +void do_cmd_rerate_aux(void) | |
20 | 20 | { |
21 | - int min_value, max_value, i, percent, j; | |
21 | + /* Minimum hitpoints at highest level */ | |
22 | + int min_value = p_ptr->hitdie + ((PY_MAX_LEVEL + 2) * (p_ptr->hitdie + 1)) * 3 / 8; | |
22 | 23 | |
23 | - min_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 3 / 8; | |
24 | - min_value += p_ptr->hitdie; | |
24 | + /* Maximum hitpoints at highest level */ | |
25 | + int max_value = p_ptr->hitdie + ((PY_MAX_LEVEL + 2) * (p_ptr->hitdie + 1)) * 5 / 8; | |
25 | 26 | |
26 | - max_value = ((PY_MAX_LEVEL+2) * (p_ptr->hitdie + 1)) * 5 / 8; | |
27 | - max_value += p_ptr->hitdie; | |
27 | + int i; | |
28 | 28 | |
29 | 29 | /* Rerate */ |
30 | 30 | while (1) |
31 | 31 | { |
32 | + /* Pre-calculate level 1 hitdice */ | |
32 | 33 | p_ptr->player_hp[0] = p_ptr->hitdie; |
33 | 34 | |
34 | 35 | for (i = 1; i < 4; i++) |
35 | 36 | { |
36 | - j = randint1(p_ptr->hitdie); | |
37 | - p_ptr->player_hp[0] += j; | |
37 | + p_ptr->player_hp[0] += randint1(p_ptr->hitdie); | |
38 | 38 | } |
39 | 39 | |
40 | - /* Collect values */ | |
40 | + /* Roll the hitpoint values */ | |
41 | 41 | for (i = 1; i < PY_MAX_LEVEL; i++) |
42 | 42 | { |
43 | - p_ptr->player_hp[i] = randint1(p_ptr->hitdie); | |
44 | - p_ptr->player_hp[i] += p_ptr->player_hp[i - 1]; | |
43 | + p_ptr->player_hp[i] = p_ptr->player_hp[i - 1] + randint1(p_ptr->hitdie); | |
45 | 44 | } |
46 | 45 | |
47 | - /* Legal values */ | |
46 | + /* Require "valid" hitpoints at highest level */ | |
48 | 47 | if ((p_ptr->player_hp[PY_MAX_LEVEL - 1] >= min_value) && |
49 | 48 | (p_ptr->player_hp[PY_MAX_LEVEL - 1] <= max_value)) break; |
50 | 49 | } |
50 | +} | |
51 | + | |
52 | + | |
53 | +/* | |
54 | + * Hack -- Rerate Hitpoints | |
55 | + */ | |
56 | +void do_cmd_rerate(bool display) | |
57 | +{ | |
58 | + int percent; | |
59 | + | |
60 | + /* Rerate */ | |
61 | + do_cmd_rerate_aux(); | |
51 | 62 | |
52 | 63 | percent = (int)(((long)p_ptr->player_hp[PY_MAX_LEVEL - 1] * 200L) / |
53 | 64 | (2 * p_ptr->hitdie + |