2 * @file learnt-info.cpp
6 #include "blue-magic/learnt-info.h"
7 #include "cmd-action/cmd-spell.h"
8 #include "lore/lore-calculator.h" //!< @todo 少し違和感.
9 #include "monster-race/race-ability-flags.h"
10 #include "mspell/mspell-damage-calculator.h"
11 #include "system/player-type-definition.h"
12 #include "term/z-form.h"
15 * @brief モンスター魔法をプレイヤーが使用する場合の換算レベル
16 * @param player_ptr プレイヤーへの参照ポインタ
19 PLAYER_LEVEL get_pseudo_monstetr_level(PlayerType *player_ptr)
21 PLAYER_LEVEL monster_level = player_ptr->lev + 40;
22 return (monster_level * monster_level - 1550) / 130;
26 * @brief 文字列に青魔導師の呪文の攻撃力を加える
27 * @param SPELL_NUM 呪文番号
28 * @param plev プレイヤーレベル
30 * @return std::string 潜在的な損傷の説明
32 static std::string set_bluemage_damage(PlayerType *player_ptr, MonsterAbilityType ms_type, PLAYER_LEVEL plev, concptr msg)
34 int base_damage = monspell_bluemage_damage(player_ptr, ms_type, plev, BASE_DAM);
35 int dice_num = monspell_bluemage_damage(player_ptr, ms_type, plev, DICE_NUM);
36 int dice_side = monspell_bluemage_damage(player_ptr, ms_type, plev, DICE_SIDE);
37 int dice_mult = monspell_bluemage_damage(player_ptr, ms_type, plev, DICE_MULT);
38 int dice_div = monspell_bluemage_damage(player_ptr, ms_type, plev, DICE_DIV);
39 return format(" %s %s", msg, dice_to_string(base_damage, dice_num, dice_side, dice_mult, dice_div).data());
43 * @brief 受け取ったモンスター魔法のIDに応じて青魔法の効果情報をまとめたフォーマットを返す
44 * @param player_ptr プレイヤーへの参照ポインタ
45 * @param power モンスター魔法のID
46 * @return std::string パワーについてのコメント
48 std::string learnt_info(PlayerType *player_ptr, MonsterAbilityType power)
50 PLAYER_LEVEL plev = get_pseudo_monstetr_level(player_ptr);
53 case MonsterAbilityType::BA_MANA:
54 case MonsterAbilityType::BA_DARK:
55 case MonsterAbilityType::BA_LITE:
56 return set_bluemage_damage(player_ptr, power, plev, KWD_DAM);
57 case MonsterAbilityType::ROCKET:
58 case MonsterAbilityType::SHOOT:
59 case MonsterAbilityType::BR_ACID:
60 case MonsterAbilityType::BR_ELEC:
61 case MonsterAbilityType::BR_FIRE:
62 case MonsterAbilityType::BR_COLD:
63 case MonsterAbilityType::BR_POIS:
64 case MonsterAbilityType::BR_NUKE:
65 case MonsterAbilityType::BR_NEXU:
66 case MonsterAbilityType::BR_TIME:
67 case MonsterAbilityType::BR_GRAV:
68 case MonsterAbilityType::BR_MANA:
69 case MonsterAbilityType::BR_NETH:
70 case MonsterAbilityType::BR_LITE:
71 case MonsterAbilityType::BR_DARK:
72 case MonsterAbilityType::BR_CONF:
73 case MonsterAbilityType::BR_SOUN:
74 case MonsterAbilityType::BR_CHAO:
75 case MonsterAbilityType::BR_DISE:
76 case MonsterAbilityType::BR_SHAR:
77 case MonsterAbilityType::BR_PLAS:
78 case MonsterAbilityType::BR_INER:
79 case MonsterAbilityType::BR_FORC:
80 case MonsterAbilityType::BR_DISI:
81 case MonsterAbilityType::BR_VOID:
82 case MonsterAbilityType::BR_ABYSS:
83 case MonsterAbilityType::BA_NUKE:
84 case MonsterAbilityType::BA_CHAO:
85 case MonsterAbilityType::BA_ACID:
86 case MonsterAbilityType::BA_ELEC:
87 case MonsterAbilityType::BA_FIRE:
88 case MonsterAbilityType::BA_COLD:
89 case MonsterAbilityType::BA_POIS:
90 case MonsterAbilityType::BA_NETH:
91 case MonsterAbilityType::BA_WATE:
92 case MonsterAbilityType::BA_VOID:
93 case MonsterAbilityType::BA_ABYSS:
94 case MonsterAbilityType::BA_METEOR:
95 return set_bluemage_damage(player_ptr, power, plev, KWD_DAM);
96 case MonsterAbilityType::DRAIN_MANA:
97 return set_bluemage_damage(player_ptr, power, plev, KWD_HEAL);
98 case MonsterAbilityType::MIND_BLAST:
99 case MonsterAbilityType::BRAIN_SMASH:
100 case MonsterAbilityType::CAUSE_1:
101 case MonsterAbilityType::CAUSE_2:
102 case MonsterAbilityType::CAUSE_3:
103 case MonsterAbilityType::CAUSE_4:
104 case MonsterAbilityType::BO_ACID:
105 case MonsterAbilityType::BO_ELEC:
106 case MonsterAbilityType::BO_FIRE:
107 case MonsterAbilityType::BO_COLD:
108 case MonsterAbilityType::BO_NETH:
109 case MonsterAbilityType::BO_WATE:
110 case MonsterAbilityType::BO_MANA:
111 case MonsterAbilityType::BO_PLAS:
112 case MonsterAbilityType::BO_ABYSS:
113 case MonsterAbilityType::BO_VOID:
114 case MonsterAbilityType::BO_ICEE:
115 case MonsterAbilityType::BO_METEOR:
116 case MonsterAbilityType::MISSILE:
117 return set_bluemage_damage(player_ptr, power, plev, KWD_DAM);
118 case MonsterAbilityType::HASTE:
119 return format(" %sd%d+%d", KWD_DURATION, 20 + plev, plev);
120 case MonsterAbilityType::HEAL:
121 return set_bluemage_damage(player_ptr, power, plev, KWD_HEAL);
122 case MonsterAbilityType::INVULNER:
123 return format(" %sd7+7", KWD_DURATION);
124 case MonsterAbilityType::BLINK:
125 return format(" %s10", KWD_SPHERE);
126 case MonsterAbilityType::TPORT:
127 return format(" %s%d", KWD_SPHERE, plev * 5);
128 case MonsterAbilityType::PSY_SPEAR:
129 return set_bluemage_damage(player_ptr, power, plev, KWD_DAM);
130 case MonsterAbilityType::RAISE_DEAD:
131 return format(" %s5", KWD_SPHERE);
133 return std::string();