OSDN Git Service

Merge branch 'feature/english-correction' into develop
[hengband/hengband.git] / src / blue-magic / learnt-info.c
1 #include "blue-magic/learnt-info.h"
2 #include "cmd-action/cmd-spell.h"
3 #include "lore/lore-calculator.h" // todo 少し違和感.
4 #include "mspell/mspell-damage-calculator.h"
5 #include "mspell/mspell-type.h"
6
7 /*!
8  * @brief モンスター魔法をプレイヤーが使用する場合の換算レベル
9  * @param caster_ptr プレーヤーへの参照ポインタ
10  * @param 換算レベル
11  */
12 PLAYER_LEVEL get_pseudo_monstetr_level(player_type *caster_ptr)
13 {
14     PLAYER_LEVEL monster_level = caster_ptr->lev + 40;
15     return (monster_level * monster_level - 1550) / 130;
16 }
17
18 /*!
19  * @brief 文字列に青魔導師の呪文の攻撃力を加える
20  * @param SPELL_NUM 呪文番号
21  * @param plev プレイヤーレベル
22  * @param msg 表示する文字列
23  * @param tmp 返すメッセージを格納する配列
24  * @return なし
25  */
26 static void set_bluemage_damage(player_type *learner_type, monster_spell_type ms_type, PLAYER_LEVEL plev, concptr msg, char *tmp)
27 {
28     int base_damage = monspell_bluemage_damage(learner_type, ms_type, plev, BASE_DAM);
29     int dice_num = monspell_bluemage_damage(learner_type, ms_type, plev, DICE_NUM);
30     int dice_side = monspell_bluemage_damage(learner_type, ms_type, plev, DICE_SIDE);
31     int dice_mult = monspell_bluemage_damage(learner_type, ms_type, plev, DICE_MULT);
32     int dice_div = monspell_bluemage_damage(learner_type, ms_type, plev, DICE_DIV);
33     char dmg_str[80];
34     dice_to_string(base_damage, dice_num, dice_side, dice_mult, dice_div, dmg_str);
35     sprintf(tmp, " %s %s", msg, dmg_str);
36 }
37
38 /*!
39  * @brief 受け取ったモンスター魔法のIDに応じて青魔法の効果情報をまとめたフォーマットを返す
40  * @param learner_ptr プレーヤーへの参照ポインタ
41  * @param p 情報を返す文字列参照ポインタ
42  * @param power モンスター魔法のID
43  * @return なし
44  */
45 void learnt_info(player_type *learner_ptr, char *p, int power)
46 {
47     PLAYER_LEVEL plev = get_pseudo_monstetr_level(learner_ptr);
48
49     strcpy(p, "");
50
51     switch (power) {
52     case MS_SHRIEK:
53     case MS_XXX1:
54     case MS_XXX2:
55     case MS_XXX3:
56     case MS_XXX4:
57     case MS_SCARE:
58     case MS_BLIND:
59     case MS_CONF:
60     case MS_SLOW:
61     case MS_SLEEP:
62     case MS_HAND_DOOM:
63     case MS_WORLD:
64     case MS_SPECIAL:
65     case MS_TELE_TO:
66     case MS_TELE_AWAY:
67     case MS_TELE_LEVEL:
68     case MS_DARKNESS:
69     case MS_MAKE_TRAP:
70     case MS_FORGET:
71     case MS_S_KIN:
72     case MS_S_CYBER:
73     case MS_S_MONSTER:
74     case MS_S_MONSTERS:
75     case MS_S_ANT:
76     case MS_S_SPIDER:
77     case MS_S_HOUND:
78     case MS_S_HYDRA:
79     case MS_S_ANGEL:
80     case MS_S_DEMON:
81     case MS_S_UNDEAD:
82     case MS_S_DRAGON:
83     case MS_S_HI_UNDEAD:
84     case MS_S_HI_DRAGON:
85     case MS_S_AMBERITE:
86     case MS_S_UNIQUE:
87         break;
88     case MS_BALL_MANA:
89     case MS_BALL_DARK:
90     case MS_STARBURST:
91         set_bluemage_damage(learner_ptr, power, plev, KWD_DAM, p);
92         break;
93     case MS_DISPEL:
94         break;
95     case MS_ROCKET:
96     case MS_SHOOT:
97     case MS_BR_ACID:
98     case MS_BR_ELEC:
99     case MS_BR_FIRE:
100     case MS_BR_COLD:
101     case MS_BR_POIS:
102     case MS_BR_NUKE:
103     case MS_BR_NEXUS:
104     case MS_BR_TIME:
105     case MS_BR_GRAVITY:
106     case MS_BR_MANA:
107     case MS_BR_NETHER:
108     case MS_BR_LITE:
109     case MS_BR_DARK:
110     case MS_BR_CONF:
111     case MS_BR_SOUND:
112     case MS_BR_CHAOS:
113     case MS_BR_DISEN:
114     case MS_BR_SHARDS:
115     case MS_BR_PLASMA:
116     case MS_BR_INERTIA:
117     case MS_BR_FORCE:
118     case MS_BR_DISI:
119     case MS_BALL_NUKE:
120     case MS_BALL_CHAOS:
121     case MS_BALL_ACID:
122     case MS_BALL_ELEC:
123     case MS_BALL_FIRE:
124     case MS_BALL_COLD:
125     case MS_BALL_POIS:
126     case MS_BALL_NETHER:
127     case MS_BALL_WATER:
128         set_bluemage_damage(learner_ptr, power, plev, KWD_DAM, p);
129         break;
130     case MS_DRAIN_MANA:
131         set_bluemage_damage(learner_ptr, power, plev, KWD_HEAL, p);
132         break;
133     case MS_MIND_BLAST:
134     case MS_BRAIN_SMASH:
135     case MS_CAUSE_1:
136     case MS_CAUSE_2:
137     case MS_CAUSE_3:
138     case MS_CAUSE_4:
139     case MS_BOLT_ACID:
140     case MS_BOLT_ELEC:
141     case MS_BOLT_FIRE:
142     case MS_BOLT_COLD:
143     case MS_BOLT_NETHER:
144     case MS_BOLT_WATER:
145     case MS_BOLT_MANA:
146     case MS_BOLT_PLASMA:
147     case MS_BOLT_ICE:
148     case MS_MAGIC_MISSILE:
149         set_bluemage_damage(learner_ptr, power, plev, KWD_DAM, p);
150         break;
151     case MS_SPEED:
152         sprintf(p, " %sd%d+%d", KWD_DURATION, 20 + plev, plev);
153         break;
154     case MS_HEAL:
155         set_bluemage_damage(learner_ptr, power, plev, KWD_HEAL, p);
156         break;
157     case MS_INVULNER:
158         sprintf(p, " %sd7+7", KWD_DURATION);
159         break;
160     case MS_BLINK:
161         sprintf(p, " %s10", KWD_SPHERE);
162         break;
163     case MS_TELEPORT:
164         sprintf(p, " %s%d", KWD_SPHERE, plev * 5);
165         break;
166     case MS_PSY_SPEAR:
167         set_bluemage_damage(learner_ptr, power, plev, KWD_DAM, p);
168         break;
169         break;
170     case MS_RAISE_DEAD:
171         sprintf(p, " %s5", KWD_SPHERE);
172         break;
173     default:
174         break;
175     }
176 }