OSDN Git Service

[Refactor] #37353 MP回復系の効果をrestore_mana()にまとめる。
authorDeskull <deskull@users.sourceforge.jp>
Thu, 27 Sep 2018 12:03:59 +0000 (21:03 +0900)
committerDeskull <deskull@users.sourceforge.jp>
Thu, 27 Sep 2018 12:03:59 +0000 (21:03 +0900)
Integrate some effects to restore_mana().

src/cmd-activate.c
src/cmd-quaff.c
src/cmd-usestaff.c
src/externs.h
src/realm-chaos.c
src/spells2.c

index eeb9399..655ca14 100644 (file)
@@ -1164,32 +1164,7 @@ bool activate_artifact(object_type *o_ptr)
        case ACT_CURE_MANA_FULL:
        {
                msg_format(_("%sが青白く光った...", "The %s glows pale..."), name);
-               if (p_ptr->pclass == CLASS_MAGIC_EATER)
-               {
-                       int i;
-                       for (i = 0; i < EATER_EXT * 2; i++)
-                       {
-                               p_ptr->magic_num1[i] += (p_ptr->magic_num2[i] < 10) ? EATER_CHARGE * 3 : p_ptr->magic_num2[i] * EATER_CHARGE / 3;
-                               if (p_ptr->magic_num1[i] > p_ptr->magic_num2[i] * EATER_CHARGE) p_ptr->magic_num1[i] = p_ptr->magic_num2[i] * EATER_CHARGE;
-                       }
-                       for (; i < EATER_EXT * 3; i++)
-                       {
-                               KIND_OBJECT_IDX k_idx = lookup_kind(TV_ROD, i - EATER_EXT * 2);
-                               p_ptr->magic_num1[i] -= ((p_ptr->magic_num2[i] < 10) ? EATER_ROD_CHARGE * 3 : p_ptr->magic_num2[i] * EATER_ROD_CHARGE / 3)*k_info[k_idx].pval;
-                               if (p_ptr->magic_num1[i] < 0) p_ptr->magic_num1[i] = 0;
-                       }
-                       msg_print(_("頭がハッキリとした。", "You feel your head clear."));
-                       p_ptr->window |= (PW_PLAYER);
-               }
-               else if (p_ptr->csp < p_ptr->msp)
-               {
-                       p_ptr->csp = p_ptr->msp;
-                       p_ptr->csp_frac = 0;
-                       msg_print(_("頭がハッキリとした。", "You feel your head clear."));
-                       p_ptr->redraw |= (PR_MANA);
-                       p_ptr->window |= (PW_PLAYER);
-                       p_ptr->window |= (PW_SPELL);
-               }
+               restore_mana(TRUE);
                break;
        }
 
index 65c9f1a..bec5d35 100644 (file)
@@ -359,36 +359,7 @@ void do_cmd_quaff_potion_aux(int item)
                        break;\r
 \r
                case SV_POTION_RESTORE_MANA:\r
-                       if (p_ptr->pclass == CLASS_MAGIC_EATER)\r
-                       {\r
-                               int i;\r
-                               for (i = 0; i < EATER_EXT*2; i++)\r
-                               {\r
-                                       p_ptr->magic_num1[i] += (p_ptr->magic_num2[i] < 10) ? EATER_CHARGE * 3 : p_ptr->magic_num2[i]*EATER_CHARGE/3;\r
-                                       if (p_ptr->magic_num1[i] > p_ptr->magic_num2[i]*EATER_CHARGE) p_ptr->magic_num1[i] = p_ptr->magic_num2[i]*EATER_CHARGE;\r
-                               }\r
-                               for (; i < EATER_EXT*3; i++)\r
-                               {\r
-                                       KIND_OBJECT_IDX k_idx = lookup_kind(TV_ROD, i-EATER_EXT*2);\r
-                                       p_ptr->magic_num1[i] -= ((p_ptr->magic_num2[i] < 10) ? EATER_ROD_CHARGE*3 : p_ptr->magic_num2[i]*EATER_ROD_CHARGE/3)*k_info[k_idx].pval;\r
-                                       if (p_ptr->magic_num1[i] < 0) p_ptr->magic_num1[i] = 0;\r
-                               }\r
-                               msg_print(_("頭がハッキリとした。", "You feel your head clear."));\r
-                               p_ptr->window |= (PW_PLAYER);\r
-                               ident = TRUE;\r
-                       }\r
-                       else if (p_ptr->csp < p_ptr->msp)\r
-                       {\r
-                               p_ptr->csp = p_ptr->msp;\r
-                               p_ptr->csp_frac = 0;\r
-                               msg_print(_("頭がハッキリとした。", "You feel your head clear."));\r
-\r
-                               p_ptr->redraw |= (PR_MANA);\r
-                               p_ptr->window |= (PW_PLAYER);\r
-                               p_ptr->window |= (PW_SPELL);\r
-                               ident = TRUE;\r
-                       }\r
-                       if (set_shero(0,TRUE)) ident = TRUE;\r
+                       ident = restore_mana(TRUE);\r
                        break;\r
 \r
                case SV_POTION_RESTORE_EXP:\r
