OSDN Git Service

[Refactor] #2204 HIT_POINTエイリアスをintに揃えた
[hengbandforosx/hengbandosx.git] / src / realm / realm-nature.cpp
index e23c8c3..f7ae208 100644 (file)
@@ -1,19 +1,19 @@
 #include "realm/realm-nature.h"
+#include "avatar/avatar.h"
 #include "cmd-action/cmd-spell.h"
-#include "core/hp-mp-processor.h"
 #include "effect/effect-characteristics.h"
 #include "effect/effect-processor.h"
 #include "effect/spells-effect-util.h"
 #include "floor/floor-object.h"
+#include "hpmp/hp-mp-processor.h"
 #include "monster-floor/monster-summon.h"
 #include "monster-floor/place-monster-types.h"
-#include "object/object-generator.h"
 #include "object/object-kind-hook.h"
 #include "player-attack/player-attack.h"
-#include "player-info/avatar.h"
+#include "player-base/player-race.h"
+#include "player-info/race-info.h"
+#include "player-info/race-types.h"
 #include "player/player-damage.h"
-#include "player/player-race-types.h"
-#include "player/player-race.h"
 #include "player/player-status-flags.h"
 #include "spell-kind/earthquake.h"
 #include "spell-kind/spells-beam.h"
@@ -27,7 +27,7 @@
 #include "spell-kind/spells-perception.h"
 #include "spell-kind/spells-sight.h"
 #include "spell-realm/spells-nature.h"
-#include "spell/spell-types.h"
+#include "effect/attribute-types.h"
 #include "spell/spells-diceroll.h"
 #include "spell/spells-object.h"
 #include "spell/spells-status.h"
 
 /*!
  * @brief 自然領域魔法の各処理を行う
- * @param caster_ptr プレーヤーへの参照ポインタ
+ * @param player_ptr プレイヤーへの参照ポインタ
  * @param spell 魔法ID
- * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST)
- * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。
+ * @param mode 処理内容 (SpellProcessType::NAME / SPELL_DESC / SpellProcessType::INFO / SpellProcessType::CAST)
+ * @return SpellProcessType::NAME / SPELL_DESC / SpellProcessType::INFO 時には文字列ポインタを返す。SpellProcessType::CAST時はnullptr文字列を返す。
  */
-concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mode)
+concptr do_nature_spell(PlayerType *player_ptr, SPELL_IDX spell, SpellProcessType mode)
 {
-    bool name = (mode == SPELL_NAME) ? TRUE : FALSE;
-    bool desc = (mode == SPELL_DESC) ? TRUE : FALSE;
-    bool info = (mode == SPELL_INFO) ? TRUE : FALSE;
-    bool cast = (mode == SPELL_CAST) ? TRUE : FALSE;
+    bool name = mode == SpellProcessType::NAME;
+    bool desc = mode == SpellProcessType::DESCRIPTION;
+    bool info = mode == SpellProcessType::INFO;
+    bool cast = mode == SpellProcessType::CAST;
 
     DIRECTION dir;
-    PLAYER_LEVEL plev = caster_ptr->lev;
+    PLAYER_LEVEL plev = player_ptr->lev;
 
     switch (spell) {
     case 0:
@@ -72,7 +72,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_radius(rad);
 
             if (cast) {
-                detect_monsters_normal(caster_ptr, rad);
+                detect_monsters_normal(player_ptr, rad);
             }
         }
         break;
@@ -94,10 +94,10 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
             if (cast) {
                 project_length = range;
 
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
 
-                fire_beam(caster_ptr, GF_ELEC, dir, damroll(dice, sides));
+                fire_beam(player_ptr, AttributeType::ELEC, dir, damroll(dice, sides));
             }
         }
         break;
@@ -115,9 +115,9 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_radius(rad);
 
             if (cast) {
-                detect_traps(caster_ptr, rad, TRUE);
-                detect_doors(caster_ptr, rad);
-                detect_stairs(caster_ptr, rad);
+                detect_traps(player_ptr, rad, true);
+                detect_doors(player_ptr, rad);
+                detect_stairs(player_ptr, rad);
             }
         }
         break;
