OSDN Git Service

[Refactor] #40014 Incorporated various variables into lore-util.h
[hengband/hengband.git] / src / lore / monster-lore.c
1 /*!
2  * @brief モンスターの思い出表示に必要なフラグ類の処理
3  * @date 2020/06/09
4  * @author Hourier
5  */
6
7 #include "lore/monster-lore.h"
8 #include "locale/english.h"
9 #include "locale/japanese.h"
10 #include "lore/lore-util.h"
11 #include "monster-race/race-flags-ability1.h"
12 #include "monster-race/race-flags-ability2.h"
13 #include "monster-race/race-flags-resistance.h"
14 #include "monster-race/race-flags1.h"
15 #include "monster-race/race-flags2.h"
16 #include "monster-race/race-flags3.h"
17 #include "monster-race/race-flags4.h"
18 #include "monster-race/race-flags7.h"
19 #include "monster-race/race-indice-types.h"
20 #include "mspell/monster-spell.h"
21 #include "mspell/mspell-damage-calculator.h"
22 #include "mspell/mspell-type.h"
23 #include "term/term-color-types.h"
24 #include "util/util.h"
25 #include "view/display-lore.h"
26
27 /*!
28  * 英語の複数系記述用マクロ / Pluralizer.  Args(count, singular, plural)
29  */
30 #define plural(c, s, p) (((c) == 1) ? (s) : (p))
31
32 /*!
33  * @brief ダイス目を文字列に変換する
34  * @param base_damage 固定値
35  * @param dice_num ダイス数
36  * @param dice_side ダイス面
37  * @param dice_mult ダイス倍率
38  * @param dice_div ダイス除数
39  * @param msg 文字列を格納するポインタ
40  * @return なし
41  */
42 void dice_to_string(int base_damage, int dice_num, int dice_side, int dice_mult, int dice_div, char *msg)
43 {
44     char base[80] = "", dice[80] = "", mult[80] = "";
45
46     if (dice_num == 0) {
47         sprintf(msg, "%d", base_damage);
48         return;
49     }
50
51     if (base_damage != 0)
52         sprintf(base, "%d+", base_damage);
53
54     if (dice_num == 1)
55         sprintf(dice, "d%d", dice_side);
56     else
57         sprintf(dice, "%dd%d", dice_num, dice_side);
58
59     if (dice_mult != 1 || dice_div != 1) {
60         if (dice_div == 1)
61             sprintf(mult, "*%d", dice_mult);
62         else
63             sprintf(mult, "*(%d/%d)", dice_mult, dice_div);
64     }
65
66     sprintf(msg, "%s%s%s", base, dice, mult);
67 }
68
69 /*!
70  * @brief モンスターのAC情報を得ることができるかを返す / Determine if the "armor" is known
71  * @param r_idx モンスターの種族ID
72  * @return 敵のACを知る条件が満たされているならTRUEを返す
73  * @details
74  * The higher the level, the fewer kills needed.
75  */
76 static bool know_armour(MONRACE_IDX r_idx)
77 {
78     monster_race *r_ptr = &r_info[r_idx];
79     DEPTH level = r_ptr->level;
80     MONSTER_NUMBER kills = r_ptr->r_tkills;
81
82     bool known = (r_ptr->r_cast_spell == MAX_UCHAR) ? TRUE : FALSE;
83
84     if (cheat_know || known)
85         return TRUE;
86     if (kills > 304 / (4 + level))
87         return TRUE;
88     if (!(r_ptr->flags1 & RF1_UNIQUE))
89         return FALSE;
90     if (kills > 304 / (38 + (5 * level) / 4))
91         return TRUE;
92     return FALSE;
93 }
94
95 /*!
96  * @brief モンスターの打撃威力を知ることができるかどうかを返す
97  * Determine if the "damage" of the given attack is known
98  * @param r_idx モンスターの種族ID
99  * @param i 確認したい攻撃手番
100  * @return 敵のダメージダイスを知る条件が満たされているならTRUEを返す
101  * @details
102  * <pre>
103  * the higher the level of the monster, the fewer the attacks you need,
104  * the more damage an attack does, the more attacks you need
105  * </pre>
106  */
107 static bool know_damage(MONRACE_IDX r_idx, int i)
108 {
109     monster_race *r_ptr = &r_info[r_idx];
110     DEPTH level = r_ptr->level;
111     s32b a = r_ptr->r_blows[i];
112
113     s32b d1 = r_ptr->blow[i].d_dice;
114     s32b d2 = r_ptr->blow[i].d_side;
115     s32b d = d1 * d2;
116
117     if (d >= ((4 + level) * MAX_UCHAR) / 80)
118         d = ((4 + level) * MAX_UCHAR - 1) / 80;
119     if ((4 + level) * a > 80 * d)
120         return TRUE;
121     if (!(r_ptr->flags1 & RF1_UNIQUE))
122         return FALSE;
123     if ((4 + level) * (2 * a) > 80 * d)
124         return TRUE;
125
126     return FALSE;
127 }
128
129 /*!
130  * @brief 文字列にモンスターの攻撃力を加える
131  * @param r_idx モンスターの種族ID
132  * @param SPELL_NUM 呪文番号
133  * @param msg 表示する文字列
134  * @param tmp 返すメッセージを格納する配列
135  * @return なし
136  */
137 static void set_damage(player_type *player_ptr, MONRACE_IDX r_idx, monster_spell_type ms_type, char *msg, char *tmp)
138 {
139     int base_damage = monspell_race_damage(player_ptr, ms_type, r_idx, BASE_DAM);
140     int dice_num = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_NUM);
141     int dice_side = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_SIDE);
142     int dice_mult = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_MULT);
143     int dice_div = monspell_race_damage(player_ptr, ms_type, r_idx, DICE_DIV);
144     char dmg_str[80], dice_str[80];
145     dice_to_string(base_damage, dice_num, dice_side, dice_mult, dice_div, dmg_str);
146     sprintf(dice_str, "(%s)", dmg_str);
147
148     if (know_armour(r_idx))
149         sprintf(tmp, msg, dice_str);
150     else
151         sprintf(tmp, msg, "");
152 }
153
154 static void set_drop_flags(lore_type *lore_ptr)
155 {
156     if (!lore_ptr->know_everything)
157         return;
158
159     lore_ptr->drop_gold = lore_ptr->drop_item = (((lore_ptr->r_ptr->flags1 & RF1_DROP_4D2) ? 8 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_3D2) ? 6 : 0)
160         + ((lore_ptr->r_ptr->flags1 & RF1_DROP_2D2) ? 4 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_1D2) ? 2 : 0)
161         + ((lore_ptr->r_ptr->flags1 & RF1_DROP_90) ? 1 : 0) + ((lore_ptr->r_ptr->flags1 & RF1_DROP_60) ? 1 : 0));
162
163     if (lore_ptr->r_ptr->flags1 & RF1_ONLY_GOLD)
164         lore_ptr->drop_item = 0;
165
166     if (lore_ptr->r_ptr->flags1 & RF1_ONLY_ITEM)
167         lore_ptr->drop_gold = 0;
168
169     lore_ptr->flags1 = lore_ptr->r_ptr->flags1;
170     lore_ptr->flags2 = lore_ptr->r_ptr->flags2;
171     lore_ptr->flags3 = lore_ptr->r_ptr->flags3;
172     lore_ptr->flags4 = lore_ptr->r_ptr->flags4;
173     lore_ptr->a_ability_flags1 = lore_ptr->r_ptr->a_ability_flags1;
174     lore_ptr->a_ability_flags2 = lore_ptr->r_ptr->a_ability_flags2;
175     lore_ptr->flagsr = lore_ptr->r_ptr->flagsr;
176 }
177
178 static void set_msex_flags(lore_type *lore_ptr)
179 {
180     lore_ptr->msex = MSEX_NONE;
181     if (lore_ptr->r_ptr->flags1 & RF1_FEMALE) {
182         lore_ptr->msex = MSEX_FEMALE;
183         return;
184     }
185
186     if (lore_ptr->r_ptr->flags1 & RF1_MALE)
187         lore_ptr->msex = MSEX_MALE;
188 }
189
190 static void set_flags1(lore_type *lore_ptr)
191 {
192     if (lore_ptr->r_ptr->flags1 & RF1_UNIQUE)
193         lore_ptr->flags1 |= (RF1_UNIQUE);
194
195     if (lore_ptr->r_ptr->flags1 & RF1_QUESTOR)
196         lore_ptr->flags1 |= (RF1_QUESTOR);
197
198     if (lore_ptr->r_ptr->flags1 & RF1_MALE)
199         lore_ptr->flags1 |= (RF1_MALE);
200
201     if (lore_ptr->r_ptr->flags1 & RF1_FEMALE)
202         lore_ptr->flags1 |= (RF1_FEMALE);
203
204     if (lore_ptr->r_ptr->flags1 & RF1_FRIENDS)
205         lore_ptr->flags1 |= (RF1_FRIENDS);
206
207     if (lore_ptr->r_ptr->flags1 & RF1_ESCORT)
208         lore_ptr->flags1 |= (RF1_ESCORT);
209
210     if (lore_ptr->r_ptr->flags1 & RF1_ESCORTS)
211         lore_ptr->flags1 |= (RF1_ESCORTS);
212 }
213
214 static void set_race_flags(lore_type *lore_ptr)
215 {
216     if (!lore_ptr->r_ptr->r_tkills && !lore_ptr->know_everything)
217         return;
218
219     if (lore_ptr->r_ptr->flags3 & RF3_ORC)
220         lore_ptr->flags3 |= (RF3_ORC);
221
222     if (lore_ptr->r_ptr->flags3 & RF3_TROLL)
223         lore_ptr->flags3 |= (RF3_TROLL);
224
225     if (lore_ptr->r_ptr->flags3 & RF3_GIANT)
226         lore_ptr->flags3 |= (RF3_GIANT);
227
228     if (lore_ptr->r_ptr->flags3 & RF3_DRAGON)
229         lore_ptr->flags3 |= (RF3_DRAGON);
230
231     if (lore_ptr->r_ptr->flags3 & RF3_DEMON)
232         lore_ptr->flags3 |= (RF3_DEMON);
233
234     if (lore_ptr->r_ptr->flags3 & RF3_UNDEAD)
235         lore_ptr->flags3 |= (RF3_UNDEAD);
236
237     if (lore_ptr->r_ptr->flags3 & RF3_EVIL)
238         lore_ptr->flags3 |= (RF3_EVIL);
239
240     if (lore_ptr->r_ptr->flags3 & RF3_GOOD)
241         lore_ptr->flags3 |= (RF3_GOOD);
242
243     if (lore_ptr->r_ptr->flags3 & RF3_ANIMAL)
244         lore_ptr->flags3 |= (RF3_ANIMAL);
245
246     if (lore_ptr->r_ptr->flags3 & RF3_AMBERITE)
247         lore_ptr->flags3 |= (RF3_AMBERITE);
248
249     if (lore_ptr->r_ptr->flags2 & RF2_HUMAN)
250         lore_ptr->flags2 |= (RF2_HUMAN);
251
252     if (lore_ptr->r_ptr->flags2 & RF2_QUANTUM)
253         lore_ptr->flags2 |= (RF2_QUANTUM);
254
255     if (lore_ptr->r_ptr->flags1 & RF1_FORCE_DEPTH)
256         lore_ptr->flags1 |= (RF1_FORCE_DEPTH);
257
258     if (lore_ptr->r_ptr->flags1 & RF1_FORCE_MAXHP)
259         lore_ptr->flags1 |= (RF1_FORCE_MAXHP);
260 }
261
262 /*!
263  * @brief モンスターの思い出情報を表示するメインルーチン
264  * Hack -- display monster information using "hooked_roff()"
265  * @param r_idx モンスターの種族ID
266  * @param mode 表示オプション
267  * @return なし
268  * @details
269  * This function should only be called with the cursor placed at the
270  * left edge of the screen, on a cleared line, in which the recall is
271  * to take place.  One extra blank line is left after the recall.
272  */
273 void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS mode)
274 {
275     lore_type tmp_lore;
276     lore_type *lore_ptr = initialize_lore_type(&tmp_lore, r_idx, mode);
277     for (int n = 0; n < A_MAX; n++) {
278         if (lore_ptr->r_ptr->reinforce_id[n] > 0)
279             lore_ptr->reinforce = TRUE;
280     }
281
282     if (cheat_know || (mode & 0x01))
283         lore_ptr->know_everything = TRUE;
284
285     set_drop_flags(lore_ptr);
286     set_msex_flags(lore_ptr);
287     set_flags1(lore_ptr);
288     set_race_flags(lore_ptr);
289     display_kill_numbers(lore_ptr);
290     concptr tmp = r_text + lore_ptr->r_ptr->text;
291     if (tmp[0]) {
292         hooked_roff(tmp);
293         hooked_roff("\n");
294     }
295
296     if (r_idx == MON_KAGE) {
297         hooked_roff("\n");
298         return;
299     }
300
301     if (!display_where_to_appear(lore_ptr))
302         return;
303
304     display_monster_move(lore_ptr);
305     display_monster_never_move(lore_ptr);
306     if (lore_ptr->old) {
307         hooked_roff(_("。", ".  "));
308         lore_ptr->old = FALSE;
309     }
310
311     display_lore_this(player_ptr, lore_ptr);
312     display_monster_aura(lore_ptr);
313     if (lore_ptr->flags2 & RF2_REFLECTING)
314         hooked_roff(format(_("%^sは矢の呪文を跳ね返す。", "%^s reflects bolt spells.  "), wd_he[lore_ptr->msex]));
315
316     display_monster_collective(lore_ptr);
317     lore_ptr->vn = 0;
318     if (lore_ptr->flags4 & RF4_SHRIEK) {
319         lore_ptr->vp[lore_ptr->vn] = _("悲鳴で助けを求める", "shriek for help");
320         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
321     }
322
323     if (lore_ptr->flags4 & RF4_ROCKET) {
324         set_damage(player_ptr, r_idx, (MS_ROCKET), _("ロケット%sを発射する", "shoot a rocket%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
325         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
326         lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
327     }
328
329     if (lore_ptr->flags4 & RF4_SHOOT) {
330         for (int m = 0; m < 4; m++) {
331             if (lore_ptr->r_ptr->blow[m].method != RBM_SHOOT)
332                 continue;
333
334             if (know_armour(r_idx))
335                 sprintf(
336                     lore_ptr->tmp_msg[lore_ptr->vn], _("威力 %dd%d の射撃をする", "fire an arrow (Power:%dd%d)"), lore_ptr->r_ptr->blow[m].d_side, lore_ptr->r_ptr->blow[m].d_dice);
337             else
338                 sprintf(lore_ptr->tmp_msg[lore_ptr->vn], _("射撃をする", "fire an arrow"));
339             lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
340             lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
341             break;
342         }
343     }
344
345     if (lore_ptr->a_ability_flags2 & (RF6_SPECIAL)) {
346         lore_ptr->vp[lore_ptr->vn] = _("特別な行動をする", "do something");
347         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
348     }
349
350     if (lore_ptr->vn > 0) {
351         hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
352         for (int n = 0; n < lore_ptr->vn; n++) {
353 #ifdef JP
354             if (n != lore_ptr->vn - 1) {
355                 jverb(lore_ptr->vp[n], lore_ptr->jverb_buf, JVERB_OR);
356                 hook_c_roff(lore_ptr->color[n], lore_ptr->jverb_buf);
357                 hook_c_roff(lore_ptr->color[n], "り");
358                 hooked_roff("、");
359             } else
360                 hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
361 #else
362             if (n == 0)
363                 hooked_roff(" may ");
364             else if (n < lore_ptr->vn - 1)
365                 hooked_roff(", ");
366             else
367                 hooked_roff(" or ");
368
369             hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
370 #endif
371         }
372
373         hooked_roff(_("ことがある。", ".  "));
374     }
375
376     lore_ptr->vn = 0;
377     if (lore_ptr->flags4 & (RF4_BR_ACID)) {
378         set_damage(player_ptr, r_idx, (MS_BR_ACID), _("酸%s", "acid%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
379         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
380         lore_ptr->color[lore_ptr->vn++] = TERM_GREEN;
381     }
382
383     if (lore_ptr->flags4 & (RF4_BR_ELEC)) {
384         set_damage(player_ptr, r_idx, (MS_BR_ELEC), _("稲妻%s", "lightning%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
385         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
386         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
387     }
388
389     if (lore_ptr->flags4 & (RF4_BR_FIRE)) {
390         set_damage(player_ptr, r_idx, (MS_BR_FIRE), _("火炎%s", "fire%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
391         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
392         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
393     }
394
395     if (lore_ptr->flags4 & (RF4_BR_COLD)) {
396         set_damage(player_ptr, r_idx, (MS_BR_COLD), _("冷気%s", "frost%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
397         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
398         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
399     }
400
401     if (lore_ptr->flags4 & (RF4_BR_POIS)) {
402         set_damage(player_ptr, r_idx, (MS_BR_POIS), _("毒%s", "poison%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
403         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
404         lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN;
405     }
406
407     if (lore_ptr->flags4 & (RF4_BR_NETH)) {
408         set_damage(player_ptr, r_idx, (MS_BR_NETHER), _("地獄%s", "nether%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
409         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
410         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
411     }
412
413     if (lore_ptr->flags4 & (RF4_BR_LITE)) {
414         set_damage(player_ptr, r_idx, (MS_BR_LITE), _("閃光%s", "light%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
415         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
416         lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
417     }
418
419     if (lore_ptr->flags4 & (RF4_BR_DARK)) {
420         set_damage(player_ptr, r_idx, (MS_BR_DARK), _("暗黒%s", "darkness%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
421         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
422         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
423     }
424
425     if (lore_ptr->flags4 & (RF4_BR_CONF)) {
426         set_damage(player_ptr, r_idx, (MS_BR_CONF), _("混乱%s", "confusion%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
427         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
428         lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER;
429     }
430
431     if (lore_ptr->flags4 & (RF4_BR_SOUN)) {
432         set_damage(player_ptr, r_idx, (MS_BR_SOUND), _("轟音%s", "sound%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
433         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
434         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
435     }
436
437     if (lore_ptr->flags4 & (RF4_BR_CHAO)) {
438         set_damage(player_ptr, r_idx, (MS_BR_CHAOS), _("カオス%s", "chaos%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
439         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
440         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
441     }
442
443     if (lore_ptr->flags4 & (RF4_BR_DISE)) {
444         set_damage(player_ptr, r_idx, (MS_BR_DISEN), _("劣化%s", "disenchantment%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
445         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
446         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
447     }
448
449     if (lore_ptr->flags4 & (RF4_BR_NEXU)) {
450         set_damage(player_ptr, r_idx, (MS_BR_NEXUS), _("因果混乱%s", "nexus%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
451         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
452         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
453     }
454
455     if (lore_ptr->flags4 & (RF4_BR_TIME)) {
456         set_damage(player_ptr, r_idx, (MS_BR_TIME), _("時間逆転%s", "time%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
457         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
458         lore_ptr->color[lore_ptr->vn++] = TERM_L_BLUE;
459     }
460
461     if (lore_ptr->flags4 & (RF4_BR_INER)) {
462         set_damage(player_ptr, r_idx, (MS_BR_INERTIA), _("遅鈍%s", "inertia%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
463         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
464         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
465     }
466
467     if (lore_ptr->flags4 & (RF4_BR_GRAV)) {
468         set_damage(player_ptr, r_idx, (MS_BR_GRAVITY), _("重力%s", "gravity%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
469         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
470         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
471     }
472
473     if (lore_ptr->flags4 & (RF4_BR_SHAR)) {
474         set_damage(player_ptr, r_idx, (MS_BR_SHARDS), _("破片%s", "shards%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
475         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
476         lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER;
477     }
478
479     if (lore_ptr->flags4 & (RF4_BR_PLAS)) {
480         set_damage(player_ptr, r_idx, (MS_BR_PLASMA), _("プラズマ%s", "plasma%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
481         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
482         lore_ptr->color[lore_ptr->vn++] = TERM_L_RED;
483     }
484
485     if (lore_ptr->flags4 & (RF4_BR_WALL)) {
486         set_damage(player_ptr, r_idx, (MS_BR_FORCE), _("フォース%s", "force%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
487         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
488         lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
489     }
490
491     if (lore_ptr->flags4 & (RF4_BR_MANA)) {
492         set_damage(player_ptr, r_idx, (MS_BR_MANA), _("魔力%s", "mana%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
493         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
494         lore_ptr->color[lore_ptr->vn++] = TERM_L_BLUE;
495     }
496
497     if (lore_ptr->flags4 & (RF4_BR_NUKE)) {
498         set_damage(player_ptr, r_idx, (MS_BR_NUKE), _("放射性廃棄物%s", "toxic waste%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
499         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
500         lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN;
501     }
502
503     if (lore_ptr->flags4 & (RF4_BR_DISI)) {
504         set_damage(player_ptr, r_idx, (MS_BR_DISI), _("分解%s", "disintegration%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
505         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
506         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
507     }
508
509     bool breath = FALSE;
510     if (lore_ptr->vn > 0) {
511         breath = TRUE;
512         hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
513         for (int n = 0; n < lore_ptr->vn; n++) {
514 #ifdef JP
515             if (n != 0)
516                 hooked_roff("や");
517 #else
518             if (n == 0)
519                 hooked_roff(" may breathe ");
520             else if (n < lore_ptr->vn - 1)
521                 hooked_roff(", ");
522             else
523                 hooked_roff(" or ");
524 #endif
525             hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
526         }
527
528 #ifdef JP
529         hooked_roff("のブレスを吐くことがある");
530 #endif
531     }
532
533     lore_ptr->vn = 0;
534     if (lore_ptr->a_ability_flags1 & (RF5_BA_ACID)) {
535         set_damage(player_ptr, r_idx, (MS_BALL_ACID), _("アシッド・ボール%s", "produce acid balls%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
536         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
537         lore_ptr->color[lore_ptr->vn++] = TERM_GREEN;
538     }
539
540     if (lore_ptr->a_ability_flags1 & (RF5_BA_ELEC)) {
541         set_damage(player_ptr, r_idx, (MS_BALL_ELEC), _("サンダー・ボール%s", "produce lightning balls%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
542         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
543         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
544     }
545
546     if (lore_ptr->a_ability_flags1 & (RF5_BA_FIRE)) {
547         set_damage(player_ptr, r_idx, (MS_BALL_FIRE), _("ファイア・ボール%s", "produce fire balls%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
548         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
549         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
550     }
551
552     if (lore_ptr->a_ability_flags1 & (RF5_BA_COLD)) {
553         set_damage(player_ptr, r_idx, (MS_BALL_COLD), _("アイス・ボール%s", "produce frost balls%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
554         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
555         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
556     }
557
558     if (lore_ptr->a_ability_flags1 & (RF5_BA_POIS)) {
559         set_damage(player_ptr, r_idx, (MS_BALL_POIS), _("悪臭雲%s", "produce poison balls%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
560         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
561         lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN;
562     }
563
564     if (lore_ptr->a_ability_flags1 & (RF5_BA_NETH)) {
565         set_damage(player_ptr, r_idx, (MS_BALL_NETHER), _("地獄球%s", "produce nether balls%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
566         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
567         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
568     }
569
570     if (lore_ptr->a_ability_flags1 & (RF5_BA_WATE)) {
571         set_damage(player_ptr, r_idx, (MS_BALL_WATER), _("ウォーター・ボール%s", "produce water balls%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
572         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
573         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
574     }
575
576     if (lore_ptr->flags4 & (RF4_BA_NUKE)) {
577         set_damage(player_ptr, r_idx, (MS_BALL_NUKE), _("放射能球%s", "produce balls of radiation%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
578         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
579         lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN;
580     }
581
582     if (lore_ptr->a_ability_flags1 & (RF5_BA_MANA)) {
583         set_damage(player_ptr, r_idx, (MS_BALL_MANA), _("魔力の嵐%s", "invoke mana storms%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
584         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
585         lore_ptr->color[lore_ptr->vn++] = TERM_L_BLUE;
586     }
587
588     if (lore_ptr->a_ability_flags1 & (RF5_BA_DARK)) {
589         set_damage(player_ptr, r_idx, (MS_BALL_DARK), _("暗黒の嵐%s", "invoke darkness storms%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
590         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
591         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
592     }
593
594     if (lore_ptr->a_ability_flags1 & (RF5_BA_LITE)) {
595         set_damage(player_ptr, r_idx, (MS_STARBURST), _("スターバースト%s", "invoke starburst%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
596         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
597         lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
598     }
599
600     if (lore_ptr->flags4 & (RF4_BA_CHAO)) {
601         set_damage(player_ptr, r_idx, (MS_BALL_CHAOS), _("純ログルス%s", "invoke raw Logrus%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
602         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
603         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
604     }
605
606     if (lore_ptr->a_ability_flags2 & (RF6_HAND_DOOM)) {
607         lore_ptr->vp[lore_ptr->vn] = _("破滅の手(40%-60%)", "invoke the Hand of Doom(40%-60%)");
608         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
609     }
610
611     if (lore_ptr->a_ability_flags2 & (RF6_PSY_SPEAR)) {
612         set_damage(player_ptr, r_idx, (MS_PSY_SPEAR), _("光の剣%s", "psycho-spear%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
613         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
614         lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
615     }
616
617     if (lore_ptr->a_ability_flags1 & (RF5_DRAIN_MANA)) {
618         set_damage(player_ptr, r_idx, (MS_DRAIN_MANA), _("魔力吸収%s", "drain mana%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
619         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
620         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
621     }
622
623     if (lore_ptr->a_ability_flags1 & (RF5_MIND_BLAST)) {
624         set_damage(player_ptr, r_idx, (MS_MIND_BLAST), _("精神攻撃%s", "cause mind blasting%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
625         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
626         lore_ptr->color[lore_ptr->vn++] = TERM_L_RED;
627     }
628
629     if (lore_ptr->a_ability_flags1 & (RF5_BRAIN_SMASH)) {
630         set_damage(player_ptr, r_idx, (MS_BRAIN_SMASH), _("脳攻撃%s", "cause brain smashing%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
631         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
632         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
633     }
634
635     if (lore_ptr->a_ability_flags1 & (RF5_CAUSE_1)) {
636         set_damage(player_ptr, r_idx, (MS_CAUSE_1), _("軽傷+呪い%s", "cause light wounds and cursing%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
637         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
638         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
639     }
640
641     if (lore_ptr->a_ability_flags1 & (RF5_CAUSE_2)) {
642         set_damage(player_ptr, r_idx, (MS_CAUSE_2), _("重傷+呪い%s", "cause serious wounds and cursing%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
643         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
644         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
645     }
646
647     if (lore_ptr->a_ability_flags1 & (RF5_CAUSE_3)) {
648         set_damage(player_ptr, r_idx, (MS_CAUSE_3), _("致命傷+呪い%s", "cause critical wounds and cursing%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
649         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
650         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
651     }
652
653     if (lore_ptr->a_ability_flags1 & (RF5_CAUSE_4)) {
654         set_damage(player_ptr, r_idx, (MS_CAUSE_4), _("秘孔を突く%s", "cause mortal wounds%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
655         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
656         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
657     }
658
659     if (lore_ptr->a_ability_flags1 & (RF5_BO_ACID)) {
660         set_damage(player_ptr, r_idx, (MS_BOLT_ACID), _("アシッド・ボルト%s", "produce acid bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
661         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
662         lore_ptr->color[lore_ptr->vn++] = TERM_GREEN;
663     }
664
665     if (lore_ptr->a_ability_flags1 & (RF5_BO_ELEC)) {
666         set_damage(player_ptr, r_idx, (MS_BOLT_ELEC), _("サンダー・ボルト%s", "produce lightning bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
667         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
668         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
669     }
670
671     if (lore_ptr->a_ability_flags1 & (RF5_BO_FIRE)) {
672         set_damage(player_ptr, r_idx, (MS_BOLT_FIRE), _("ファイア・ボルト%s", "produce fire bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
673         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
674         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
675     }
676
677     if (lore_ptr->a_ability_flags1 & (RF5_BO_COLD)) {
678         set_damage(player_ptr, r_idx, (MS_BOLT_COLD), _("アイス・ボルト%s", "produce frost bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
679         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
680         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
681     }
682
683     if (lore_ptr->a_ability_flags1 & (RF5_BO_NETH)) {
684         set_damage(player_ptr, r_idx, (MS_BOLT_NETHER), _("地獄の矢%s", "produce nether bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
685         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
686         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
687     }
688
689     if (lore_ptr->a_ability_flags1 & (RF5_BO_WATE)) {
690         set_damage(player_ptr, r_idx, (MS_BOLT_WATER), _("ウォーター・ボルト%s", "produce water bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
691         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
692         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
693     }
694
695     if (lore_ptr->a_ability_flags1 & (RF5_BO_MANA)) {
696         set_damage(player_ptr, r_idx, (MS_BOLT_MANA), _("魔力の矢%s", "produce mana bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
697         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
698         lore_ptr->color[lore_ptr->vn++] = TERM_L_BLUE;
699     }
700
701     if (lore_ptr->a_ability_flags1 & (RF5_BO_PLAS)) {
702         set_damage(player_ptr, r_idx, (MS_BOLT_PLASMA), _("プラズマ・ボルト%s", "produce plasma bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
703         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
704         lore_ptr->color[lore_ptr->vn++] = TERM_L_RED;
705     }
706
707     if (lore_ptr->a_ability_flags1 & (RF5_BO_ICEE)) {
708         set_damage(player_ptr, r_idx, (MS_BOLT_ICE), _("極寒の矢%s", "produce ice bolts%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
709         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
710         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
711     }
712
713     if (lore_ptr->a_ability_flags1 & (RF5_MISSILE)) {
714         set_damage(player_ptr, r_idx, (MS_MAGIC_MISSILE), _("マジックミサイル%s", "produce magic missiles%s"), lore_ptr->tmp_msg[lore_ptr->vn]);
715         lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn];
716         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
717     }
718
719     if (lore_ptr->a_ability_flags1 & (RF5_SCARE)) {
720         lore_ptr->vp[lore_ptr->vn] = _("恐怖", "terrify");
721         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
722     }
723     if (lore_ptr->a_ability_flags1 & (RF5_BLIND)) {
724         lore_ptr->vp[lore_ptr->vn] = _("目くらまし", "blind");
725         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
726     }
727     if (lore_ptr->a_ability_flags1 & (RF5_CONF)) {
728         lore_ptr->vp[lore_ptr->vn] = _("混乱", "confuse");
729         lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER;
730     }
731     if (lore_ptr->a_ability_flags1 & (RF5_SLOW)) {
732         lore_ptr->vp[lore_ptr->vn] = _("減速", "slow");
733         lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
734     }
735     if (lore_ptr->a_ability_flags1 & (RF5_HOLD)) {
736         lore_ptr->vp[lore_ptr->vn] = _("麻痺", "paralyze");
737         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
738     }
739     if (lore_ptr->a_ability_flags2 & (RF6_HASTE)) {
740         lore_ptr->vp[lore_ptr->vn] = _("加速", "haste-self");
741         lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN;
742     }
743     if (lore_ptr->a_ability_flags2 & (RF6_HEAL)) {
744         lore_ptr->vp[lore_ptr->vn] = _("治癒", "heal-self");
745         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
746     }
747     if (lore_ptr->a_ability_flags2 & (RF6_INVULNER)) {
748         lore_ptr->vp[lore_ptr->vn] = _("無敵化", "make invulnerable");
749         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
750     }
751     if (lore_ptr->flags4 & RF4_DISPEL) {
752         lore_ptr->vp[lore_ptr->vn] = _("魔力消去", "dispel-magic");
753         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
754     }
755     if (lore_ptr->a_ability_flags2 & (RF6_BLINK)) {
756         lore_ptr->vp[lore_ptr->vn] = _("ショートテレポート", "blink-self");
757         lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
758     }
759     if (lore_ptr->a_ability_flags2 & (RF6_TPORT)) {
760         lore_ptr->vp[lore_ptr->vn] = _("テレポート", "teleport-self");
761         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
762     }
763     if (lore_ptr->a_ability_flags2 & (RF6_WORLD)) {
764         lore_ptr->vp[lore_ptr->vn] = _("時を止める", "stop the time");
765         lore_ptr->color[lore_ptr->vn++] = TERM_L_BLUE;
766     }
767     if (lore_ptr->a_ability_flags2 & (RF6_TELE_TO)) {
768         lore_ptr->vp[lore_ptr->vn] = _("テレポートバック", "teleport to");
769         lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER;
770     }
771     if (lore_ptr->a_ability_flags2 & (RF6_TELE_AWAY)) {
772         lore_ptr->vp[lore_ptr->vn] = _("テレポートアウェイ", "teleport away");
773         lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
774     }
775     if (lore_ptr->a_ability_flags2 & (RF6_TELE_LEVEL)) {
776         lore_ptr->vp[lore_ptr->vn] = _("テレポート・レベル", "teleport level");
777         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
778     }
779
780     if (lore_ptr->a_ability_flags2 & (RF6_DARKNESS)) {
781         if ((player_ptr->pclass != CLASS_NINJA) || (lore_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) || (lore_ptr->r_ptr->flags7 & RF7_DARK_MASK)) {
782             lore_ptr->vp[lore_ptr->vn] = _("暗闇", "create darkness");
783             lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
784         } else {
785             lore_ptr->vp[lore_ptr->vn] = _("閃光", "create light");
786             lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
787         }
788     }
789
790     if (lore_ptr->a_ability_flags2 & (RF6_TRAPS)) {
791         lore_ptr->vp[lore_ptr->vn] = _("トラップ", "create traps");
792         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
793     }
794     if (lore_ptr->a_ability_flags2 & (RF6_FORGET)) {
795         lore_ptr->vp[lore_ptr->vn] = _("記憶消去", "cause amnesia");
796         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
797     }
798     if (lore_ptr->a_ability_flags2 & (RF6_RAISE_DEAD)) {
799         lore_ptr->vp[lore_ptr->vn] = _("死者復活", "raise dead");
800         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
801     }
802     if (lore_ptr->a_ability_flags2 & (RF6_S_MONSTER)) {
803         lore_ptr->vp[lore_ptr->vn] = _("モンスター一体召喚", "summon a monster");
804         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
805     }
806     if (lore_ptr->a_ability_flags2 & (RF6_S_MONSTERS)) {
807         lore_ptr->vp[lore_ptr->vn] = _("モンスター複数召喚", "summon monsters");
808         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
809     }
810     if (lore_ptr->a_ability_flags2 & (RF6_S_KIN)) {
811         lore_ptr->vp[lore_ptr->vn] = _("救援召喚", "summon aid");
812         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
813     }
814     if (lore_ptr->a_ability_flags2 & (RF6_S_ANT)) {
815         lore_ptr->vp[lore_ptr->vn] = _("アリ召喚", "summon ants");
816         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
817     }
818     if (lore_ptr->a_ability_flags2 & (RF6_S_SPIDER)) {
819         lore_ptr->vp[lore_ptr->vn] = _("クモ召喚", "summon spiders");
820         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
821     }
822     if (lore_ptr->a_ability_flags2 & (RF6_S_HOUND)) {
823         lore_ptr->vp[lore_ptr->vn] = _("ハウンド召喚", "summon hounds");
824         lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER;
825     }
826     if (lore_ptr->a_ability_flags2 & (RF6_S_HYDRA)) {
827         lore_ptr->vp[lore_ptr->vn] = _("ヒドラ召喚", "summon hydras");
828         lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN;
829     }
830     if (lore_ptr->a_ability_flags2 & (RF6_S_ANGEL)) {
831         lore_ptr->vp[lore_ptr->vn] = _("天使一体召喚", "summon an angel");
832         lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
833     }
834     if (lore_ptr->a_ability_flags2 & (RF6_S_DEMON)) {
835         lore_ptr->vp[lore_ptr->vn] = _("デーモン一体召喚", "summon a demon");
836         lore_ptr->color[lore_ptr->vn++] = TERM_L_RED;
837     }
838     if (lore_ptr->a_ability_flags2 & (RF6_S_UNDEAD)) {
839         lore_ptr->vp[lore_ptr->vn] = _("アンデッド一体召喚", "summon an undead");
840         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
841     }
842     if (lore_ptr->a_ability_flags2 & (RF6_S_DRAGON)) {
843         lore_ptr->vp[lore_ptr->vn] = _("ドラゴン一体召喚", "summon a dragon");
844         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
845     }
846     if (lore_ptr->a_ability_flags2 & (RF6_S_HI_UNDEAD)) {
847         lore_ptr->vp[lore_ptr->vn] = _("強力なアンデッド召喚", "summon Greater Undead");
848         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
849     }
850     if (lore_ptr->a_ability_flags2 & (RF6_S_HI_DRAGON)) {
851         lore_ptr->vp[lore_ptr->vn] = _("古代ドラゴン召喚", "summon Ancient Dragons");
852         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
853     }
854     if (lore_ptr->a_ability_flags2 & (RF6_S_CYBER)) {
855         lore_ptr->vp[lore_ptr->vn] = _("サイバーデーモン召喚", "summon Cyberdemons");
856         lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
857     }
858     if (lore_ptr->a_ability_flags2 & (RF6_S_AMBERITES)) {
859         lore_ptr->vp[lore_ptr->vn] = _("アンバーの王族召喚", "summon Lords of Amber");
860         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
861     }
862     if (lore_ptr->a_ability_flags2 & (RF6_S_UNIQUE)) {
863         lore_ptr->vp[lore_ptr->vn] = _("ユニーク・モンスター召喚", "summon Unique Monsters");
864         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
865     }
866
867     bool magic = FALSE;
868     if (lore_ptr->vn) {
869         magic = TRUE;
870         if (breath) {
871             hooked_roff(_("、なおかつ", ", and is also"));
872         } else {
873             hooked_roff(format(_("%^sは", "%^s is"), wd_he[lore_ptr->msex]));
874         }
875
876 #ifdef JP
877         if (lore_ptr->flags2 & (RF2_SMART))
878             hook_c_roff(TERM_YELLOW, "的確に");
879         hooked_roff("魔法を使うことができ、");
880 #else
881         hooked_roff(" magical, casting spells");
882         if (lore_ptr->flags2 & RF2_SMART)
883             hook_c_roff(TERM_YELLOW, " intelligently");
884 #endif
885
886         for (int n = 0; n < lore_ptr->vn; n++) {
887 #ifdef JP
888             if (n != 0)
889                 hooked_roff("、");
890 #else
891             if (n == 0)
892                 hooked_roff(" which ");
893             else if (n < lore_ptr->vn - 1)
894                 hooked_roff(", ");
895             else
896                 hooked_roff(" or ");
897 #endif
898             hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
899         }
900
901 #ifdef JP
902         hooked_roff("の呪文を唱えることがある");
903 #endif
904     }
905
906     if (breath || magic) {
907         int m = lore_ptr->r_ptr->r_cast_spell;
908         int n = lore_ptr->r_ptr->freq_spell;
909         if (m > 100 || lore_ptr->know_everything) {
910             hooked_roff(format(_("(確率:1/%d)", "; 1 time in %d"), 100 / n));
911         } else if (m) {
912             n = ((n + 9) / 10) * 10;
913             hooked_roff(format(_("(確率:約1/%d)", "; about 1 time in %d"), 100 / n));
914         }
915
916         hooked_roff(_("。", ".  "));
917     }
918
919     if (lore_ptr->know_everything || know_armour(r_idx)) {
920         hooked_roff(format(_("%^sは AC%d の防御力と", "%^s has an armor rating of %d"), wd_he[lore_ptr->msex], lore_ptr->r_ptr->ac));
921
922         if ((lore_ptr->flags1 & RF1_FORCE_MAXHP) || (lore_ptr->r_ptr->hside == 1)) {
923             u32b hp = lore_ptr->r_ptr->hdice * (lore_ptr->nightmare ? 2 : 1) * lore_ptr->r_ptr->hside;
924             hooked_roff(format(_(" %d の体力がある。", " and a life rating of %d.  "), (s16b)MIN(30000, hp)));
925         } else {
926             hooked_roff(format(
927                 _(" %dd%d の体力がある。", " and a life rating of %dd%d.  "), lore_ptr->r_ptr->hdice * (lore_ptr->nightmare ? 2 : 1), lore_ptr->r_ptr->hside));
928         }
929     }
930
931     lore_ptr->vn = 0;
932     if (lore_ptr->flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) {
933         lore_ptr->vp[lore_ptr->vn] = _("ダンジョンを照らす", "illuminate the dungeon");
934         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
935     }
936     if (lore_ptr->flags7 & (RF7_HAS_DARK_1 | RF7_HAS_DARK_2)) {
937         lore_ptr->vp[lore_ptr->vn] = _("ダンジョンを暗くする", "darken the dungeon");
938         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
939     }
940     if (lore_ptr->flags2 & RF2_OPEN_DOOR) {
941         lore_ptr->vp[lore_ptr->vn] = _("ドアを開ける", "open doors");
942         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
943     }
944     if (lore_ptr->flags2 & RF2_BASH_DOOR) {
945         lore_ptr->vp[lore_ptr->vn] = _("ドアを打ち破る", "bash down doors");
946         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
947     }
948     if (lore_ptr->flags7 & RF7_CAN_FLY) {
949         lore_ptr->vp[lore_ptr->vn] = _("空を飛ぶ", "fly");
950         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
951     }
952     if (lore_ptr->flags7 & RF7_CAN_SWIM) {
953         lore_ptr->vp[lore_ptr->vn] = _("水を渡る", "swim");
954         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
955     }
956     if (lore_ptr->flags2 & RF2_PASS_WALL) {
957         lore_ptr->vp[lore_ptr->vn] = _("壁をすり抜ける", "pass through walls");
958         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
959     }
960     if (lore_ptr->flags2 & RF2_KILL_WALL) {
961         lore_ptr->vp[lore_ptr->vn] = _("壁を掘り進む", "bore through walls");
962         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
963     }
964     if (lore_ptr->flags2 & RF2_MOVE_BODY) {
965         lore_ptr->vp[lore_ptr->vn] = _("弱いモンスターを押しのける", "push past weaker monsters");
966         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
967     }
968     if (lore_ptr->flags2 & RF2_KILL_BODY) {
969         lore_ptr->vp[lore_ptr->vn] = _("弱いモンスターを倒す", "destroy weaker monsters");
970         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
971     }
972     if (lore_ptr->flags2 & RF2_TAKE_ITEM) {
973         lore_ptr->vp[lore_ptr->vn] = _("アイテムを拾う", "pick up objects");
974         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
975     }
976     if (lore_ptr->flags2 & RF2_KILL_ITEM) {
977         lore_ptr->vp[lore_ptr->vn] = _("アイテムを壊す", "destroy objects");
978         lore_ptr->color[lore_ptr->vn++] = TERM_WHITE;
979     }
980
981     if (lore_ptr->vn > 0) {
982         hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
983         for (int n = 0; n < lore_ptr->vn; n++) {
984 #ifdef JP
985             if (n != lore_ptr->vn - 1) {
986                 jverb(lore_ptr->vp[n], lore_ptr->jverb_buf, JVERB_AND);
987                 hook_c_roff(lore_ptr->color[n], lore_ptr->jverb_buf);
988                 hooked_roff("、");
989             } else {
990                 hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
991             }
992 #else
993             if (n == 0)
994                 hooked_roff(" can ");
995             else if (n < lore_ptr->vn - 1)
996                 hooked_roff(", ");
997             else
998                 hooked_roff(" and ");
999
1000             hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
1001 #endif
1002         }
1003
1004         hooked_roff(_("ことができる。", ".  "));
1005     }
1006
1007     if (lore_ptr->flags7 & RF7_AQUATIC) {
1008         hooked_roff(format(_("%^sは水中に棲んでいる。", "%^s lives in water.  "), wd_he[lore_ptr->msex]));
1009     }
1010
1011     if (lore_ptr->flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2)) {
1012         hooked_roff(format(_("%^sは光っている。", "%^s is shining.  "), wd_he[lore_ptr->msex]));
1013     }
1014
1015     if (lore_ptr->flags7 & (RF7_SELF_DARK_1 | RF7_SELF_DARK_2)) {
1016         hook_c_roff(TERM_L_DARK, format(_("%^sは暗黒に包まれている。", "%^s is surrounded by darkness.  "), wd_he[lore_ptr->msex]));
1017     }
1018
1019     if (lore_ptr->flags2 & RF2_INVISIBLE) {
1020         hooked_roff(format(_("%^sは透明で目に見えない。", "%^s is invisible.  "), wd_he[lore_ptr->msex]));
1021     }
1022
1023     if (lore_ptr->flags2 & RF2_COLD_BLOOD) {
1024         hooked_roff(format(_("%^sは冷血動物である。", "%^s is cold blooded.  "), wd_he[lore_ptr->msex]));
1025     }
1026
1027     if (lore_ptr->flags2 & RF2_EMPTY_MIND) {
1028         hooked_roff(format(_("%^sはテレパシーでは感知できない。", "%^s is not detected by telepathy.  "), wd_he[lore_ptr->msex]));
1029     } else if (lore_ptr->flags2 & RF2_WEIRD_MIND) {
1030         hooked_roff(format(_("%^sはまれにテレパシーで感知できる。", "%^s is rarely detected by telepathy.  "), wd_he[lore_ptr->msex]));
1031     }
1032
1033     if (lore_ptr->flags2 & RF2_MULTIPLY) {
1034         hook_c_roff(TERM_L_UMBER, format(_("%^sは爆発的に増殖する。", "%^s breeds explosively.  "), wd_he[lore_ptr->msex]));
1035     }
1036
1037     if (lore_ptr->flags2 & RF2_REGENERATE) {
1038         hook_c_roff(TERM_L_WHITE, format(_("%^sは素早く体力を回復する。", "%^s regenerates quickly.  "), wd_he[lore_ptr->msex]));
1039     }
1040
1041     if (lore_ptr->flags7 & RF7_RIDING) {
1042         hook_c_roff(TERM_SLATE, format(_("%^sに乗ることができる。", "%^s is suitable for riding.  "), wd_he[lore_ptr->msex]));
1043     }
1044
1045     lore_ptr->vn = 0;
1046     if (lore_ptr->flags3 & RF3_HURT_ROCK) {
1047         lore_ptr->vp[lore_ptr->vn] = _("岩を除去するもの", "rock remover");
1048         lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
1049     }
1050     if (lore_ptr->flags3 & RF3_HURT_LITE) {
1051         lore_ptr->vp[lore_ptr->vn] = _("明るい光", "bright light");
1052         lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
1053     }
1054     if (lore_ptr->flags3 & RF3_HURT_FIRE) {
1055         lore_ptr->vp[lore_ptr->vn] = _("炎", "fire");
1056         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
1057     }
1058     if (lore_ptr->flags3 & RF3_HURT_COLD) {
1059         lore_ptr->vp[lore_ptr->vn] = _("冷気", "cold");
1060         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
1061     }
1062
1063     if (lore_ptr->vn > 0) {
1064         hooked_roff(format(_("%^sには", "%^s"), wd_he[lore_ptr->msex]));
1065
1066         for (int n = 0; n < lore_ptr->vn; n++) {
1067 #ifdef JP
1068             if (n != 0)
1069                 hooked_roff("や");
1070 #else
1071             if (n == 0)
1072                 hooked_roff(" is hurt by ");
1073             else if (n < lore_ptr->vn - 1)
1074                 hooked_roff(", ");
1075             else
1076                 hooked_roff(" and ");
1077 #endif
1078             hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
1079         }
1080
1081         hooked_roff(_("でダメージを与えられる。", ".  "));
1082     }
1083
1084     lore_ptr->vn = 0;
1085     if (lore_ptr->flagsr & RFR_IM_ACID) {
1086         lore_ptr->vp[lore_ptr->vn] = _("酸", "acid");
1087         lore_ptr->color[lore_ptr->vn++] = TERM_GREEN;
1088     }
1089     if (lore_ptr->flagsr & RFR_IM_ELEC) {
1090         lore_ptr->vp[lore_ptr->vn] = _("稲妻", "lightning");
1091         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
1092     }
1093     if (lore_ptr->flagsr & RFR_IM_FIRE) {
1094         lore_ptr->vp[lore_ptr->vn] = _("炎", "fire");
1095         lore_ptr->color[lore_ptr->vn++] = TERM_RED;
1096     }
1097     if (lore_ptr->flagsr & RFR_IM_COLD) {
1098         lore_ptr->vp[lore_ptr->vn] = _("冷気", "cold");
1099         lore_ptr->color[lore_ptr->vn++] = TERM_L_WHITE;
1100     }
1101     if (lore_ptr->flagsr & RFR_IM_POIS) {
1102         lore_ptr->vp[lore_ptr->vn] = _("毒", "poison");
1103         lore_ptr->color[lore_ptr->vn++] = TERM_L_GREEN;
1104     }
1105
1106     if (lore_ptr->flagsr & RFR_RES_LITE) {
1107         lore_ptr->vp[lore_ptr->vn] = _("閃光", "light");
1108         lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
1109     }
1110     if (lore_ptr->flagsr & RFR_RES_DARK) {
1111         lore_ptr->vp[lore_ptr->vn] = _("暗黒", "dark");
1112         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
1113     }
1114     if (lore_ptr->flagsr & RFR_RES_NETH) {
1115         lore_ptr->vp[lore_ptr->vn] = _("地獄", "nether");
1116         lore_ptr->color[lore_ptr->vn++] = TERM_L_DARK;
1117     }
1118     if (lore_ptr->flagsr & RFR_RES_WATE) {
1119         lore_ptr->vp[lore_ptr->vn] = _("水", "water");
1120         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
1121     }
1122     if (lore_ptr->flagsr & RFR_RES_PLAS) {
1123         lore_ptr->vp[lore_ptr->vn] = _("プラズマ", "plasma");
1124         lore_ptr->color[lore_ptr->vn++] = TERM_L_RED;
1125     }
1126     if (lore_ptr->flagsr & RFR_RES_SHAR) {
1127         lore_ptr->vp[lore_ptr->vn] = _("破片", "shards");
1128         lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER;
1129     }
1130     if (lore_ptr->flagsr & RFR_RES_SOUN) {
1131         lore_ptr->vp[lore_ptr->vn] = _("轟音", "sound");
1132         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
1133     }
1134     if (lore_ptr->flagsr & RFR_RES_CHAO) {
1135         lore_ptr->vp[lore_ptr->vn] = _("カオス", "chaos");
1136         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
1137     }
1138     if (lore_ptr->flagsr & RFR_RES_NEXU) {
1139         lore_ptr->vp[lore_ptr->vn] = _("因果混乱", "nexus");
1140         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
1141     }
1142     if (lore_ptr->flagsr & RFR_RES_DISE) {
1143         lore_ptr->vp[lore_ptr->vn] = _("劣化", "disenchantment");
1144         lore_ptr->color[lore_ptr->vn++] = TERM_VIOLET;
1145     }
1146     if (lore_ptr->flagsr & RFR_RES_WALL) {
1147         lore_ptr->vp[lore_ptr->vn] = _("フォース", "force");
1148         lore_ptr->color[lore_ptr->vn++] = TERM_UMBER;
1149     }
1150     if (lore_ptr->flagsr & RFR_RES_INER) {
1151         lore_ptr->vp[lore_ptr->vn] = _("遅鈍", "inertia");
1152         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
1153     }
1154     if (lore_ptr->flagsr & RFR_RES_TIME) {
1155         lore_ptr->vp[lore_ptr->vn] = _("時間逆転", "time");
1156         lore_ptr->color[lore_ptr->vn++] = TERM_L_BLUE;
1157     }
1158     if (lore_ptr->flagsr & RFR_RES_GRAV) {
1159         lore_ptr->vp[lore_ptr->vn] = _("重力", "gravity");
1160         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
1161     }
1162     if (lore_ptr->flagsr & RFR_RES_ALL) {
1163         lore_ptr->vp[lore_ptr->vn] = _("あらゆる攻撃", "all");
1164         lore_ptr->color[lore_ptr->vn++] = TERM_YELLOW;
1165     }
1166     if ((lore_ptr->flagsr & RFR_RES_TELE) && !(lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) {
1167         lore_ptr->vp[lore_ptr->vn] = _("テレポート", "teleportation");
1168         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
1169     }
1170
1171     if (lore_ptr->vn > 0) {
1172         hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
1173         for (int n = 0; n < lore_ptr->vn; n++) {
1174 #ifdef JP
1175             if (n != 0)
1176                 hooked_roff("と");
1177 #else
1178             if (n == 0)
1179                 hooked_roff(" resists ");
1180             else if (n < lore_ptr->vn - 1)
1181                 hooked_roff(", ");
1182             else
1183                 hooked_roff(" and ");
1184 #endif
1185             hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
1186         }
1187
1188         hooked_roff(_("の耐性を持っている。", ".  "));
1189     }
1190
1191     if ((lore_ptr->r_ptr->r_xtra1 & MR1_SINKA) || lore_ptr->know_everything) {
1192         if (lore_ptr->r_ptr->next_r_idx) {
1193             hooked_roff(format(_("%^sは経験を積むと、", "%^s will evolve into "), wd_he[lore_ptr->msex]));
1194             hook_c_roff(TERM_YELLOW, format("%s", r_name + r_info[lore_ptr->r_ptr->next_r_idx].name));
1195
1196             hooked_roff(_(format("に進化する。"), format(" when %s gets enough experience.  ", wd_he[lore_ptr->msex])));
1197         } else if (!(lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) {
1198             hooked_roff(format(_("%sは進化しない。", "%s won't evolve.  "), wd_he[lore_ptr->msex]));
1199         }
1200     }
1201
1202     lore_ptr->vn = 0;
1203     if (lore_ptr->flags3 & RF3_NO_STUN) {
1204         lore_ptr->vp[lore_ptr->vn] = _("朦朧としない", "stunned");
1205         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
1206     }
1207     if (lore_ptr->flags3 & RF3_NO_FEAR) {
1208         lore_ptr->vp[lore_ptr->vn] = _("恐怖を感じない", "frightened");
1209         lore_ptr->color[lore_ptr->vn++] = TERM_SLATE;
1210     }
1211     if (lore_ptr->flags3 & RF3_NO_CONF) {
1212         lore_ptr->vp[lore_ptr->vn] = _("混乱しない", "confused");
1213         lore_ptr->color[lore_ptr->vn++] = TERM_L_UMBER;
1214     }
1215     if (lore_ptr->flags3 & RF3_NO_SLEEP) {
1216         lore_ptr->vp[lore_ptr->vn] = _("眠らされない", "slept");
1217         lore_ptr->color[lore_ptr->vn++] = TERM_BLUE;
1218     }
1219     if ((lore_ptr->flagsr & RFR_RES_TELE) && (lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) {
1220         lore_ptr->vp[lore_ptr->vn] = _("テレポートされない", "teleported");
1221         lore_ptr->color[lore_ptr->vn++] = TERM_ORANGE;
1222     }
1223
1224     if (lore_ptr->vn > 0) {
1225         hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
1226         for (int n = 0; n < lore_ptr->vn; n++) {
1227 #ifdef JP
1228             if (n != 0)
1229                 hooked_roff("し、");
1230 #else
1231             if (n == 0)
1232                 hooked_roff(" cannot be ");
1233             else if (n < lore_ptr->vn - 1)
1234                 hooked_roff(", ");
1235             else
1236                 hooked_roff(" or ");
1237 #endif
1238             hook_c_roff(lore_ptr->color[n], lore_ptr->vp[n]);
1239         }
1240
1241         hooked_roff(_("。", ".  "));
1242     }
1243
1244     if ((((int)lore_ptr->r_ptr->r_wake * (int)lore_ptr->r_ptr->r_wake) > lore_ptr->r_ptr->sleep) || (lore_ptr->r_ptr->r_ignore == MAX_UCHAR)
1245         || (lore_ptr->r_ptr->sleep == 0 && lore_ptr->r_ptr->r_tkills >= 10) || lore_ptr->know_everything) {
1246         concptr act;
1247         if (lore_ptr->r_ptr->sleep > 200) {
1248             act = _("を無視しがちであるが", "prefers to ignore");
1249         } else if (lore_ptr->r_ptr->sleep > 95) {
1250             act = _("に対してほとんど注意を払わないが", "pays very little attention to");
1251         } else if (lore_ptr->r_ptr->sleep > 75) {
1252             act = _("に対してあまり注意を払わないが", "pays little attention to");
1253         } else if (lore_ptr->r_ptr->sleep > 45) {
1254             act = _("を見過ごしがちであるが", "tends to overlook");
1255         } else if (lore_ptr->r_ptr->sleep > 25) {
1256             act = _("をほんの少しは見ており", "takes quite a while to see");
1257         } else if (lore_ptr->r_ptr->sleep > 10) {
1258             act = _("をしばらくは見ており", "takes a while to see");
1259         } else if (lore_ptr->r_ptr->sleep > 5) {
1260             act = _("を幾分注意深く見ており", "is fairly observant of");
1261         } else if (lore_ptr->r_ptr->sleep > 3) {
1262             act = _("を注意深く見ており", "is observant of");
1263         } else if (lore_ptr->r_ptr->sleep > 1) {
1264             act = _("をかなり注意深く見ており", "is very observant of");
1265         } else if (lore_ptr->r_ptr->sleep > 0) {
1266             act = _("を警戒しており", "is vigilant for");
1267         } else {
1268             act = _("をかなり警戒しており", "is ever vigilant for");
1269         }
1270
1271         hooked_roff(_(format("%^sは侵入者%s、 %d フィート先から侵入者に気付くことがある。", wd_he[lore_ptr->msex], act, 10 * lore_ptr->r_ptr->aaf),
1272             format("%^s %s intruders, which %s may notice from %d feet.  ", wd_he[lore_ptr->msex], act, wd_he[lore_ptr->msex], 10 * lore_ptr->r_ptr->aaf)));
1273     }
1274
1275     if (lore_ptr->drop_gold || lore_ptr->drop_item) {
1276         hooked_roff(format(_("%^sは", "%^s may carry"), wd_he[lore_ptr->msex]));
1277 #ifdef JP
1278 #else
1279         lore_ptr->sin = FALSE;
1280 #endif
1281
1282         int n = MAX(lore_ptr->drop_gold, lore_ptr->drop_item);
1283         if (n == 1) {
1284             hooked_roff(_("一つの", " a"));
1285 #ifdef JP
1286 #else
1287             lore_ptr->sin = TRUE;
1288 #endif
1289         } else if (n == 2) {
1290             hooked_roff(_("一つか二つの", " one or two"));
1291         } else {
1292             hooked_roff(format(_(" %d 個までの", " up to %d"), n));
1293         }
1294
1295         concptr p;
1296         if (lore_ptr->flags1 & RF1_DROP_GREAT) {
1297             p = _("特別な", " exceptional");
1298         } else if (lore_ptr->flags1 & RF1_DROP_GOOD) {
1299             p = _("上質な", " good");
1300 #ifdef JP
1301 #else
1302             lore_ptr->sin = FALSE;
1303 #endif
1304         } else {
1305             p = NULL;
1306         }
1307
1308         if (lore_ptr->drop_item) {
1309 #ifdef JP
1310 #else
1311             if (lore_ptr->sin)
1312                 hooked_roff("n");
1313
1314             lore_ptr->sin = FALSE;
1315 #endif
1316             if (p)
1317                 hooked_roff(p);
1318             hooked_roff(_("アイテム", " object"));
1319 #ifdef JP
1320 #else
1321             if (n != 1)
1322                 hooked_roff("s");
1323 #endif
1324             p = _("や", " or");
1325         }
1326
1327         if (lore_ptr->drop_gold) {
1328 #ifdef JP
1329 #else
1330             if (!p)
1331                 lore_ptr->sin = FALSE;
1332
1333             if (lore_ptr->sin)
1334                 hooked_roff("n");
1335
1336             lore_ptr->sin = FALSE;
1337 #endif
1338             if (p)
1339                 hooked_roff(p);
1340             hooked_roff(_("財宝", " treasure"));
1341 #ifdef JP
1342 #else
1343             if (n != 1)
1344                 hooked_roff("s");
1345 #endif
1346         }
1347
1348         hooked_roff(_("を持っていることがある。", ".  "));
1349     }
1350
1351     const int max_attack_numbers = 4;
1352     int count = 0;
1353     for (int m = 0; m < max_attack_numbers; m++) {
1354         if (!lore_ptr->r_ptr->blow[m].method)
1355             continue;
1356         if (lore_ptr->r_ptr->blow[m].method == RBM_SHOOT)
1357             continue;
1358
1359         if (lore_ptr->r_ptr->r_blows[m] || lore_ptr->know_everything)
1360             count++;
1361     }
1362
1363     int attack_numbers = 0;
1364     for (int m = 0; m < max_attack_numbers; m++) {
1365         if (!lore_ptr->r_ptr->blow[m].method)
1366             continue;
1367         if (lore_ptr->r_ptr->blow[m].method == RBM_SHOOT)
1368             continue;
1369         if (!lore_ptr->r_ptr->r_blows[m] && !lore_ptr->know_everything)
1370             continue;
1371
1372         rbm_type method = lore_ptr->r_ptr->blow[m].method;
1373         int effect = lore_ptr->r_ptr->blow[m].effect;
1374         int d1 = lore_ptr->r_ptr->blow[m].d_dice;
1375         int d2 = lore_ptr->r_ptr->blow[m].d_side;
1376
1377         concptr p = NULL;
1378         switch (method) {
1379         case RBM_HIT:
1380             p = _("殴る", "hit");
1381             break;
1382         case RBM_TOUCH:
1383             p = _("触る", "touch");
1384             break;
1385         case RBM_PUNCH:
1386             p = _("パンチする", "punch");
1387             break;
1388         case RBM_KICK:
1389             p = _("蹴る", "kick");
1390             break;
1391         case RBM_CLAW:
1392             p = _("ひっかく", "claw");
1393             break;
1394         case RBM_BITE:
1395             p = _("噛む", "bite");
1396             break;
1397         case RBM_STING:
1398             p = _("刺す", "sting");
1399             break;
1400         case RBM_SLASH:
1401             p = _("斬る", "slash");
1402             break;
1403         case RBM_BUTT:
1404             p = _("角で突く", "butt");
1405             break;
1406         case RBM_CRUSH:
1407             p = _("体当たりする", "crush");
1408             break;
1409         case RBM_ENGULF:
1410             p = _("飲み込む", "engulf");
1411             break;
1412         case RBM_CHARGE:
1413             p = _("請求書をよこす", "charge");
1414             break;
1415         case RBM_CRAWL:
1416             p = _("体の上を這い回る", "crawl on you");
1417             break;
1418         case RBM_DROOL:
1419             p = _("よだれをたらす", "drool on you");
1420             break;
1421         case RBM_SPIT:
1422             p = _("つばを吐く", "spit");
1423             break;
1424         case RBM_EXPLODE:
1425             p = _("爆発する", "explode");
1426             break;
1427         case RBM_GAZE:
1428             p = _("にらむ", "gaze");
1429             break;
1430         case RBM_WAIL:
1431             p = _("泣き叫ぶ", "wail");
1432             break;
1433         case RBM_SPORE:
1434             p = _("胞子を飛ばす", "release spores");
1435             break;
1436         case RBM_XXX4:
1437             break;
1438         case RBM_BEG:
1439             p = _("金をせがむ", "beg");
1440             break;
1441         case RBM_INSULT:
1442             p = _("侮辱する", "insult");
1443             break;
1444         case RBM_MOAN:
1445             p = _("うめく", "moan");
1446             break;
1447         case RBM_SHOW:
1448             p = _("歌う", "sing");
1449             break;
1450         }
1451
1452         concptr q = NULL;
1453         switch (effect) {
1454         case RBE_SUPERHURT:
1455             q = _("強力に攻撃する", "slaughter");
1456             break;
1457         case RBE_HURT:
1458             q = _("攻撃する", "attack");
1459             break;
1460         case RBE_POISON:
1461             q = _("毒をくらわす", "poison");
1462             break;
1463         case RBE_UN_BONUS:
1464             q = _("劣化させる", "disenchant");
1465             break;
1466         case RBE_UN_POWER:
1467             q = _("充填魔力を吸収する", "drain charges");
1468             break;
1469         case RBE_EAT_GOLD:
1470             q = _("金を盗む", "steal gold");
1471             break;
1472         case RBE_EAT_ITEM:
1473             q = _("アイテムを盗む", "steal items");
1474             break;
1475         case RBE_EAT_FOOD:
1476             q = _("あなたの食料を食べる", "eat your food");
1477             break;
1478         case RBE_EAT_LITE:
1479             q = _("明かりを吸収する", "absorb light");
1480             break;
1481         case RBE_ACID:
1482             q = _("酸を飛ばす", "shoot acid");
1483             break;
1484         case RBE_ELEC:
1485             q = _("感電させる", "electrocute");
1486             break;
1487         case RBE_FIRE:
1488             q = _("燃やす", "burn");
1489             break;
1490         case RBE_COLD:
1491             q = _("凍らせる", "freeze");
1492             break;
1493         case RBE_BLIND:
1494             q = _("盲目にする", "blind");
1495             break;
1496         case RBE_CONFUSE:
1497             q = _("混乱させる", "confuse");
1498             break;
1499         case RBE_TERRIFY:
1500             q = _("恐怖させる", "terrify");
1501             break;
1502         case RBE_PARALYZE:
1503             q = _("麻痺させる", "paralyze");
1504             break;
1505         case RBE_LOSE_STR:
1506             q = _("腕力を減少させる", "reduce strength");
1507             break;
1508         case RBE_LOSE_INT:
1509             q = _("知能を減少させる", "reduce intelligence");
1510             break;
1511         case RBE_LOSE_WIS:
1512             q = _("賢さを減少させる", "reduce wisdom");
1513             break;
1514         case RBE_LOSE_DEX:
1515             q = _("器用さを減少させる", "reduce dexterity");
1516             break;
1517         case RBE_LOSE_CON:
1518             q = _("耐久力を減少させる", "reduce constitution");
1519             break;
1520         case RBE_LOSE_CHR:
1521             q = _("魅力を減少させる", "reduce charisma");
1522             break;
1523         case RBE_LOSE_ALL:
1524             q = _("全ステータスを減少させる", "reduce all stats");
1525             break;
1526         case RBE_SHATTER:
1527             q = _("粉砕する", "shatter");
1528             break;
1529         case RBE_EXP_10:
1530             q = _("経験値を減少(10d6+)させる", "lower experience (by 10d6+)");
1531             break;
1532         case RBE_EXP_20:
1533             q = _("経験値を減少(20d6+)させる", "lower experience (by 20d6+)");
1534             break;
1535         case RBE_EXP_40:
1536             q = _("経験値を減少(40d6+)させる", "lower experience (by 40d6+)");
1537             break;
1538         case RBE_EXP_80:
1539             q = _("経験値を減少(80d6+)させる", "lower experience (by 80d6+)");
1540             break;
1541         case RBE_DISEASE:
1542             q = _("病気にする", "disease");
1543             break;
1544         case RBE_TIME:
1545             q = _("時間を逆戻りさせる", "time");
1546             break;
1547         case RBE_DR_LIFE:
1548             q = _("生命力を吸収する", "drain life");
1549             break;
1550         case RBE_DR_MANA:
1551             q = _("魔力を奪う", "drain mana force");
1552             break;
1553         case RBE_INERTIA:
1554             q = _("減速させる", "slow");
1555             break;
1556         case RBE_STUN:
1557             q = _("朦朧とさせる", "stun");
1558             break;
1559         }
1560
1561 #ifdef JP
1562         if (attack_numbers == 0) {
1563             hooked_roff(format("%^sは", wd_he[lore_ptr->msex]));
1564         }
1565
1566         if (d1 && d2 && (lore_ptr->know_everything || know_damage(r_idx, m))) {
1567             hooked_roff(format(" %dd%d ", d1, d2));
1568             hooked_roff("のダメージで");
1569         }
1570
1571         if (!p)
1572             p = "何か奇妙なことをする";
1573
1574         /* XXしてYYし/XXしてYYする/XXし/XXする */
1575         if (q != NULL)
1576             jverb(p, lore_ptr->jverb_buf, JVERB_TO);
1577         else if (attack_numbers != count - 1)
1578             jverb(p, lore_ptr->jverb_buf, JVERB_AND);
1579         else
1580             strcpy(lore_ptr->jverb_buf, p);
1581
1582         hooked_roff(lore_ptr->jverb_buf);
1583         if (q) {
1584             if (attack_numbers != count - 1)
1585                 jverb(q, lore_ptr->jverb_buf, JVERB_AND);
1586             else
1587                 strcpy(lore_ptr->jverb_buf, q);
1588             hooked_roff(lore_ptr->jverb_buf);
1589         }
1590
1591         if (attack_numbers != count - 1)
1592             hooked_roff("、");
1593 #else
1594         if (attack_numbers == 0) {
1595             hooked_roff(format("%^s can ", wd_he[lore_ptr->msex]));
1596         } else if (attack_numbers < count - 1) {
1597             hooked_roff(", ");
1598         } else {
1599             hooked_roff(", and ");
1600         }
1601
1602         if (!p)
1603             p = "do something weird";
1604         hooked_roff(p);
1605         if (q) {
1606             hooked_roff(" to ");
1607             hooked_roff(q);
1608             if (d1 && d2 && (lore_ptr->know_everything || know_damage(r_idx, m))) {
1609                 hooked_roff(" with damage");
1610                 hooked_roff(format(" %dd%d", d1, d2));
1611             }
1612         }
1613 #endif
1614
1615         attack_numbers++;
1616     }
1617
1618     if (attack_numbers > 0) {
1619         hooked_roff(_("。", ".  "));
1620     } else if (lore_ptr->flags1 & RF1_NEVER_BLOW) {
1621         hooked_roff(format(_("%^sは物理的な攻撃方法を持たない。", "%^s has no physical attacks.  "), wd_he[lore_ptr->msex]));
1622     } else {
1623         hooked_roff(format(_("%s攻撃については何も知らない。", "Nothing is known about %s attack.  "), wd_his[lore_ptr->msex]));
1624     }
1625
1626     bool is_kingpin = (lore_ptr->flags1 & RF1_QUESTOR) != 0;
1627     is_kingpin &= lore_ptr->r_ptr->r_sights > 0;
1628     is_kingpin &= lore_ptr->r_ptr->max_num > 0;
1629     is_kingpin &= (r_idx == MON_OBERON) || (r_idx == MON_SERPENT);
1630     if (is_kingpin) {
1631         hook_c_roff(TERM_VIOLET, _("あなたはこのモンスターを殺したいという強い欲望を感じている...", "You feel an intense desire to kill this monster...  "));
1632     } else if (lore_ptr->flags7 & RF7_GUARDIAN) {
1633         hook_c_roff(TERM_L_RED, _("このモンスターはダンジョンの主である。", "This monster is the master of a dungeon."));
1634     }
1635
1636     hooked_roff("\n");
1637 }