index 6c601af..69a39bb 100644 (file)
@@ -203,17 +203,7 @@ int staff_effect(OBJECT_SUBTYPE_VALUE sval, bool *use_charge, bool powerful, boo
        case SV_STAFF_THE_MAGI:\r
        {\r
                if (do_res_stat(A_INT)) ident = TRUE;\r
-               if (p_ptr->csp < p_ptr->msp)\r
-               {\r
-                       p_ptr->csp = p_ptr->msp;\r
-                       p_ptr->csp_frac = 0;\r
-                       ident = TRUE;\r
-                       msg_print(_("頭がハッキリとした。", "You feel your head clear."));\r
-\r
-                       p_ptr->redraw |= (PR_MANA);\r
-                       p_ptr->window |= (PW_PLAYER);\r
-                       p_ptr->window |= (PW_SPELL);\r
-               }\r
+               ident |= restore_mana(FALSE);\r
                if (set_shero(0, TRUE)) ident = TRUE;\r
                break;\r
        }\r
index 60952f5..0fe23ec 100644 (file)
@@ -1176,6 +1176,7 @@ extern bool_hack heroism(int base);
 extern bool_hack cure_light_wounds(int dice, int sides);
 extern bool_hack cure_serious_wounds(int dice, int sides);
 extern bool_hack cure_critical_wounds(HIT_POINT pow);
+extern bool_hack restore_mana(bool_hack magic_eater);
 
 /* spells3.c */
 extern bool teleport_away(MONSTER_IDX m_idx, int dis, BIT_FLAGS mode);
index a98e352..59520da 100644 (file)
@@ -369,7 +369,6 @@ cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        int power = 90;\r
 \r
                        if (info) return info_power(power);\r
-\r
                        if (cast)\r
                        {\r
                                if (!recharge(power)) return NULL;\r
@@ -489,7 +488,6 @@ cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        if (cast)\r
                        {\r
                                if (!get_aim_dir(&dir)) return NULL;\r
-\r
                                fire_beam(GF_GRAVITY, dir, damroll(dice, sides));\r
                        }\r
                }\r
@@ -569,7 +567,6 @@ cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS mode)
                        if (cast)\r
                        {\r
                                if (!get_aim_dir(&dir)) return NULL;\r
-\r
                                fire_ball(GF_MANA, dir, dam, rad);\r
                        }\r
                }\r
@@ -596,7 +593,7 @@ cptr do_chaos_spell(SPELL_IDX spell, BIT_FLAGS mode)
 \r
        case 31:\r
                if (name) return _("\8b\95\96³\8f¢\97\88", "Call the Void");\r
-               if (desc) return _("\8e©\95ª\82É\8eü\88Í\82É\8cü\82©\82Á\82Ä\81A\83\8d\83P\83b\83g\81A\8f\83\90\88\82È\96\82\97Í\82Ì\8b\85\81A\95ú\8eË\90«\94p\8aü\95¨\82Ì\8b\85\82ð\95ú\82Â\81B\82½\82¾\82µ\81A\95Ç\82É\97×\90Ú\82µ\82Ä\8eg\97p\82·\82é\82Æ\8dL\94Í\88Í\82ð\94j\89ó\82·\82é\81B",\r
+               if (desc) return _("\8e©\95ª\82Ì\8eü\88Í\82É\8cü\82©\82Á\82Ä\81A\83\8d\83P\83b\83g\81A\8f\83\90\88\82È\96\82\97Í\82Ì\8b\85\81A\95ú\8eË\90«\94p\8aü\95¨\82Ì\8b\85\82ð\95ú\82Â\81B\82½\82¾\82µ\81A\95Ç\82É\97×\90Ú\82µ\82Ä\8eg\97p\82·\82é\82Æ\8dL\94Í\88Í\82ð\94j\89ó\82·\82é\81B",\r
                        "Fires rockets, mana balls and nuclear waste balls in all directions each unless you are not adjacent to any walls. Otherwise *destroys* huge area.");\r
 \r
                {\r
index 7b6f9b9..7d8e3e5 100644 (file)
@@ -5048,3 +5048,39 @@ bool_hack cure_critical_wounds(HIT_POINT pow)
        if (set_shero(0, TRUE)) ident = TRUE;
        return ident;
 }
+
+bool_hack restore_mana(bool_hack magic_eater)
+{
+       bool_hack ident = FALSE;
+
+       if (p_ptr->pclass == CLASS_MAGIC_EATER && magic_eater)
+       {
+               int i;
+               for (i = 0; i < EATER_EXT * 2; i++)
+               {
+                       p_ptr->magic_num1[i] += (p_ptr->magic_num2[i] < 10) ? EATER_CHARGE * 3 : p_ptr->magic_num2[i] * EATER_CHARGE / 3;
+                       if (p_ptr->magic_num1[i] > p_ptr->magic_num2[i] * EATER_CHARGE) p_ptr->magic_num1[i] = p_ptr->magic_num2[i] * EATER_CHARGE;
+               }
+               for (; i < EATER_EXT * 3; i++)
+               {
+                       KIND_OBJECT_IDX k_idx = lookup_kind(TV_ROD, i - EATER_EXT * 2);
+                       p_ptr->magic_num1[i] -= ((p_ptr->magic_num2[i] < 10) ? EATER_ROD_CHARGE * 3 : p_ptr->magic_num2[i] * EATER_ROD_CHARGE / 3)*k_info[k_idx].pval;
+                       if (p_ptr->magic_num1[i] < 0) p_ptr->magic_num1[i] = 0;
+               }
+               msg_print(_("頭がハッキリとした。", "You feel your head clear."));
+               p_ptr->window |= (PW_PLAYER);
+               ident = TRUE;
+       }
+       else if (p_ptr->csp < p_ptr->msp)
+       {
+               p_ptr->csp = p_ptr->msp;
+               p_ptr->csp_frac = 0;
+               msg_print(_("頭がハッキリとした。", "You feel your head clear."));
+               p_ptr->redraw |= (PR_MANA);
+               p_ptr->window |= (PW_PLAYER);
+               p_ptr->window |= (PW_SPELL);
+               ident = TRUE;
+       }
+
+       return ident;
+}
\ No newline at end of file