@@ -130,14 +130,14 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
 
         {
             if (cast) {
-                object_type forge, *q_ptr = &forge;
+                ObjectType forge, *q_ptr = &forge;
                 msg_print(_("食料を生成した。", "A food ration is produced."));
 
                 /* Create the food ration */
-                object_prep(caster_ptr, q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
+                q_ptr->prep(lookup_kind(ItemKindType::FOOD, SV_FOOD_RATION));
 
                 /* Drop the object from heaven */
-                (void)drop_near(caster_ptr, q_ptr, -1, caster_ptr->y, caster_ptr->x);
+                (void)drop_near(player_ptr, q_ptr, -1, player_ptr->y, player_ptr->x);
             }
         }
         break;
@@ -157,11 +157,12 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_damage(dice, sides, 0);
 
             if (cast) {
-                lite_area(caster_ptr, damroll(dice, sides), rad);
+                lite_area(player_ptr, damroll(dice, sides), rad);
 
-                if (player_race_life(caster_ptr) == PlayerRaceLife::UNDEAD && player_race_has_flag(caster_ptr, TR_VUL_LITE) && !has_resist_lite(caster_ptr)) {
+                PlayerRace race(player_ptr);
+                if (race.life() == PlayerRaceLifeType::UNDEAD && race.tr_flags().has(TR_VUL_LITE) && !has_resist_lite(player_ptr)) {
                     msg_print(_("日の光があなたの肉体を焦がした!", "The daylight scorches your flesh!"));
-                    take_hit(caster_ptr, DAMAGE_NOESCAPE, damroll(2, 2), _("日の光", "daylight"));
+                    take_hit(player_ptr, DAMAGE_NOESCAPE, damroll(2, 2), _("日の光", "daylight"));
                 }
             }
         }
@@ -180,10 +181,10 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_power(power);
 
             if (cast) {
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
 
-                charm_animal(caster_ptr, dir, plev);
+                charm_animal(player_ptr, dir, plev);
             }
         }
         break;
@@ -203,9 +204,9 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_duration(base, base);
 
             if (cast) {
-                set_oppose_cold(caster_ptr, randint1(base) + base, FALSE);
-                set_oppose_fire(caster_ptr, randint1(base) + base, FALSE);
-                set_oppose_elec(caster_ptr, randint1(base) + base, FALSE);
+                set_oppose_cold(player_ptr, randint1(base) + base, false);
+                set_oppose_fire(player_ptr, randint1(base) + base, false);
+                set_oppose_elec(player_ptr, randint1(base) + base, false);
             }
         }
         break;
@@ -224,9 +225,10 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_heal(dice, sides, 0);
 
             if (cast) {
-                hp_player(caster_ptr, damroll(dice, sides));
-                set_cut(caster_ptr, 0);
-                set_poisoned(caster_ptr, 0);
+                BadStatusSetter bss(player_ptr);
+                hp_player(player_ptr, damroll(dice, sides));
+                (void)bss.cut(0);
+                (void)bss.poison(0);
             }
         }
         break;
@@ -246,10 +248,10 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_damage(dice, sides, base);
 
             if (cast) {
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
 
-                wall_to_mud(caster_ptr, dir, 20 + randint1(30));
+                wall_to_mud(player_ptr, dir, 20 + randint1(30));
             }
         }
         break;
@@ -268,9 +270,9 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_damage(dice, sides, 0);
 
             if (cast) {
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
-                fire_bolt_or_beam(caster_ptr, beam_chance(caster_ptr) - 10, GF_COLD, dir, damroll(dice, sides));
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
+                fire_bolt_or_beam(player_ptr, beam_chance(player_ptr) - 10, AttributeType::COLD, dir, damroll(dice, sides));
             }
         }
         break;
@@ -287,14 +289,14 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
             int rad2 = DETECT_RAD_DEFAULT;
 
             if (info)
-                return info_radius(MAX(rad1, rad2));
+                return info_radius(std::max(rad1, rad2));
 
             if (cast) {
-                map_area(caster_ptr, rad1);
-                detect_traps(caster_ptr, rad2, TRUE);
-                detect_doors(caster_ptr, rad2);
-                detect_stairs(caster_ptr, rad2);
-                detect_monsters_normal(caster_ptr, rad2);
+                map_area(player_ptr, rad1);
+                detect_traps(player_ptr, rad2, true);
+                detect_doors(player_ptr, rad2);
+                detect_stairs(player_ptr, rad2);
+                detect_monsters_normal(player_ptr, rad2);
             }
         }
         break;
@@ -313,9 +315,9 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_damage(dice, sides, 0);
 
             if (cast) {
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
-                fire_bolt_or_beam(caster_ptr, beam_chance(caster_ptr) - 10, GF_FIRE, dir, damroll(dice, sides));
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
+                fire_bolt_or_beam(player_ptr, beam_chance(player_ptr) - 10, AttributeType::FIRE, dir, damroll(dice, sides));
             }
         }
         break;
