2 * @brief モンスターの思い出を表示する処理
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-monster-lore.h"
28 * 英語の複数系記述用マクロ / Pluralizer. Args(count, singular, plural)
30 #define plural(c, s, p) (((c) == 1) ? (s) : (p))
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 文字列を格納するポインタ
42 void dice_to_string(int base_damage, int dice_num, int dice_side, int dice_mult, int dice_div, char *msg)
44 char base[80] = "", dice[80] = "", mult[80] = "";
47 sprintf(msg, "%d", base_damage);
52 sprintf(base, "%d+", base_damage);
55 sprintf(dice, "d%d", dice_side);
57 sprintf(dice, "%dd%d", dice_num, dice_side);
59 if (dice_mult != 1 || dice_div != 1) {
61 sprintf(mult, "*%d", dice_mult);
63 sprintf(mult, "*(%d/%d)", dice_mult, dice_div);
66 sprintf(msg, "%s%s%s", base, dice, mult);
70 * @brief モンスターのAC情報を得ることができるかを返す / Determine if the "armor" is known
71 * @param r_idx モンスターの種族ID
72 * @return 敵のACを知る条件が満たされているならTRUEを返す
74 * The higher the level, the fewer kills needed.
76 static bool know_armour(MONRACE_IDX r_idx)
78 monster_race *r_ptr = &r_info[r_idx];
79 DEPTH level = r_ptr->level;
80 MONSTER_NUMBER kills = r_ptr->r_tkills;
82 bool known = (r_ptr->r_cast_spell == MAX_UCHAR) ? TRUE : FALSE;
84 if (cheat_know || known)
86 if (kills > 304 / (4 + level))
88 if (!(r_ptr->flags1 & RF1_UNIQUE))
90 if (kills > 304 / (38 + (5 * level) / 4))
96 * @brief モンスターの打撃威力を知ることができるかどうかを返す
97 * Determine if the "damage" of the given attack is known
98 * @param r_idx モンスターの種族ID
100 * @return 敵のダメージダイスを知る条件が満たされているならTRUEを返す
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
107 static bool know_damage(MONRACE_IDX r_idx, int i)
109 monster_race *r_ptr = &r_info[r_idx];
110 DEPTH level = r_ptr->level;
111 s32b a = r_ptr->r_blows[i];
113 s32b d1 = r_ptr->blow[i].d_dice;
114 s32b d2 = r_ptr->blow[i].d_side;
117 if (d >= ((4 + level) * MAX_UCHAR) / 80)
118 d = ((4 + level) * MAX_UCHAR - 1) / 80;
119 if ((4 + level) * a > 80 * d)
121 if (!(r_ptr->flags1 & RF1_UNIQUE))
123 if ((4 + level) * (2 * a) > 80 * d)
130 * @brief 文字列にモンスターの攻撃力を加える
131 * @param r_idx モンスターの種族ID
132 * @param SPELL_NUM 呪文番号
134 * @param tmp 返すメッセージを格納する配列
137 static void set_damage(player_type *player_ptr, MONRACE_IDX r_idx, monster_spell_type ms_type, char *msg, char *tmp)
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);
148 if (know_armour(r_idx))
149 sprintf(tmp, msg, dice_str);
151 sprintf(tmp, msg, "");
154 static void set_drop_flags(lore_type *lore_ptr)
156 if (!lore_ptr->know_everything)
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));
163 if (lore_ptr->r_ptr->flags1 & RF1_ONLY_GOLD)
164 lore_ptr->drop_item = 0;
166 if (lore_ptr->r_ptr->flags1 & RF1_ONLY_ITEM)
167 lore_ptr->drop_gold = 0;
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;
178 static void set_msex_flags(lore_type *lore_ptr)
180 lore_ptr->msex = MSEX_NONE;
181 if (lore_ptr->r_ptr->flags1 & RF1_FEMALE) {
182 lore_ptr->msex = MSEX_FEMALE;
186 if (lore_ptr->r_ptr->flags1 & RF1_MALE)
187 lore_ptr->msex = MSEX_MALE;
190 static void set_flags1(lore_type *lore_ptr)
192 if (lore_ptr->r_ptr->flags1 & RF1_UNIQUE)
193 lore_ptr->flags1 |= (RF1_UNIQUE);
195 if (lore_ptr->r_ptr->flags1 & RF1_QUESTOR)
196 lore_ptr->flags1 |= (RF1_QUESTOR);
198 if (lore_ptr->r_ptr->flags1 & RF1_MALE)
199 lore_ptr->flags1 |= (RF1_MALE);
201 if (lore_ptr->r_ptr->flags1 & RF1_FEMALE)
202 lore_ptr->flags1 |= (RF1_FEMALE);
204 if (lore_ptr->r_ptr->flags1 & RF1_FRIENDS)
205 lore_ptr->flags1 |= (RF1_FRIENDS);
207 if (lore_ptr->r_ptr->flags1 & RF1_ESCORT)
208 lore_ptr->flags1 |= (RF1_ESCORT);
210 if (lore_ptr->r_ptr->flags1 & RF1_ESCORTS)
211 lore_ptr->flags1 |= (RF1_ESCORTS);
214 static void set_race_flags(lore_type *lore_ptr)
216 if (!lore_ptr->r_ptr->r_tkills && !lore_ptr->know_everything)
219 if (lore_ptr->r_ptr->flags3 & RF3_ORC)
220 lore_ptr->flags3 |= (RF3_ORC);
222 if (lore_ptr->r_ptr->flags3 & RF3_TROLL)
223 lore_ptr->flags3 |= (RF3_TROLL);
225 if (lore_ptr->r_ptr->flags3 & RF3_GIANT)
226 lore_ptr->flags3 |= (RF3_GIANT);
228 if (lore_ptr->r_ptr->flags3 & RF3_DRAGON)
229 lore_ptr->flags3 |= (RF3_DRAGON);
231 if (lore_ptr->r_ptr->flags3 & RF3_DEMON)
232 lore_ptr->flags3 |= (RF3_DEMON);
234 if (lore_ptr->r_ptr->flags3 & RF3_UNDEAD)
235 lore_ptr->flags3 |= (RF3_UNDEAD);
237 if (lore_ptr->r_ptr->flags3 & RF3_EVIL)
238 lore_ptr->flags3 |= (RF3_EVIL);
240 if (lore_ptr->r_ptr->flags3 & RF3_GOOD)
241 lore_ptr->flags3 |= (RF3_GOOD);
243 if (lore_ptr->r_ptr->flags3 & RF3_ANIMAL)
244 lore_ptr->flags3 |= (RF3_ANIMAL);
246 if (lore_ptr->r_ptr->flags3 & RF3_AMBERITE)
247 lore_ptr->flags3 |= (RF3_AMBERITE);
249 if (lore_ptr->r_ptr->flags2 & RF2_HUMAN)
250 lore_ptr->flags2 |= (RF2_HUMAN);
252 if (lore_ptr->r_ptr->flags2 & RF2_QUANTUM)
253 lore_ptr->flags2 |= (RF2_QUANTUM);
255 if (lore_ptr->r_ptr->flags1 & RF1_FORCE_DEPTH)
256 lore_ptr->flags1 |= (RF1_FORCE_DEPTH);
258 if (lore_ptr->r_ptr->flags1 & RF1_FORCE_MAXHP)
259 lore_ptr->flags1 |= (RF1_FORCE_MAXHP);
263 * @brief モンスターの思い出情報を表示するメインルーチン
264 * Hack -- display monster information using "hooked_roff()"
265 * @param r_idx モンスターの種族ID
266 * @param mode 表示オプション
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.
273 void process_monster_lore(player_type *player_ptr, MONRACE_IDX r_idx, BIT_FLAGS mode)
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;
282 if (cheat_know || (mode & 0x01))
283 lore_ptr->know_everything = TRUE;
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;
296 if (r_idx == MON_KAGE) {
301 if (!display_where_to_appear(lore_ptr))
304 display_monster_move(lore_ptr);
305 display_monster_never_move(lore_ptr);
307 hooked_roff(_("。", ". "));
308 lore_ptr->old = FALSE;
311 if (lore_ptr->r_ptr->r_tkills || lore_ptr->know_everything) {
315 if (lore_ptr->flags1 & RF1_UNIQUE) {
316 hooked_roff("Killing this");
318 hooked_roff("A kill of this");
322 if (lore_ptr->flags2 & RF2_ELDRITCH_HORROR)
323 hook_c_roff(TERM_VIOLET, _("狂気を誘う", " sanity-blasting"));
325 if (lore_ptr->flags3 & RF3_ANIMAL)
326 hook_c_roff(TERM_L_GREEN, _("自然界の", " natural"));
328 if (lore_ptr->flags3 & RF3_EVIL)
329 hook_c_roff(TERM_L_DARK, _("邪悪なる", " evil"));
331 if (lore_ptr->flags3 & RF3_GOOD)
332 hook_c_roff(TERM_YELLOW, _("善良な", " good"));
334 if (lore_ptr->flags3 & RF3_UNDEAD)
335 hook_c_roff(TERM_VIOLET, _("アンデッドの", " undead"));
337 if (lore_ptr->flags3 & RF3_AMBERITE)
338 hook_c_roff(TERM_VIOLET, _("アンバーの王族の", " Amberite"));
340 if ((lore_ptr->flags3 & (RF3_DRAGON | RF3_DEMON | RF3_GIANT | RF3_TROLL | RF3_ORC | RF3_ANGEL)) || (lore_ptr->flags2 & (RF2_QUANTUM | RF2_HUMAN))) {
341 if (lore_ptr->flags3 & RF3_DRAGON)
342 hook_c_roff(TERM_ORANGE, _("ドラゴン", " dragon"));
343 if (lore_ptr->flags3 & RF3_DEMON)
344 hook_c_roff(TERM_VIOLET, _("デーモン", " demon"));
345 if (lore_ptr->flags3 & RF3_GIANT)
346 hook_c_roff(TERM_L_UMBER, _("巨人", " giant"));
347 if (lore_ptr->flags3 & RF3_TROLL)
348 hook_c_roff(TERM_BLUE, _("トロル", " troll"));
349 if (lore_ptr->flags3 & RF3_ORC)
350 hook_c_roff(TERM_UMBER, _("オーク", " orc"));
351 if (lore_ptr->flags2 & RF2_HUMAN)
352 hook_c_roff(TERM_L_WHITE, _("人間", " human"));
353 if (lore_ptr->flags2 & RF2_QUANTUM)
354 hook_c_roff(TERM_VIOLET, _("量子生物", " quantum creature"));
355 if (lore_ptr->flags3 & RF3_ANGEL)
356 hook_c_roff(TERM_YELLOW, _("天使", " angel"));
358 hooked_roff(_("モンスター", " creature"));
362 hooked_roff("を倒すことは");
364 long exp_integer = (long)lore_ptr->r_ptr->mexp * lore_ptr->r_ptr->level / (player_ptr->max_plv + 2) * 3 / 2;
366 = ((((long)lore_ptr->r_ptr->mexp * lore_ptr->r_ptr->level % (player_ptr->max_plv + 2) * 3 / 2) * (long)1000 / (player_ptr->max_plv + 2) + 5) / 10);
369 hooked_roff(format(" %d レベルのキャラクタにとって 約%ld.%02ld ポイントの経験となる。", player_ptr->lev, (long)exp_integer, (long)exp_decimal));
371 hooked_roff(format(" is worth about %ld.%02ld point%s", (long)exp_integer, (long)exp_decimal, ((exp_integer == 1) && (exp_decimal == 0)) ? "" : "s"));
375 exp_integer = player_ptr->lev % 10;
376 if ((player_ptr->lev / 10) != 1) {
377 if (exp_integer == 1)
379 else if (exp_integer == 2)
381 else if (exp_integer == 3)
387 exp_integer = player_ptr->lev;
388 if ((exp_integer == 8) || (exp_integer == 11) || (exp_integer == 18))
391 hooked_roff(format(" for a%s %lu%s level character. ", vowel, (long)exp_integer, ordinal));
395 if ((lore_ptr->flags2 & RF2_AURA_FIRE) && (lore_ptr->flags2 & RF2_AURA_ELEC) && (lore_ptr->flags3 & RF3_AURA_COLD)) {
397 TERM_VIOLET, format(_("%^sは炎と氷とスパークに包まれている。", "%^s is surrounded by flames, ice and electricity. "), wd_he[lore_ptr->msex]));
398 } else if ((lore_ptr->flags2 & RF2_AURA_FIRE) && (lore_ptr->flags2 & RF2_AURA_ELEC)) {
399 hook_c_roff(TERM_L_RED, format(_("%^sは炎とスパークに包まれている。", "%^s is surrounded by flames and electricity. "), wd_he[lore_ptr->msex]));
400 } else if ((lore_ptr->flags2 & RF2_AURA_FIRE) && (lore_ptr->flags3 & RF3_AURA_COLD)) {
401 hook_c_roff(TERM_BLUE, format(_("%^sは炎と氷に包まれている。", "%^s is surrounded by flames and ice. "), wd_he[lore_ptr->msex]));
402 } else if ((lore_ptr->flags3 & RF3_AURA_COLD) && (lore_ptr->flags2 & RF2_AURA_ELEC)) {
403 hook_c_roff(TERM_L_GREEN, format(_("%^sは氷とスパークに包まれている。", "%^s is surrounded by ice and electricity. "), wd_he[lore_ptr->msex]));
404 } else if (lore_ptr->flags2 & RF2_AURA_FIRE) {
405 hook_c_roff(TERM_RED, format(_("%^sは炎に包まれている。", "%^s is surrounded by flames. "), wd_he[lore_ptr->msex]));
406 } else if (lore_ptr->flags3 & RF3_AURA_COLD) {
407 hook_c_roff(TERM_BLUE, format(_("%^sは氷に包まれている。", "%^s is surrounded by ice. "), wd_he[lore_ptr->msex]));
408 } else if (lore_ptr->flags2 & RF2_AURA_ELEC) {
409 hook_c_roff(TERM_L_BLUE, format(_("%^sはスパークに包まれている。", "%^s is surrounded by electricity. "), wd_he[lore_ptr->msex]));
412 if (lore_ptr->flags2 & RF2_REFLECTING)
413 hooked_roff(format(_("%^sは矢の呪文を跳ね返す。", "%^s reflects bolt spells. "), wd_he[lore_ptr->msex]));
415 if ((lore_ptr->flags1 & RF1_ESCORT) || (lore_ptr->flags1 & RF1_ESCORTS) || lore_ptr->reinforce) {
416 hooked_roff(format(_("%^sは通常護衛を伴って現れる。", "%^s usually appears with escorts. "), wd_he[lore_ptr->msex]));
418 if (lore_ptr->reinforce) {
419 hooked_roff(_("護衛の構成は", "These escorts"));
420 if ((lore_ptr->flags1 & RF1_ESCORT) || (lore_ptr->flags1 & RF1_ESCORTS)) {
421 hooked_roff(_("少なくとも", " at the least"));
425 hooked_roff(" contain ");
427 for (int n = 0; n < A_MAX; n++) {
428 bool is_reinforced = lore_ptr->r_ptr->reinforce_id[n] > 0;
429 is_reinforced &= lore_ptr->r_ptr->reinforce_dd[n] > 0;
430 is_reinforced &= lore_ptr->r_ptr->reinforce_ds[n] > 0;
434 monster_race *rf_ptr = &r_info[lore_ptr->r_ptr->reinforce_id[n]];
435 if (rf_ptr->flags1 & RF1_UNIQUE) {
436 hooked_roff(format(_("、%s", ", %s"), r_name + rf_ptr->name));
441 hooked_roff(format("、 %dd%d 体の%s", lore_ptr->r_ptr->reinforce_dd[n], lore_ptr->r_ptr->reinforce_ds[n], r_name + rf_ptr->name));
443 bool plural = (lore_ptr->r_ptr->reinforce_dd[n] * lore_ptr->r_ptr->reinforce_ds[n] > 1);
444 GAME_TEXT name[MAX_NLEN];
445 strcpy(name, r_name + rf_ptr->name);
448 hooked_roff(format(",%dd%d %s", lore_ptr->r_ptr->reinforce_dd[n], lore_ptr->r_ptr->reinforce_ds[n], name));
452 hooked_roff(_("で成り立っている。", "."));
456 else if (lore_ptr->flags1 & RF1_FRIENDS) {
457 hooked_roff(format(_("%^sは通常集団で現れる。", "%^s usually appears in groups. "), wd_he[lore_ptr->msex]));
463 char tmp_msg[96][96];
464 if (lore_ptr->flags4 & RF4_SHRIEK) {
465 vp[vn] = _("悲鳴で助けを求める", "shriek for help");
466 color[vn++] = TERM_L_WHITE;
469 if (lore_ptr->flags4 & RF4_ROCKET) {
470 set_damage(player_ptr, r_idx, (MS_ROCKET), _("ロケット%sを発射する", "shoot a rocket%s"), tmp_msg[vn]);
471 vp[vn] = tmp_msg[vn];
472 color[vn++] = TERM_UMBER;
475 if (lore_ptr->flags4 & RF4_SHOOT) {
476 for (int m = 0; m < 4; m++) {
477 if (lore_ptr->r_ptr->blow[m].method != RBM_SHOOT)
480 if (know_armour(r_idx))
482 tmp_msg[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);
484 sprintf(tmp_msg[vn], _("射撃をする", "fire an arrow"));
485 vp[vn] = tmp_msg[vn];
486 color[vn++] = TERM_UMBER;
491 if (lore_ptr->a_ability_flags2 & (RF6_SPECIAL)) {
492 vp[vn] = _("特別な行動をする", "do something");
493 color[vn++] = TERM_VIOLET;
497 hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
498 for (int n = 0; n < vn; n++) {
501 jverb(vp[n], lore_ptr->jverb_buf, JVERB_OR);
502 hook_c_roff(color[n], lore_ptr->jverb_buf);
503 hook_c_roff(color[n], "り");
506 hook_c_roff(color[n], vp[n]);
509 hooked_roff(" may ");
515 hook_c_roff(color[n], vp[n]);
519 hooked_roff(_("ことがある。", ". "));
523 if (lore_ptr->flags4 & (RF4_BR_ACID)) {
524 set_damage(player_ptr, r_idx, (MS_BR_ACID), _("酸%s", "acid%s"), tmp_msg[vn]);
525 vp[vn] = tmp_msg[vn];
526 color[vn++] = TERM_GREEN;
529 if (lore_ptr->flags4 & (RF4_BR_ELEC)) {
530 set_damage(player_ptr, r_idx, (MS_BR_ELEC), _("稲妻%s", "lightning%s"), tmp_msg[vn]);
531 vp[vn] = tmp_msg[vn];
532 color[vn++] = TERM_BLUE;
535 if (lore_ptr->flags4 & (RF4_BR_FIRE)) {
536 set_damage(player_ptr, r_idx, (MS_BR_FIRE), _("火炎%s", "fire%s"), tmp_msg[vn]);
537 vp[vn] = tmp_msg[vn];
538 color[vn++] = TERM_RED;
541 if (lore_ptr->flags4 & (RF4_BR_COLD)) {
542 set_damage(player_ptr, r_idx, (MS_BR_COLD), _("冷気%s", "frost%s"), tmp_msg[vn]);
543 vp[vn] = tmp_msg[vn];
544 color[vn++] = TERM_L_WHITE;
547 if (lore_ptr->flags4 & (RF4_BR_POIS)) {
548 set_damage(player_ptr, r_idx, (MS_BR_POIS), _("毒%s", "poison%s"), tmp_msg[vn]);
549 vp[vn] = tmp_msg[vn];
550 color[vn++] = TERM_L_GREEN;
553 if (lore_ptr->flags4 & (RF4_BR_NETH)) {
554 set_damage(player_ptr, r_idx, (MS_BR_NETHER), _("地獄%s", "nether%s"), tmp_msg[vn]);
555 vp[vn] = tmp_msg[vn];
556 color[vn++] = TERM_L_DARK;
559 if (lore_ptr->flags4 & (RF4_BR_LITE)) {
560 set_damage(player_ptr, r_idx, (MS_BR_LITE), _("閃光%s", "light%s"), tmp_msg[vn]);
561 vp[vn] = tmp_msg[vn];
562 color[vn++] = TERM_YELLOW;
565 if (lore_ptr->flags4 & (RF4_BR_DARK)) {
566 set_damage(player_ptr, r_idx, (MS_BR_DARK), _("暗黒%s", "darkness%s"), tmp_msg[vn]);
567 vp[vn] = tmp_msg[vn];
568 color[vn++] = TERM_L_DARK;
571 if (lore_ptr->flags4 & (RF4_BR_CONF)) {
572 set_damage(player_ptr, r_idx, (MS_BR_CONF), _("混乱%s", "confusion%s"), tmp_msg[vn]);
573 vp[vn] = tmp_msg[vn];
574 color[vn++] = TERM_L_UMBER;
577 if (lore_ptr->flags4 & (RF4_BR_SOUN)) {
578 set_damage(player_ptr, r_idx, (MS_BR_SOUND), _("轟音%s", "sound%s"), tmp_msg[vn]);
579 vp[vn] = tmp_msg[vn];
580 color[vn++] = TERM_ORANGE;
583 if (lore_ptr->flags4 & (RF4_BR_CHAO)) {
584 set_damage(player_ptr, r_idx, (MS_BR_CHAOS), _("カオス%s", "chaos%s"), tmp_msg[vn]);
585 vp[vn] = tmp_msg[vn];
586 color[vn++] = TERM_VIOLET;
589 if (lore_ptr->flags4 & (RF4_BR_DISE)) {
590 set_damage(player_ptr, r_idx, (MS_BR_DISEN), _("劣化%s", "disenchantment%s"), tmp_msg[vn]);
591 vp[vn] = tmp_msg[vn];
592 color[vn++] = TERM_VIOLET;
595 if (lore_ptr->flags4 & (RF4_BR_NEXU)) {
596 set_damage(player_ptr, r_idx, (MS_BR_NEXUS), _("因果混乱%s", "nexus%s"), tmp_msg[vn]);
597 vp[vn] = tmp_msg[vn];
598 color[vn++] = TERM_VIOLET;
601 if (lore_ptr->flags4 & (RF4_BR_TIME)) {
602 set_damage(player_ptr, r_idx, (MS_BR_TIME), _("時間逆転%s", "time%s"), tmp_msg[vn]);
603 vp[vn] = tmp_msg[vn];
604 color[vn++] = TERM_L_BLUE;
607 if (lore_ptr->flags4 & (RF4_BR_INER)) {
608 set_damage(player_ptr, r_idx, (MS_BR_INERTIA), _("遅鈍%s", "inertia%s"), tmp_msg[vn]);
609 vp[vn] = tmp_msg[vn];
610 color[vn++] = TERM_SLATE;
613 if (lore_ptr->flags4 & (RF4_BR_GRAV)) {
614 set_damage(player_ptr, r_idx, (MS_BR_GRAVITY), _("重力%s", "gravity%s"), tmp_msg[vn]);
615 vp[vn] = tmp_msg[vn];
616 color[vn++] = TERM_SLATE;
619 if (lore_ptr->flags4 & (RF4_BR_SHAR)) {
620 set_damage(player_ptr, r_idx, (MS_BR_SHARDS), _("破片%s", "shards%s"), tmp_msg[vn]);
621 vp[vn] = tmp_msg[vn];
622 color[vn++] = TERM_L_UMBER;
625 if (lore_ptr->flags4 & (RF4_BR_PLAS)) {
626 set_damage(player_ptr, r_idx, (MS_BR_PLASMA), _("プラズマ%s", "plasma%s"), tmp_msg[vn]);
627 vp[vn] = tmp_msg[vn];
628 color[vn++] = TERM_L_RED;
631 if (lore_ptr->flags4 & (RF4_BR_WALL)) {
632 set_damage(player_ptr, r_idx, (MS_BR_FORCE), _("フォース%s", "force%s"), tmp_msg[vn]);
633 vp[vn] = tmp_msg[vn];
634 color[vn++] = TERM_UMBER;
637 if (lore_ptr->flags4 & (RF4_BR_MANA)) {
638 set_damage(player_ptr, r_idx, (MS_BR_MANA), _("魔力%s", "mana%s"), tmp_msg[vn]);
639 vp[vn] = tmp_msg[vn];
640 color[vn++] = TERM_L_BLUE;
643 if (lore_ptr->flags4 & (RF4_BR_NUKE)) {
644 set_damage(player_ptr, r_idx, (MS_BR_NUKE), _("放射性廃棄物%s", "toxic waste%s"), tmp_msg[vn]);
645 vp[vn] = tmp_msg[vn];
646 color[vn++] = TERM_L_GREEN;
649 if (lore_ptr->flags4 & (RF4_BR_DISI)) {
650 set_damage(player_ptr, r_idx, (MS_BR_DISI), _("分解%s", "disintegration%s"), tmp_msg[vn]);
651 vp[vn] = tmp_msg[vn];
652 color[vn++] = TERM_SLATE;
658 hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
659 for (int n = 0; n < vn; n++) {
665 hooked_roff(" may breathe ");
671 hook_c_roff(color[n], vp[n]);
675 hooked_roff("のブレスを吐くことがある");
680 if (lore_ptr->a_ability_flags1 & (RF5_BA_ACID)) {
681 set_damage(player_ptr, r_idx, (MS_BALL_ACID), _("アシッド・ボール%s", "produce acid balls%s"), tmp_msg[vn]);
682 vp[vn] = tmp_msg[vn];
683 color[vn++] = TERM_GREEN;
686 if (lore_ptr->a_ability_flags1 & (RF5_BA_ELEC)) {
687 set_damage(player_ptr, r_idx, (MS_BALL_ELEC), _("サンダー・ボール%s", "produce lightning balls%s"), tmp_msg[vn]);
688 vp[vn] = tmp_msg[vn];
689 color[vn++] = TERM_BLUE;
692 if (lore_ptr->a_ability_flags1 & (RF5_BA_FIRE)) {
693 set_damage(player_ptr, r_idx, (MS_BALL_FIRE), _("ファイア・ボール%s", "produce fire balls%s"), tmp_msg[vn]);
694 vp[vn] = tmp_msg[vn];
695 color[vn++] = TERM_RED;
698 if (lore_ptr->a_ability_flags1 & (RF5_BA_COLD)) {
699 set_damage(player_ptr, r_idx, (MS_BALL_COLD), _("アイス・ボール%s", "produce frost balls%s"), tmp_msg[vn]);
700 vp[vn] = tmp_msg[vn];
701 color[vn++] = TERM_L_WHITE;
704 if (lore_ptr->a_ability_flags1 & (RF5_BA_POIS)) {
705 set_damage(player_ptr, r_idx, (MS_BALL_POIS), _("悪臭雲%s", "produce poison balls%s"), tmp_msg[vn]);
706 vp[vn] = tmp_msg[vn];
707 color[vn++] = TERM_L_GREEN;
710 if (lore_ptr->a_ability_flags1 & (RF5_BA_NETH)) {
711 set_damage(player_ptr, r_idx, (MS_BALL_NETHER), _("地獄球%s", "produce nether balls%s"), tmp_msg[vn]);
712 vp[vn] = tmp_msg[vn];
713 color[vn++] = TERM_L_DARK;
716 if (lore_ptr->a_ability_flags1 & (RF5_BA_WATE)) {
717 set_damage(player_ptr, r_idx, (MS_BALL_WATER), _("ウォーター・ボール%s", "produce water balls%s"), tmp_msg[vn]);
718 vp[vn] = tmp_msg[vn];
719 color[vn++] = TERM_BLUE;
722 if (lore_ptr->flags4 & (RF4_BA_NUKE)) {
723 set_damage(player_ptr, r_idx, (MS_BALL_NUKE), _("放射能球%s", "produce balls of radiation%s"), tmp_msg[vn]);
724 vp[vn] = tmp_msg[vn];
725 color[vn++] = TERM_L_GREEN;
728 if (lore_ptr->a_ability_flags1 & (RF5_BA_MANA)) {
729 set_damage(player_ptr, r_idx, (MS_BALL_MANA), _("魔力の嵐%s", "invoke mana storms%s"), tmp_msg[vn]);
730 vp[vn] = tmp_msg[vn];
731 color[vn++] = TERM_L_BLUE;
734 if (lore_ptr->a_ability_flags1 & (RF5_BA_DARK)) {
735 set_damage(player_ptr, r_idx, (MS_BALL_DARK), _("暗黒の嵐%s", "invoke darkness storms%s"), tmp_msg[vn]);
736 vp[vn] = tmp_msg[vn];
737 color[vn++] = TERM_L_DARK;
740 if (lore_ptr->a_ability_flags1 & (RF5_BA_LITE)) {
741 set_damage(player_ptr, r_idx, (MS_STARBURST), _("スターバースト%s", "invoke starburst%s"), tmp_msg[vn]);
742 vp[vn] = tmp_msg[vn];
743 color[vn++] = TERM_YELLOW;
746 if (lore_ptr->flags4 & (RF4_BA_CHAO)) {
747 set_damage(player_ptr, r_idx, (MS_BALL_CHAOS), _("純ログルス%s", "invoke raw Logrus%s"), tmp_msg[vn]);
748 vp[vn] = tmp_msg[vn];
749 color[vn++] = TERM_VIOLET;
752 if (lore_ptr->a_ability_flags2 & (RF6_HAND_DOOM)) {
753 vp[vn] = _("破滅の手(40%-60%)", "invoke the Hand of Doom(40%-60%)");
754 color[vn++] = TERM_VIOLET;
757 if (lore_ptr->a_ability_flags2 & (RF6_PSY_SPEAR)) {
758 set_damage(player_ptr, r_idx, (MS_PSY_SPEAR), _("光の剣%s", "psycho-spear%s"), tmp_msg[vn]);
759 vp[vn] = tmp_msg[vn];
760 color[vn++] = TERM_YELLOW;
763 if (lore_ptr->a_ability_flags1 & (RF5_DRAIN_MANA)) {
764 set_damage(player_ptr, r_idx, (MS_DRAIN_MANA), _("魔力吸収%s", "drain mana%s"), tmp_msg[vn]);
765 vp[vn] = tmp_msg[vn];
766 color[vn++] = TERM_SLATE;
769 if (lore_ptr->a_ability_flags1 & (RF5_MIND_BLAST)) {
770 set_damage(player_ptr, r_idx, (MS_MIND_BLAST), _("精神攻撃%s", "cause mind blasting%s"), tmp_msg[vn]);
771 vp[vn] = tmp_msg[vn];
772 color[vn++] = TERM_L_RED;
775 if (lore_ptr->a_ability_flags1 & (RF5_BRAIN_SMASH)) {
776 set_damage(player_ptr, r_idx, (MS_BRAIN_SMASH), _("脳攻撃%s", "cause brain smashing%s"), tmp_msg[vn]);
777 vp[vn] = tmp_msg[vn];
778 color[vn++] = TERM_RED;
781 if (lore_ptr->a_ability_flags1 & (RF5_CAUSE_1)) {
782 set_damage(player_ptr, r_idx, (MS_CAUSE_1), _("軽傷+呪い%s", "cause light wounds and cursing%s"), tmp_msg[vn]);
783 vp[vn] = tmp_msg[vn];
784 color[vn++] = TERM_L_WHITE;
787 if (lore_ptr->a_ability_flags1 & (RF5_CAUSE_2)) {
788 set_damage(player_ptr, r_idx, (MS_CAUSE_2), _("重傷+呪い%s", "cause serious wounds and cursing%s"), tmp_msg[vn]);
789 vp[vn] = tmp_msg[vn];
790 color[vn++] = TERM_L_WHITE;
793 if (lore_ptr->a_ability_flags1 & (RF5_CAUSE_3)) {
794 set_damage(player_ptr, r_idx, (MS_CAUSE_3), _("致命傷+呪い%s", "cause critical wounds and cursing%s"), tmp_msg[vn]);
795 vp[vn] = tmp_msg[vn];
796 color[vn++] = TERM_L_WHITE;
799 if (lore_ptr->a_ability_flags1 & (RF5_CAUSE_4)) {
800 set_damage(player_ptr, r_idx, (MS_CAUSE_4), _("秘孔を突く%s", "cause mortal wounds%s"), tmp_msg[vn]);
801 vp[vn] = tmp_msg[vn];
802 color[vn++] = TERM_L_WHITE;
805 if (lore_ptr->a_ability_flags1 & (RF5_BO_ACID)) {
806 set_damage(player_ptr, r_idx, (MS_BOLT_ACID), _("アシッド・ボルト%s", "produce acid bolts%s"), tmp_msg[vn]);
807 vp[vn] = tmp_msg[vn];
808 color[vn++] = TERM_GREEN;
811 if (lore_ptr->a_ability_flags1 & (RF5_BO_ELEC)) {
812 set_damage(player_ptr, r_idx, (MS_BOLT_ELEC), _("サンダー・ボルト%s", "produce lightning bolts%s"), tmp_msg[vn]);
813 vp[vn] = tmp_msg[vn];
814 color[vn++] = TERM_BLUE;
817 if (lore_ptr->a_ability_flags1 & (RF5_BO_FIRE)) {
818 set_damage(player_ptr, r_idx, (MS_BOLT_FIRE), _("ファイア・ボルト%s", "produce fire bolts%s"), tmp_msg[vn]);
819 vp[vn] = tmp_msg[vn];
820 color[vn++] = TERM_RED;
823 if (lore_ptr->a_ability_flags1 & (RF5_BO_COLD)) {
824 set_damage(player_ptr, r_idx, (MS_BOLT_COLD), _("アイス・ボルト%s", "produce frost bolts%s"), tmp_msg[vn]);
825 vp[vn] = tmp_msg[vn];
826 color[vn++] = TERM_L_WHITE;
829 if (lore_ptr->a_ability_flags1 & (RF5_BO_NETH)) {
830 set_damage(player_ptr, r_idx, (MS_BOLT_NETHER), _("地獄の矢%s", "produce nether bolts%s"), tmp_msg[vn]);
831 vp[vn] = tmp_msg[vn];
832 color[vn++] = TERM_L_DARK;
835 if (lore_ptr->a_ability_flags1 & (RF5_BO_WATE)) {
836 set_damage(player_ptr, r_idx, (MS_BOLT_WATER), _("ウォーター・ボルト%s", "produce water bolts%s"), tmp_msg[vn]);
837 vp[vn] = tmp_msg[vn];
838 color[vn++] = TERM_BLUE;
841 if (lore_ptr->a_ability_flags1 & (RF5_BO_MANA)) {
842 set_damage(player_ptr, r_idx, (MS_BOLT_MANA), _("魔力の矢%s", "produce mana bolts%s"), tmp_msg[vn]);
843 vp[vn] = tmp_msg[vn];
844 color[vn++] = TERM_L_BLUE;
847 if (lore_ptr->a_ability_flags1 & (RF5_BO_PLAS)) {
848 set_damage(player_ptr, r_idx, (MS_BOLT_PLASMA), _("プラズマ・ボルト%s", "produce plasma bolts%s"), tmp_msg[vn]);
849 vp[vn] = tmp_msg[vn];
850 color[vn++] = TERM_L_RED;
853 if (lore_ptr->a_ability_flags1 & (RF5_BO_ICEE)) {
854 set_damage(player_ptr, r_idx, (MS_BOLT_ICE), _("極寒の矢%s", "produce ice bolts%s"), tmp_msg[vn]);
855 vp[vn] = tmp_msg[vn];
856 color[vn++] = TERM_WHITE;
859 if (lore_ptr->a_ability_flags1 & (RF5_MISSILE)) {
860 set_damage(player_ptr, r_idx, (MS_MAGIC_MISSILE), _("マジックミサイル%s", "produce magic missiles%s"), tmp_msg[vn]);
861 vp[vn] = tmp_msg[vn];
862 color[vn++] = TERM_SLATE;
865 if (lore_ptr->a_ability_flags1 & (RF5_SCARE)) {
866 vp[vn] = _("恐怖", "terrify");
867 color[vn++] = TERM_SLATE;
869 if (lore_ptr->a_ability_flags1 & (RF5_BLIND)) {
870 vp[vn] = _("目くらまし", "blind");
871 color[vn++] = TERM_L_DARK;
873 if (lore_ptr->a_ability_flags1 & (RF5_CONF)) {
874 vp[vn] = _("混乱", "confuse");
875 color[vn++] = TERM_L_UMBER;
877 if (lore_ptr->a_ability_flags1 & (RF5_SLOW)) {
878 vp[vn] = _("減速", "slow");
879 color[vn++] = TERM_UMBER;
881 if (lore_ptr->a_ability_flags1 & (RF5_HOLD)) {
882 vp[vn] = _("麻痺", "paralyze");
883 color[vn++] = TERM_RED;
885 if (lore_ptr->a_ability_flags2 & (RF6_HASTE)) {
886 vp[vn] = _("加速", "haste-self");
887 color[vn++] = TERM_L_GREEN;
889 if (lore_ptr->a_ability_flags2 & (RF6_HEAL)) {
890 vp[vn] = _("治癒", "heal-self");
891 color[vn++] = TERM_WHITE;
893 if (lore_ptr->a_ability_flags2 & (RF6_INVULNER)) {
894 vp[vn] = _("無敵化", "make invulnerable");
895 color[vn++] = TERM_WHITE;
897 if (lore_ptr->flags4 & RF4_DISPEL) {
898 vp[vn] = _("魔力消去", "dispel-magic");
899 color[vn++] = TERM_L_WHITE;
901 if (lore_ptr->a_ability_flags2 & (RF6_BLINK)) {
902 vp[vn] = _("ショートテレポート", "blink-self");
903 color[vn++] = TERM_UMBER;
905 if (lore_ptr->a_ability_flags2 & (RF6_TPORT)) {
906 vp[vn] = _("テレポート", "teleport-self");
907 color[vn++] = TERM_ORANGE;
909 if (lore_ptr->a_ability_flags2 & (RF6_WORLD)) {
910 vp[vn] = _("時を止める", "stop the time");
911 color[vn++] = TERM_L_BLUE;
913 if (lore_ptr->a_ability_flags2 & (RF6_TELE_TO)) {
914 vp[vn] = _("テレポートバック", "teleport to");
915 color[vn++] = TERM_L_UMBER;
917 if (lore_ptr->a_ability_flags2 & (RF6_TELE_AWAY)) {
918 vp[vn] = _("テレポートアウェイ", "teleport away");
919 color[vn++] = TERM_UMBER;
921 if (lore_ptr->a_ability_flags2 & (RF6_TELE_LEVEL)) {
922 vp[vn] = _("テレポート・レベル", "teleport level");
923 color[vn++] = TERM_ORANGE;
926 if (lore_ptr->a_ability_flags2 & (RF6_DARKNESS)) {
927 if ((player_ptr->pclass != CLASS_NINJA) || (lore_ptr->r_ptr->flags3 & (RF3_UNDEAD | RF3_HURT_LITE)) || (lore_ptr->r_ptr->flags7 & RF7_DARK_MASK)) {
928 vp[vn] = _("暗闇", "create darkness");
929 color[vn++] = TERM_L_DARK;
931 vp[vn] = _("閃光", "create light");
932 color[vn++] = TERM_YELLOW;
936 if (lore_ptr->a_ability_flags2 & (RF6_TRAPS)) {
937 vp[vn] = _("トラップ", "create traps");
938 color[vn++] = TERM_BLUE;
940 if (lore_ptr->a_ability_flags2 & (RF6_FORGET)) {
941 vp[vn] = _("記憶消去", "cause amnesia");
942 color[vn++] = TERM_BLUE;
944 if (lore_ptr->a_ability_flags2 & (RF6_RAISE_DEAD)) {
945 vp[vn] = _("死者復活", "raise dead");
946 color[vn++] = TERM_RED;
948 if (lore_ptr->a_ability_flags2 & (RF6_S_MONSTER)) {
949 vp[vn] = _("モンスター一体召喚", "summon a monster");
950 color[vn++] = TERM_SLATE;
952 if (lore_ptr->a_ability_flags2 & (RF6_S_MONSTERS)) {
953 vp[vn] = _("モンスター複数召喚", "summon monsters");
954 color[vn++] = TERM_L_WHITE;
956 if (lore_ptr->a_ability_flags2 & (RF6_S_KIN)) {
957 vp[vn] = _("救援召喚", "summon aid");
958 color[vn++] = TERM_ORANGE;
960 if (lore_ptr->a_ability_flags2 & (RF6_S_ANT)) {
961 vp[vn] = _("アリ召喚", "summon ants");
962 color[vn++] = TERM_RED;
964 if (lore_ptr->a_ability_flags2 & (RF6_S_SPIDER)) {
965 vp[vn] = _("クモ召喚", "summon spiders");
966 color[vn++] = TERM_L_DARK;
968 if (lore_ptr->a_ability_flags2 & (RF6_S_HOUND)) {
969 vp[vn] = _("ハウンド召喚", "summon hounds");
970 color[vn++] = TERM_L_UMBER;
972 if (lore_ptr->a_ability_flags2 & (RF6_S_HYDRA)) {
973 vp[vn] = _("ヒドラ召喚", "summon hydras");
974 color[vn++] = TERM_L_GREEN;
976 if (lore_ptr->a_ability_flags2 & (RF6_S_ANGEL)) {
977 vp[vn] = _("天使一体召喚", "summon an angel");
978 color[vn++] = TERM_YELLOW;
980 if (lore_ptr->a_ability_flags2 & (RF6_S_DEMON)) {
981 vp[vn] = _("デーモン一体召喚", "summon a demon");
982 color[vn++] = TERM_L_RED;
984 if (lore_ptr->a_ability_flags2 & (RF6_S_UNDEAD)) {
985 vp[vn] = _("アンデッド一体召喚", "summon an undead");
986 color[vn++] = TERM_L_DARK;
988 if (lore_ptr->a_ability_flags2 & (RF6_S_DRAGON)) {
989 vp[vn] = _("ドラゴン一体召喚", "summon a dragon");
990 color[vn++] = TERM_ORANGE;
992 if (lore_ptr->a_ability_flags2 & (RF6_S_HI_UNDEAD)) {
993 vp[vn] = _("強力なアンデッド召喚", "summon Greater Undead");
994 color[vn++] = TERM_L_DARK;
996 if (lore_ptr->a_ability_flags2 & (RF6_S_HI_DRAGON)) {
997 vp[vn] = _("古代ドラゴン召喚", "summon Ancient Dragons");
998 color[vn++] = TERM_ORANGE;
1000 if (lore_ptr->a_ability_flags2 & (RF6_S_CYBER)) {
1001 vp[vn] = _("サイバーデーモン召喚", "summon Cyberdemons");
1002 color[vn++] = TERM_UMBER;
1004 if (lore_ptr->a_ability_flags2 & (RF6_S_AMBERITES)) {
1005 vp[vn] = _("アンバーの王族召喚", "summon Lords of Amber");
1006 color[vn++] = TERM_VIOLET;
1008 if (lore_ptr->a_ability_flags2 & (RF6_S_UNIQUE)) {
1009 vp[vn] = _("ユニーク・モンスター召喚", "summon Unique Monsters");
1010 color[vn++] = TERM_VIOLET;
1017 hooked_roff(_("、なおかつ", ", and is also"));
1019 hooked_roff(format(_("%^sは", "%^s is"), wd_he[lore_ptr->msex]));
1023 if (lore_ptr->flags2 & (RF2_SMART))
1024 hook_c_roff(TERM_YELLOW, "的確に");
1025 hooked_roff("魔法を使うことができ、");
1027 hooked_roff(" magical, casting spells");
1028 if (lore_ptr->flags2 & RF2_SMART)
1029 hook_c_roff(TERM_YELLOW, " intelligently");
1032 for (int n = 0; n < vn; n++) {
1038 hooked_roff(" which ");
1039 else if (n < vn - 1)
1042 hooked_roff(" or ");
1044 hook_c_roff(color[n], vp[n]);
1048 hooked_roff("の呪文を唱えることがある");
1052 if (breath || magic) {
1053 int m = lore_ptr->r_ptr->r_cast_spell;
1054 int n = lore_ptr->r_ptr->freq_spell;
1055 if (m > 100 || lore_ptr->know_everything) {
1056 hooked_roff(format(_("(確率:1/%d)", "; 1 time in %d"), 100 / n));
1058 n = ((n + 9) / 10) * 10;
1059 hooked_roff(format(_("(確率:約1/%d)", "; about 1 time in %d"), 100 / n));
1062 hooked_roff(_("。", ". "));
1065 if (lore_ptr->know_everything || know_armour(r_idx)) {
1066 hooked_roff(format(_("%^sは AC%d の防御力と", "%^s has an armor rating of %d"), wd_he[lore_ptr->msex], lore_ptr->r_ptr->ac));
1068 if ((lore_ptr->flags1 & RF1_FORCE_MAXHP) || (lore_ptr->r_ptr->hside == 1)) {
1069 u32b hp = lore_ptr->r_ptr->hdice * (lore_ptr->nightmare ? 2 : 1) * lore_ptr->r_ptr->hside;
1070 hooked_roff(format(_(" %d の体力がある。", " and a life rating of %d. "), (s16b)MIN(30000, hp)));
1073 _(" %dd%d の体力がある。", " and a life rating of %dd%d. "), lore_ptr->r_ptr->hdice * (lore_ptr->nightmare ? 2 : 1), lore_ptr->r_ptr->hside));
1078 if (lore_ptr->flags7 & (RF7_HAS_LITE_1 | RF7_HAS_LITE_2)) {
1079 vp[vn] = _("ダンジョンを照らす", "illuminate the dungeon");
1080 color[vn++] = TERM_WHITE;
1082 if (lore_ptr->flags7 & (RF7_HAS_DARK_1 | RF7_HAS_DARK_2)) {
1083 vp[vn] = _("ダンジョンを暗くする", "darken the dungeon");
1084 color[vn++] = TERM_L_DARK;
1086 if (lore_ptr->flags2 & RF2_OPEN_DOOR) {
1087 vp[vn] = _("ドアを開ける", "open doors");
1088 color[vn++] = TERM_WHITE;
1090 if (lore_ptr->flags2 & RF2_BASH_DOOR) {
1091 vp[vn] = _("ドアを打ち破る", "bash down doors");
1092 color[vn++] = TERM_WHITE;
1094 if (lore_ptr->flags7 & RF7_CAN_FLY) {
1095 vp[vn] = _("空を飛ぶ", "fly");
1096 color[vn++] = TERM_WHITE;
1098 if (lore_ptr->flags7 & RF7_CAN_SWIM) {
1099 vp[vn] = _("水を渡る", "swim");
1100 color[vn++] = TERM_WHITE;
1102 if (lore_ptr->flags2 & RF2_PASS_WALL) {
1103 vp[vn] = _("壁をすり抜ける", "pass through walls");
1104 color[vn++] = TERM_WHITE;
1106 if (lore_ptr->flags2 & RF2_KILL_WALL) {
1107 vp[vn] = _("壁を掘り進む", "bore through walls");
1108 color[vn++] = TERM_WHITE;
1110 if (lore_ptr->flags2 & RF2_MOVE_BODY) {
1111 vp[vn] = _("弱いモンスターを押しのける", "push past weaker monsters");
1112 color[vn++] = TERM_WHITE;
1114 if (lore_ptr->flags2 & RF2_KILL_BODY) {
1115 vp[vn] = _("弱いモンスターを倒す", "destroy weaker monsters");
1116 color[vn++] = TERM_WHITE;
1118 if (lore_ptr->flags2 & RF2_TAKE_ITEM) {
1119 vp[vn] = _("アイテムを拾う", "pick up objects");
1120 color[vn++] = TERM_WHITE;
1122 if (lore_ptr->flags2 & RF2_KILL_ITEM) {
1123 vp[vn] = _("アイテムを壊す", "destroy objects");
1124 color[vn++] = TERM_WHITE;
1128 hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
1129 for (int n = 0; n < vn; n++) {
1132 jverb(vp[n], lore_ptr->jverb_buf, JVERB_AND);
1133 hook_c_roff(color[n], lore_ptr->jverb_buf);
1136 hook_c_roff(color[n], vp[n]);
1140 hooked_roff(" can ");
1141 else if (n < vn - 1)
1144 hooked_roff(" and ");
1146 hook_c_roff(color[n], vp[n]);
1150 hooked_roff(_("ことができる。", ". "));
1153 if (lore_ptr->flags7 & RF7_AQUATIC) {
1154 hooked_roff(format(_("%^sは水中に棲んでいる。", "%^s lives in water. "), wd_he[lore_ptr->msex]));
1157 if (lore_ptr->flags7 & (RF7_SELF_LITE_1 | RF7_SELF_LITE_2)) {
1158 hooked_roff(format(_("%^sは光っている。", "%^s is shining. "), wd_he[lore_ptr->msex]));
1161 if (lore_ptr->flags7 & (RF7_SELF_DARK_1 | RF7_SELF_DARK_2)) {
1162 hook_c_roff(TERM_L_DARK, format(_("%^sは暗黒に包まれている。", "%^s is surrounded by darkness. "), wd_he[lore_ptr->msex]));
1165 if (lore_ptr->flags2 & RF2_INVISIBLE) {
1166 hooked_roff(format(_("%^sは透明で目に見えない。", "%^s is invisible. "), wd_he[lore_ptr->msex]));
1169 if (lore_ptr->flags2 & RF2_COLD_BLOOD) {
1170 hooked_roff(format(_("%^sは冷血動物である。", "%^s is cold blooded. "), wd_he[lore_ptr->msex]));
1173 if (lore_ptr->flags2 & RF2_EMPTY_MIND) {
1174 hooked_roff(format(_("%^sはテレパシーでは感知できない。", "%^s is not detected by telepathy. "), wd_he[lore_ptr->msex]));
1175 } else if (lore_ptr->flags2 & RF2_WEIRD_MIND) {
1176 hooked_roff(format(_("%^sはまれにテレパシーで感知できる。", "%^s is rarely detected by telepathy. "), wd_he[lore_ptr->msex]));
1179 if (lore_ptr->flags2 & RF2_MULTIPLY) {
1180 hook_c_roff(TERM_L_UMBER, format(_("%^sは爆発的に増殖する。", "%^s breeds explosively. "), wd_he[lore_ptr->msex]));
1183 if (lore_ptr->flags2 & RF2_REGENERATE) {
1184 hook_c_roff(TERM_L_WHITE, format(_("%^sは素早く体力を回復する。", "%^s regenerates quickly. "), wd_he[lore_ptr->msex]));
1187 if (lore_ptr->flags7 & RF7_RIDING) {
1188 hook_c_roff(TERM_SLATE, format(_("%^sに乗ることができる。", "%^s is suitable for riding. "), wd_he[lore_ptr->msex]));
1192 if (lore_ptr->flags3 & RF3_HURT_ROCK) {
1193 vp[vn] = _("岩を除去するもの", "rock remover");
1194 color[vn++] = TERM_UMBER;
1196 if (lore_ptr->flags3 & RF3_HURT_LITE) {
1197 vp[vn] = _("明るい光", "bright light");
1198 color[vn++] = TERM_YELLOW;
1200 if (lore_ptr->flags3 & RF3_HURT_FIRE) {
1201 vp[vn] = _("炎", "fire");
1202 color[vn++] = TERM_RED;
1204 if (lore_ptr->flags3 & RF3_HURT_COLD) {
1205 vp[vn] = _("冷気", "cold");
1206 color[vn++] = TERM_L_WHITE;
1210 hooked_roff(format(_("%^sには", "%^s"), wd_he[lore_ptr->msex]));
1212 for (int n = 0; n < vn; n++) {
1218 hooked_roff(" is hurt by ");
1219 else if (n < vn - 1)
1222 hooked_roff(" and ");
1224 hook_c_roff(color[n], vp[n]);
1227 hooked_roff(_("でダメージを与えられる。", ". "));
1231 if (lore_ptr->flagsr & RFR_IM_ACID) {
1232 vp[vn] = _("酸", "acid");
1233 color[vn++] = TERM_GREEN;
1235 if (lore_ptr->flagsr & RFR_IM_ELEC) {
1236 vp[vn] = _("稲妻", "lightning");
1237 color[vn++] = TERM_BLUE;
1239 if (lore_ptr->flagsr & RFR_IM_FIRE) {
1240 vp[vn] = _("炎", "fire");
1241 color[vn++] = TERM_RED;
1243 if (lore_ptr->flagsr & RFR_IM_COLD) {
1244 vp[vn] = _("冷気", "cold");
1245 color[vn++] = TERM_L_WHITE;
1247 if (lore_ptr->flagsr & RFR_IM_POIS) {
1248 vp[vn] = _("毒", "poison");
1249 color[vn++] = TERM_L_GREEN;
1252 if (lore_ptr->flagsr & RFR_RES_LITE) {
1253 vp[vn] = _("閃光", "light");
1254 color[vn++] = TERM_YELLOW;
1256 if (lore_ptr->flagsr & RFR_RES_DARK) {
1257 vp[vn] = _("暗黒", "dark");
1258 color[vn++] = TERM_L_DARK;
1260 if (lore_ptr->flagsr & RFR_RES_NETH) {
1261 vp[vn] = _("地獄", "nether");
1262 color[vn++] = TERM_L_DARK;
1264 if (lore_ptr->flagsr & RFR_RES_WATE) {
1265 vp[vn] = _("水", "water");
1266 color[vn++] = TERM_BLUE;
1268 if (lore_ptr->flagsr & RFR_RES_PLAS) {
1269 vp[vn] = _("プラズマ", "plasma");
1270 color[vn++] = TERM_L_RED;
1272 if (lore_ptr->flagsr & RFR_RES_SHAR) {
1273 vp[vn] = _("破片", "shards");
1274 color[vn++] = TERM_L_UMBER;
1276 if (lore_ptr->flagsr & RFR_RES_SOUN) {
1277 vp[vn] = _("轟音", "sound");
1278 color[vn++] = TERM_ORANGE;
1280 if (lore_ptr->flagsr & RFR_RES_CHAO) {
1281 vp[vn] = _("カオス", "chaos");
1282 color[vn++] = TERM_VIOLET;
1284 if (lore_ptr->flagsr & RFR_RES_NEXU) {
1285 vp[vn] = _("因果混乱", "nexus");
1286 color[vn++] = TERM_VIOLET;
1288 if (lore_ptr->flagsr & RFR_RES_DISE) {
1289 vp[vn] = _("劣化", "disenchantment");
1290 color[vn++] = TERM_VIOLET;
1292 if (lore_ptr->flagsr & RFR_RES_WALL) {
1293 vp[vn] = _("フォース", "force");
1294 color[vn++] = TERM_UMBER;
1296 if (lore_ptr->flagsr & RFR_RES_INER) {
1297 vp[vn] = _("遅鈍", "inertia");
1298 color[vn++] = TERM_SLATE;
1300 if (lore_ptr->flagsr & RFR_RES_TIME) {
1301 vp[vn] = _("時間逆転", "time");
1302 color[vn++] = TERM_L_BLUE;
1304 if (lore_ptr->flagsr & RFR_RES_GRAV) {
1305 vp[vn] = _("重力", "gravity");
1306 color[vn++] = TERM_SLATE;
1308 if (lore_ptr->flagsr & RFR_RES_ALL) {
1309 vp[vn] = _("あらゆる攻撃", "all");
1310 color[vn++] = TERM_YELLOW;
1312 if ((lore_ptr->flagsr & RFR_RES_TELE) && !(lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) {
1313 vp[vn] = _("テレポート", "teleportation");
1314 color[vn++] = TERM_ORANGE;
1318 hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
1319 for (int n = 0; n < vn; n++) {
1325 hooked_roff(" resists ");
1326 else if (n < vn - 1)
1329 hooked_roff(" and ");
1331 hook_c_roff(color[n], vp[n]);
1334 hooked_roff(_("の耐性を持っている。", ". "));
1337 if ((lore_ptr->r_ptr->r_xtra1 & MR1_SINKA) || lore_ptr->know_everything) {
1338 if (lore_ptr->r_ptr->next_r_idx) {
1339 hooked_roff(format(_("%^sは経験を積むと、", "%^s will evolve into "), wd_he[lore_ptr->msex]));
1340 hook_c_roff(TERM_YELLOW, format("%s", r_name + r_info[lore_ptr->r_ptr->next_r_idx].name));
1342 hooked_roff(_(format("に進化する。"), format(" when %s gets enough experience. ", wd_he[lore_ptr->msex])));
1343 } else if (!(lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) {
1344 hooked_roff(format(_("%sは進化しない。", "%s won't evolve. "), wd_he[lore_ptr->msex]));
1349 if (lore_ptr->flags3 & RF3_NO_STUN) {
1350 vp[vn] = _("朦朧としない", "stunned");
1351 color[vn++] = TERM_ORANGE;
1353 if (lore_ptr->flags3 & RF3_NO_FEAR) {
1354 vp[vn] = _("恐怖を感じない", "frightened");
1355 color[vn++] = TERM_SLATE;
1357 if (lore_ptr->flags3 & RF3_NO_CONF) {
1358 vp[vn] = _("混乱しない", "confused");
1359 color[vn++] = TERM_L_UMBER;
1361 if (lore_ptr->flags3 & RF3_NO_SLEEP) {
1362 vp[vn] = _("眠らされない", "slept");
1363 color[vn++] = TERM_BLUE;
1365 if ((lore_ptr->flagsr & RFR_RES_TELE) && (lore_ptr->r_ptr->flags1 & RF1_UNIQUE)) {
1366 vp[vn] = _("テレポートされない", "teleported");
1367 color[vn++] = TERM_ORANGE;
1371 hooked_roff(format(_("%^sは", "%^s"), wd_he[lore_ptr->msex]));
1372 for (int n = 0; n < vn; n++) {
1378 hooked_roff(" cannot be ");
1379 else if (n < vn - 1)
1382 hooked_roff(" or ");
1384 hook_c_roff(color[n], vp[n]);
1387 hooked_roff(_("。", ". "));
1390 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)
1391 || (lore_ptr->r_ptr->sleep == 0 && lore_ptr->r_ptr->r_tkills >= 10) || lore_ptr->know_everything) {
1393 if (lore_ptr->r_ptr->sleep > 200) {
1394 act = _("を無視しがちであるが", "prefers to ignore");
1395 } else if (lore_ptr->r_ptr->sleep > 95) {
1396 act = _("に対してほとんど注意を払わないが", "pays very little attention to");
1397 } else if (lore_ptr->r_ptr->sleep > 75) {
1398 act = _("に対してあまり注意を払わないが", "pays little attention to");
1399 } else if (lore_ptr->r_ptr->sleep > 45) {
1400 act = _("を見過ごしがちであるが", "tends to overlook");
1401 } else if (lore_ptr->r_ptr->sleep > 25) {
1402 act = _("をほんの少しは見ており", "takes quite a while to see");
1403 } else if (lore_ptr->r_ptr->sleep > 10) {
1404 act = _("をしばらくは見ており", "takes a while to see");
1405 } else if (lore_ptr->r_ptr->sleep > 5) {
1406 act = _("を幾分注意深く見ており", "is fairly observant of");
1407 } else if (lore_ptr->r_ptr->sleep > 3) {
1408 act = _("を注意深く見ており", "is observant of");
1409 } else if (lore_ptr->r_ptr->sleep > 1) {
1410 act = _("をかなり注意深く見ており", "is very observant of");
1411 } else if (lore_ptr->r_ptr->sleep > 0) {
1412 act = _("を警戒しており", "is vigilant for");
1414 act = _("をかなり警戒しており", "is ever vigilant for");
1417 hooked_roff(_(format("%^sは侵入者%s、 %d フィート先から侵入者に気付くことがある。", wd_he[lore_ptr->msex], act, 10 * lore_ptr->r_ptr->aaf),
1418 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)));
1421 if (lore_ptr->drop_gold || lore_ptr->drop_item) {
1422 hooked_roff(format(_("%^sは", "%^s may carry"), wd_he[lore_ptr->msex]));
1425 lore_ptr->sin = FALSE;
1428 int n = MAX(lore_ptr->drop_gold, lore_ptr->drop_item);
1430 hooked_roff(_("一つの", " a"));
1433 lore_ptr->sin = TRUE;
1435 } else if (n == 2) {
1436 hooked_roff(_("一つか二つの", " one or two"));
1438 hooked_roff(format(_(" %d 個までの", " up to %d"), n));
1442 if (lore_ptr->flags1 & RF1_DROP_GREAT) {
1443 p = _("特別な", " exceptional");
1444 } else if (lore_ptr->flags1 & RF1_DROP_GOOD) {
1445 p = _("上質な", " good");
1448 lore_ptr->sin = FALSE;
1454 if (lore_ptr->drop_item) {
1460 lore_ptr->sin = FALSE;
1464 hooked_roff(_("アイテム", " object"));
1473 if (lore_ptr->drop_gold) {
1477 lore_ptr->sin = FALSE;
1482 lore_ptr->sin = FALSE;
1486 hooked_roff(_("財宝", " treasure"));
1494 hooked_roff(_("を持っていることがある。", ". "));
1497 const int max_attack_numbers = 4;
1499 for (int m = 0; m < max_attack_numbers; m++) {
1500 if (!lore_ptr->r_ptr->blow[m].method)
1502 if (lore_ptr->r_ptr->blow[m].method == RBM_SHOOT)
1505 if (lore_ptr->r_ptr->r_blows[m] || lore_ptr->know_everything)
1509 int attack_numbers = 0;
1510 for (int m = 0; m < max_attack_numbers; m++) {
1511 if (!lore_ptr->r_ptr->blow[m].method)
1513 if (lore_ptr->r_ptr->blow[m].method == RBM_SHOOT)
1515 if (!lore_ptr->r_ptr->r_blows[m] && !lore_ptr->know_everything)
1518 rbm_type method = lore_ptr->r_ptr->blow[m].method;
1519 int effect = lore_ptr->r_ptr->blow[m].effect;
1520 int d1 = lore_ptr->r_ptr->blow[m].d_dice;
1521 int d2 = lore_ptr->r_ptr->blow[m].d_side;
1529 p = _("触る", "touch");
1532 p = _("パンチする", "punch");
1535 p = _("蹴る", "kick");
1538 p = _("ひっかく", "claw");
1541 p = _("噛む", "bite");
1544 p = _("刺す", "sting");
1547 p = _("斬る", "slash");
1550 p = _("角で突く", "butt");
1553 p = _("体当たりする", "crush");
1556 p = _("飲み込む", "engulf");
1559 p = _("請求書をよこす", "charge");
1562 p = _("体の上を這い回る", "crawl on you");
1565 p = _("よだれをたらす", "drool on you");
1568 p = _("つばを吐く", "spit");
1571 p = _("爆発する", "explode");
1574 p = _("にらむ", "gaze");
1577 p = _("泣き叫ぶ", "wail");
1580 p = _("胞子を飛ばす", "release spores");
1585 p = _("金をせがむ", "beg");
1588 p = _("侮辱する", "insult");
1591 p = _("うめく", "moan");
1594 p = _("歌う", "sing");
1601 q = _("強力に攻撃する", "slaughter");
1604 q = _("攻撃する", "attack");
1607 q = _("毒をくらわす", "poison");
1610 q = _("劣化させる", "disenchant");
1613 q = _("充填魔力を吸収する", "drain charges");
1616 q = _("金を盗む", "steal gold");
1619 q = _("アイテムを盗む", "steal items");
1622 q = _("あなたの食料を食べる", "eat your food");
1625 q = _("明かりを吸収する", "absorb light");
1628 q = _("酸を飛ばす", "shoot acid");
1631 q = _("感電させる", "electrocute");
1634 q = _("燃やす", "burn");
1637 q = _("凍らせる", "freeze");
1640 q = _("盲目にする", "blind");
1643 q = _("混乱させる", "confuse");
1646 q = _("恐怖させる", "terrify");
1649 q = _("麻痺させる", "paralyze");
1652 q = _("腕力を減少させる", "reduce strength");
1655 q = _("知能を減少させる", "reduce intelligence");
1658 q = _("賢さを減少させる", "reduce wisdom");
1661 q = _("器用さを減少させる", "reduce dexterity");
1664 q = _("耐久力を減少させる", "reduce constitution");
1667 q = _("魅力を減少させる", "reduce charisma");
1670 q = _("全ステータスを減少させる", "reduce all stats");
1673 q = _("粉砕する", "shatter");
1676 q = _("経験値を減少(10d6+)させる", "lower experience (by 10d6+)");
1679 q = _("経験値を減少(20d6+)させる", "lower experience (by 20d6+)");
1682 q = _("経験値を減少(40d6+)させる", "lower experience (by 40d6+)");
1685 q = _("経験値を減少(80d6+)させる", "lower experience (by 80d6+)");
1688 q = _("病気にする", "disease");
1691 q = _("時間を逆戻りさせる", "time");
1694 q = _("生命力を吸収する", "drain life");
1697 q = _("魔力を奪う", "drain mana force");
1700 q = _("減速させる", "slow");
1703 q = _("朦朧とさせる", "stun");
1708 if (attack_numbers == 0) {
1709 hooked_roff(format("%^sは", wd_he[lore_ptr->msex]));
1712 if (d1 && d2 && (lore_ptr->know_everything || know_damage(r_idx, m))) {
1713 hooked_roff(format(" %dd%d ", d1, d2));
1714 hooked_roff("のダメージで");
1720 /* XXしてYYし/XXしてYYする/XXし/XXする */
1722 jverb(p, lore_ptr->jverb_buf, JVERB_TO);
1723 else if (attack_numbers != count - 1)
1724 jverb(p, lore_ptr->jverb_buf, JVERB_AND);
1726 strcpy(lore_ptr->jverb_buf, p);
1728 hooked_roff(lore_ptr->jverb_buf);
1730 if (attack_numbers != count - 1)
1731 jverb(q, lore_ptr->jverb_buf, JVERB_AND);
1733 strcpy(lore_ptr->jverb_buf, q);
1734 hooked_roff(lore_ptr->jverb_buf);
1737 if (attack_numbers != count - 1)
1740 if (attack_numbers == 0) {
1741 hooked_roff(format("%^s can ", wd_he[lore_ptr->msex]));
1742 } else if (attack_numbers < count - 1) {
1745 hooked_roff(", and ");
1749 p = "do something weird";
1752 hooked_roff(" to ");
1754 if (d1 && d2 && (lore_ptr->know_everything || know_damage(r_idx, m))) {
1755 hooked_roff(" with damage");
1756 hooked_roff(format(" %dd%d", d1, d2));
1764 if (attack_numbers > 0) {
1765 hooked_roff(_("。", ". "));
1766 } else if (lore_ptr->flags1 & RF1_NEVER_BLOW) {
1767 hooked_roff(format(_("%^sは物理的な攻撃方法を持たない。", "%^s has no physical attacks. "), wd_he[lore_ptr->msex]));
1769 hooked_roff(format(_("%s攻撃については何も知らない。", "Nothing is known about %s attack. "), wd_his[lore_ptr->msex]));
1772 bool is_kingpin = (lore_ptr->flags1 & RF1_QUESTOR) != 0;
1773 is_kingpin &= lore_ptr->r_ptr->r_sights > 0;
1774 is_kingpin &= lore_ptr->r_ptr->max_num > 0;
1775 is_kingpin &= (r_idx == MON_OBERON) || (r_idx == MON_SERPENT);
1777 hook_c_roff(TERM_VIOLET, _("あなたはこのモンスターを殺したいという強い欲望を感じている...", "You feel an intense desire to kill this monster... "));
1778 } else if (lore_ptr->flags7 & RF7_GUARDIAN) {
1779 hook_c_roff(TERM_L_RED, _("このモンスターはダンジョンの主である。", "This monster is the master of a dungeon."));