@@ -334,10 +336,10 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_damage(dice, sides, 0);
 
             if (cast) {
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
                 msg_print(_("太陽光線が現れた。", "A line of sunlight appears."));
-                lite_line(caster_ptr, dir, damroll(6, 8));
+                lite_line(player_ptr, dir, damroll(6, 8));
             }
         }
         break;
@@ -352,7 +354,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
             if (info)
                 return info_power(power);
             if (cast)
-                slow_monsters(caster_ptr, plev);
+                slow_monsters(player_ptr, plev);
         }
         break;
 
@@ -364,7 +366,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
 
         {
             if (cast) {
-                if (!(summon_specific(caster_ptr, -1, caster_ptr->y, caster_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET)))) {
+                if (!(summon_specific(player_ptr, -1, player_ptr->y, player_ptr->x, plev, SUMMON_ANIMAL_RANGER, (PM_ALLOW_GROUP | PM_FORCE_PET)))) {
                     msg_print(_("動物は現れなかった。", "No animals arrive."));
                 }
                 break;
@@ -382,7 +384,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
             if (info)
                 return info_heal(0, 0, heal);
             if (cast)
-                (void)cure_critical_wounds(caster_ptr, heal);
+                (void)cure_critical_wounds(player_ptr, heal);
         }
         break;
 
@@ -394,7 +396,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
 
         {
             if (cast) {
-                stair_creation(caster_ptr);
+                stair_creation(player_ptr);
             }
         }
         break;
@@ -413,7 +415,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_duration(base, sides);
 
             if (cast) {
-                set_shield(caster_ptr, randint1(sides) + base, FALSE);
+                set_shield(player_ptr, randint1(sides) + base, false);
             }
         }
         break;
@@ -433,11 +435,11 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_duration(base, base);
 
             if (cast) {
-                set_oppose_acid(caster_ptr, randint1(base) + base, FALSE);
-                set_oppose_elec(caster_ptr, randint1(base) + base, FALSE);
-                set_oppose_fire(caster_ptr, randint1(base) + base, FALSE);
-                set_oppose_cold(caster_ptr, randint1(base) + base, FALSE);
-                set_oppose_pois(caster_ptr, randint1(base) + base, FALSE);
+                set_oppose_acid(player_ptr, randint1(base) + base, false);
+                set_oppose_elec(player_ptr, randint1(base) + base, false);
+                set_oppose_fire(player_ptr, randint1(base) + base, false);
+                set_oppose_cold(player_ptr, randint1(base) + base, false);
+                set_oppose_pois(player_ptr, randint1(base) + base, false);
             }
         }
         break;
@@ -450,7 +452,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
 
         {
             if (cast) {
-                tree_creation(caster_ptr, caster_ptr->y, caster_ptr->x);
+                tree_creation(player_ptr, player_ptr->y, player_ptr->x);
             }
         }
         break;
@@ -466,7 +468,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
             if (info)
                 return info_power(power);
             if (cast)
-                charm_animals(caster_ptr, power);
+                charm_animals(player_ptr, power);
         }
         break;
 
@@ -478,8 +480,8 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
 
         {
             if (cast) {
-                if (!identify_fully(caster_ptr, FALSE, TV_NONE))
-                    return NULL;
+                if (!identify_fully(player_ptr, false))
+                    return nullptr;
             }
         }
         break;
@@ -492,7 +494,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
 
         {
             if (cast) {
-                wall_stone(caster_ptr);
+                wall_stone(player_ptr);
             }
         }
         break;
@@ -505,8 +507,8 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
 
         {
             if (cast) {
-                if (!rustproof(caster_ptr))
-                    return NULL;
+                if (!rustproof(player_ptr))
+                    return nullptr;
             }
         }
         break;
@@ -525,7 +527,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return info_radius(rad);
 
             if (cast) {
-                earthquake(caster_ptr, caster_ptr->y, caster_ptr->x, rad, 0);
+                earthquake(player_ptr, player_ptr->y, player_ptr->x, rad, 0);
             }
         }
         break;
@@ -536,7 +538,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
         if (desc)
             return _("全方向に向かって攻撃する。", "Attacks all adjacent monsters.");
         if (cast)
-            massacre(caster_ptr);
+            massacre(player_ptr);
         break;
 
     case 26:
@@ -546,17 +548,17 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
             return _("巨大な冷気の球を放つ。", "Fires a huge ball of cold.");
 
         {
-            HIT_POINT dam = 70 + plev * 3 / 2;
+            int dam = 70 + plev * 3 / 2;
             POSITION rad = plev / 12 + 1;
 
             if (info)
                 return info_damage(0, 0, dam);
 
             if (cast) {
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
 
-                fire_ball(caster_ptr, GF_COLD, dir, dam, rad);
+                fire_ball(player_ptr, AttributeType::COLD, dir, dam, rad);
             }
         }
         break;
@@ -568,16 +570,16 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
             return _("巨大な電撃の球を放つ。", "Fires a huge electric ball.");
 
         {
-            HIT_POINT dam = 90 + plev * 3 / 2;
+            int dam = 90 + plev * 3 / 2;
             POSITION rad = plev / 12 + 1;
 
             if (info)
                 return info_damage(0, 0, dam);
 
             if (cast) {
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
-                fire_ball(caster_ptr, GF_ELEC, dir, dam, rad);
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
+                fire_ball(player_ptr, AttributeType::ELEC, dir, dam, rad);
                 break;
             }
         }
@@ -590,16 +592,16 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
             return _("巨大な水の球を放つ。", "Fires a huge ball of water.");
 
         {
-            HIT_POINT dam = 100 + plev * 3 / 2;
+            int dam = 100 + plev * 3 / 2;
             POSITION rad = plev / 12 + 1;
 
             if (info)
                 return info_damage(0, 0, dam);
 
             if (cast) {
-                if (!get_aim_dir(caster_ptr, &dir))
-                    return NULL;
-                fire_ball(caster_ptr, GF_WATER, dir, dam, rad);
+                if (!get_aim_dir(player_ptr, &dir))
+                    return nullptr;
+                fire_ball(player_ptr, AttributeType::WATER, dir, dam, rad);
             }
         }
         break;
@@ -612,21 +614,22 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 "Generates ball of light centered on you. Maps and lights whole dungeon level. Knows all objects location.");
 
         {
-            HIT_POINT dam = 150;
+            int dam = 150;
             POSITION rad = 8;
 
             if (info)
                 return info_damage(0, 0, dam / 2);
 
             if (cast) {
-                fire_ball(caster_ptr, GF_LITE, 0, dam, rad);
-                chg_virtue(caster_ptr, V_KNOWLEDGE, 1);
-                chg_virtue(caster_ptr, V_ENLIGHTEN, 1);
-                wiz_lite(caster_ptr, FALSE);
+                fire_ball(player_ptr, AttributeType::LITE, 0, dam, rad);
+                chg_virtue(player_ptr, V_KNOWLEDGE, 1);
+                chg_virtue(player_ptr, V_ENLIGHTEN, 1);
+                wiz_lite(player_ptr, false);
 
-                if (player_race_life(caster_ptr) == PlayerRaceLife::UNDEAD && player_race_has_flag(caster_ptr, TR_VUL_LITE) && !has_resist_lite(caster_ptr)) {
+                PlayerRace race(player_ptr);
+                if (race.life() == PlayerRaceLifeType::UNDEAD && race.tr_flags().has(TR_VUL_LITE) && !has_resist_lite(player_ptr)) {
                     msg_print(_("日光があなたの肉体を焦がした!", "The sunlight scorches your flesh!"));
-                    take_hit(caster_ptr, DAMAGE_NOESCAPE, 50, _("日光", "sunlight"));
+                    take_hit(player_ptr, DAMAGE_NOESCAPE, 50, _("日光", "sunlight"));
                 }
             }
         }
@@ -640,7 +643,7 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
 
         {
             if (cast) {
-                brand_weapon(caster_ptr, randint0(2));
+                brand_weapon(player_ptr, randint0(2));
             }
         }
         break;
@@ -662,9 +665,9 @@ concptr do_nature_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mod
                 return format("%s%d+%d", KWD_DAM, d_dam, b_dam / 2);
 
             if (cast) {
-                dispel_monsters(caster_ptr, d_dam);
-                earthquake(caster_ptr, caster_ptr->y, caster_ptr->x, q_rad, 0);
-                project(caster_ptr, 0, b_rad, caster_ptr->y, caster_ptr->x, b_dam, GF_DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM);
+                dispel_monsters(player_ptr, d_dam);
+                earthquake(player_ptr, player_ptr->y, player_ptr->x, q_rad, 0);
+                project(player_ptr, 0, b_rad, player_ptr->y, player_ptr->x, b_dam, AttributeType::DISINTEGRATE, PROJECT_KILL | PROJECT_ITEM);
             }
         }
         break;