3 * @brief 各職業の特殊技能実装 / Special magics
6 * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke\n
7 * This software may be copied and distributed for educational, research,\n
8 * and not for profit purposes provided that this copyright and statement\n
9 * are included in all such copies. Other copyrights may also apply.\n
11 * 2014 Deskull rearranged comment for Doxygen.\n
13 * mind.cとあるが実際には超能力者、練気術師、狂戦士、鏡使い、忍者までの
23 mind_power mind_powers[5] =
27 /* Level gained, cost, %fail, name */
34 { 11, 7, 30, "念動衝撃弾"},
36 { 15, 12, 60, "サイコメトリー"},
37 { 18, 10, 45, "精神波動"},
38 { 23, 15, 50, "アドレナリン・ドーピング"},
39 { 26, 28, 60, "テレキネシス"},
40 { 28, 10, 40, "サイキック・ドレイン"},
42 { 45,150, 85, "完全な世界"},
51 { 1, 1, 15, "Precognition"},
52 { 2, 1, 20, "Neural Blast"},
53 { 3, 2, 25, "Minor Displacement"},
54 { 7, 6, 35, "Major Displacement"},
55 { 9, 7, 50, "Domination"},
56 { 11, 7, 30, "Pulverise"},
57 { 13, 12, 50, "Character Armour"},
58 { 15, 12, 60, "Psychometry" },
59 { 18, 10, 45, "Mind Wave" },
60 { 23, 15, 50, "Adrenaline Channeling"},
61 { 26, 28, 60, "Telekinesis"},
62 { 28, 10, 40, "Psychic Drain"},
63 { 35, 35, 75, "Psycho-Spear"},
64 { 45,150, 85, "The World"},
79 /* Level gained, cost, %fail, name */
85 { 10, 7, 45, "対魔法防御"},
90 { 25, 30, 70, "いてつく波動"},
91 { 28, 26, 50, "幻霊召喚"},
92 { 32, 35, 65, "煉獄火炎"},
93 { 38, 42, 75, "超カメハメ波"},
94 { 44, 50, 80, "光速移動"},
103 { 1, 1, 15, "Small Force Ball"},
104 { 3, 3, 30, "Flash Light"},
105 { 5, 6, 35, "Flying Technique"},
106 { 8, 5, 40, "Kamehameha"},
107 { 10, 7, 45, "Magic Resistance"},
108 { 13, 5, 60, "Improve Force"},
109 { 17, 17, 50, "Aura of Force"},
110 { 20, 20, 50, "Shock Power"},
111 { 23, 18, 55, "Large Force Ball"},
112 { 25, 30, 70, "Dispel Magic"},
113 { 28, 26, 50, "Summon Ghost"},
114 { 32, 35, 65, "Exploding Frame"},
115 { 38, 42, 75, "Super Kamehameha"},
116 { 44, 50, 80, "Light Speed"},
131 /* Level gained, cost, %fail, name */
135 { 20, 15, 0, "トラップ粉砕"},
137 { 30, 80, 75, "皆殺し"},
155 { 8, 5, 40, "Detect Atmosphere of Menace"},
156 { 15, 20, 0, "Charge"},
157 { 20, 15, 0, "Smash a Trap"},
158 { 25, 20, 60, "Quake"},
159 { 30, 80, 75, "Massacre"},
183 /* Level gained, cost, %fail, name */
187 { 2, 2, 20, "光のしずく"},
192 { 10, 5, 30, "微塵隠れ"},
193 { 12, 12, 30, "追放の鏡"},
194 { 15, 15, 30, "鏡砕き"},
195 { 19, 13, 30, "催眠鏡"},
196 { 23, 18, 50, "シーカーレイ"},
198 { 25, 20, 40, "鏡の封印"},
199 { 27, 30, 60, "水鏡の盾"},
200 { 29, 30, 60, "スーパーレイ"},
201 { 31, 35, 60, "幻惑の光"},
202 { 33, 50, 80, "鏡の国"},
204 { 36, 30, 80, "鏡抜け"},
205 { 38, 40, 70, "帰還の鏡"},
206 { 40, 50, 55, "影分身"},
207 { 43, 55, 70, "封魔結界"},
208 { 46, 70, 75, "ラフノールの鏡"},
210 { 1, 1, 15, "Mirror of Seeing"},
211 { 1, 2, 40, "Making a Mirror"},
212 { 2, 2, 20, "Drip of Light"},
213 { 3, 2, 20, "Warped Mirror"},
214 { 5, 3, 35, "Mirror of Light"},
215 { 6, 5, 35, "Mirror of Wandering"},
217 { 10, 5, 30, "Robe of Dust"},
218 { 12, 12, 30, "Banishing Mirror"},
219 { 15, 15, 30, "Mirror Clashing"},
220 { 19, 13, 30, "Mirror Sleeping"},
221 { 23, 18, 50, "Seeker Ray"},
223 { 25, 20, 40, "Seal of Mirror"},
224 { 27, 30, 60, "Shield of Water"},
225 { 29, 30, 60, "Super Ray"},
226 { 31, 35, 60, "Illusion Light"},
227 { 33, 50, 80, "Mirror Shift"},
229 { 36, 30, 80, "Mirror Tunnel"},
230 { 38, 40, 70, "Mirror of Recall"},
231 { 40, 50, 55, "Multi-Shadow"},
232 { 43, 55, 70, "Binding Field"},
233 { 46, 70, 75, "Mirror of Ruffnor"},
241 /* Level gained, cost, %fail, name */
248 { 8, 10, 35, "一撃離脱"},
249 { 10, 10, 40, "金縛り"},
250 { 12, 12, 70, "古の口伝"},
254 { 20, 5, 50, "八方手裏剣"},
258 { 30, 30, 70, "爆発の紋章"},
260 { 34, 35, 50, "霧隠れ"},
261 { 38, 40, 60, "煉獄火炎"},
265 { 1, 1, 20, "Create Darkness"},
266 { 2, 2, 25, "Detect Near"},
267 { 3, 3, 25, "Hide in Leafs"},
268 { 5, 3, 30, "Kawarimi"},
269 { 7, 8, 35, "Absconding"},
270 { 8, 10, 35, "Hit and Away"},
271 { 10, 10, 40, "Bind Monster"},
272 { 12, 12, 70, "Ancient Knowledge"},
273 { 15, 10, 50, "Floating"},
274 { 17, 12, 45, "Hide in Flame"},
275 { 18, 20, 40, "Nyusin"},
276 { 20, 5, 50, "Syuriken Spreading"},
277 { 22, 15, 55, "Chain Hook"},
278 { 25, 32, 60, "Smoke Ball"},
279 { 28, 32, 60, "Swap Position"},
280 { 30, 30, 70, "Glyph of Explosion"},
281 { 32, 40, 40, "Hide in Mud"},
282 { 34, 35, 50, "Hide in Mist"},
283 { 38, 40, 60, "Rengoku-Kaen"},
284 { 41, 50, 55, "Bunshin"},
293 * @brief 特殊技能の効果情報をまとめたフォーマットを返す
294 * @param p 情報を返す文字列参照ポインタ
295 * @param use_mind 職業毎の特殊技能ID
296 * @param power モンスター魔法のID
299 void mindcraft_info(char *p, int use_mind, int power)
304 cptr s_range = "範囲:";
308 cptr s_range = "range ";
310 int plev = p_ptr->lev;
316 case MIND_MINDCRAFTER:
320 case 1: sprintf(p, " %s%dd%d", s_dam, 3 + ((plev - 1) / 4), 3 + plev/15); break;
321 case 2: sprintf(p, " %s10", s_range); break;
322 case 3: sprintf(p, " %s%d", s_range, plev * 5); break;
324 case 5: sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 4)); break;
325 case 6: sprintf(p, " %s%d", s_dur, plev); break;
327 case 8: sprintf(p, (plev < 25 ? " %s%d" : " %sd%d"), s_dam, (plev < 25 ? plev * 3 / 2 : plev * ((plev - 5) / 10 + 1))); break;
328 case 9: sprintf(p, " %s10+d%d", s_dur, plev * 3 / 2); break;
330 case 10: sprintf(p, " 最大重量:%d.%dkg", lbtokg1(plev * 15),lbtokg2(plev * 15)); break;
332 case 10: sprintf(p, " max wgt %d", plev * 15); break;
334 case 11: sprintf(p, " %s%dd6", s_dam, plev / 2); break;
335 case 12: sprintf(p, " %sd%d+%d", s_dam, plev * 3, plev * 3); break;
336 case 13: sprintf(p, _(" 行動:%ld回", " %ld acts."), (long int)(p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break;
341 int boost = p_ptr->magic_num1[0];
343 if (heavy_armor()) boost /= 2;
347 case 0: sprintf(p, " %s%dd4", s_dam, 3 + ((plev - 1) / 5) + boost / 12); break;
349 case 2: sprintf(p, " %s%d+d30", s_dur, 30 + boost / 5); break;
350 case 3: sprintf(p, " %s%dd5", s_dam, 5 + ((plev - 1) / 5) + boost / 10); break;
351 case 4: sprintf(p, " %s%d+d20", s_dur, 20 + boost / 5); break;
353 case 6: sprintf(p, " %s%d+d%d", s_dur, 15 + boost / 7, plev / 2); break;
354 case 7: sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 5) + boost / 12); break;
355 case 8: sprintf(p, " %s10d6+%d", s_dam, plev * 3 / 2 + boost * 3 / 5); break;
357 case 10: sprintf(p, _(" 最大%d体", " max %d"), 1+boost/100); break;
358 case 11: sprintf(p, " %s%d", s_dam, 100 + plev + boost); break;
359 case 12: sprintf(p, " %s%dd15", s_dam, 10 + plev / 2 + boost * 3 / 10); break;
360 case 13: sprintf(p, _(" 行動:%d+d16回", " %d+d16 acts"), 16+boost/20); break;
364 case MIND_MIRROR_MASTER:
370 case 2: sprintf(p, " %s%dd4", s_dam, 3 + ((plev - 1) / 5) ); break;
371 case 3: sprintf(p, " %s10", s_range); break;
373 case 5: sprintf(p, " %s%d", s_range, plev *5); break;
374 case 6: sprintf(p, " %s20+d20", s_dur); break;
376 case 8: sprintf(p, " %s%dd8", s_dam, 8+((plev -5)/4) ); break;
378 case 10: sprintf(p, " %s%dd8", s_dam, 11+(plev-5)/4 ); break;
380 case 12: sprintf(p, " %s20+d20", s_dur); break;
381 case 13: sprintf(p, " %s150+d%d", s_dam, plev*2 ); break;
384 case 16: sprintf(p, " %s%d", s_range, plev/2 +10); break;
386 case 18: sprintf(p, " %s6+d6", s_dur); break;
387 case 19: sprintf(p, " %s%d", s_dam, plev*11+5 ); break;
388 case 20: sprintf(p, " %s4+d4", s_dur); break;
398 case 2: sprintf(p, " %s10", s_range); break;
400 case 4: sprintf(p, " %s%d", s_range , plev *5); break;
401 case 5: sprintf(p, " %s30", s_range); break;
404 case 8: sprintf(p, " %s20+d20", s_dur); break;
405 case 9: sprintf(p, " %s%d", s_dam, (50+plev)/2 ); break;
412 case 16: sprintf(p, " %s%d+d%d", s_dur, plev/2, plev/2); break;
413 case 17: sprintf(p, " %s%d*3", s_dam, (75+plev*2/3)/2 ); break;
414 case 18: sprintf(p, " %s%dd10", s_dam, 6+plev/8 ); break;
415 case 19: sprintf(p, " %s6+d6", s_dur); break;
423 * @brief 使用可能な特殊技能を選択する /
424 * Allow user to choose a mindcrafter power.
425 * @param sn 選択した特殊技能ID、キャンセルの場合-1、不正な選択の場合-2を返す
426 * @param only_browse 一覧を見るだけの場合TRUEを返す
427 * @return 発動可能な魔法を選択した場合TRUE、キャンセル処理か不正な選択が行われた場合FALSEを返す。
429 * If a valid spell is chosen, saves it in '*sn' and returns TRUE\n
430 * If the user hits escape, returns FALSE, and set '*sn' to -1\n
431 * If there are no legal choices, returns FALSE, and sets '*sn' to -2\n
433 * The "prompt" should be "cast", "recite", or "study"\n
434 * The "known" should be TRUE for cast/pray, FALSE for study\n
436 * nb: This function has a (trivial) display bug which will be obvious\n
437 * when you run it. It's probably easy to fix but I haven't tried,\n
440 static int get_mind_power(int *sn, bool only_browse)
447 int plev = p_ptr->lev;
456 mind_power *mind_ptr;
459 int menu_line = (use_menu ? 1 : 0);
461 switch(p_ptr->pclass)
463 case CLASS_MINDCRAFTER:
465 use_mind = MIND_MINDCRAFTER;
466 p = _("超能力", "mindcraft");
469 case CLASS_FORCETRAINER:
472 p = _("練気術", "Force");
475 case CLASS_BERSERKER:
477 use_mind = MIND_BERSERKER;
478 p = _("技", "brutal power");
481 case CLASS_MIRROR_MASTER:
483 use_mind = MIND_MIRROR_MASTER;
484 p = _("鏡魔法", "magic");
489 use_mind = MIND_NINJUTSU;
490 p = _("忍術", "ninjutsu");
496 p = _("超能力", "mindcraft");
500 mind_ptr = &mind_powers[use_mind];
502 /* Assume cancelled */
505 #ifdef ALLOW_REPEAT /* TNB */
507 /* Get the spell, if available */
510 /* Hack -- If requested INVEN_FORCE(1111), pull again */
511 if (*sn == INVEN_FORCE) repeat_pull(sn);
513 /* Verify the spell */
514 if (mind_ptr->info[*sn].min_lev <= plev)
521 #endif /* ALLOW_REPEAT -- TNB */
523 /* Nothing chosen yet */
529 for (i = 0; i < MAX_MIND_POWERS; i++)
531 if (mind_ptr->info[i].min_lev <= plev)
537 /* Build a prompt (accept all spells) */
540 (void) strnfmt(out_val, 78,
541 _("(%^s %c-%c, '*'で一覧, ESC) どの%sについて知りますか?", "(%^ss %c-%c, *=List, ESC=exit) Use which %s? "),
542 p, I2A(0), I2A(num - 1), p);
546 (void) strnfmt(out_val, 78,
547 _("(%^s %c-%c, '*'で一覧, ESC) どの%sを使いますか?", "(%^ss %c-%c, *=List, ESC=exit) Use which %s? "),
548 p, I2A(0), I2A(num - 1), p);
551 if (use_menu && !only_browse) screen_save();
552 /* Get a spell from the user */
554 choice= (always_show_list || use_menu) ? ESCAPE:1 ;
557 if(choice==ESCAPE) choice = ' ';
558 else if( !get_com(out_val, &choice, TRUE) )break;
560 if (use_menu && choice != ' ')
566 if (!only_browse) screen_load();
574 menu_line += (num - 1);
596 if (menu_line > num) menu_line -= num;
599 if ((choice == ' ') || (choice == '*') || (choice == '?') || (use_menu && ask))
602 if (!redraw || use_menu)
610 /* Save the screen */
611 if (!only_browse && !use_menu) screen_save();
613 /* Display a list of spells */
615 put_str(_("名前", "Name"), y, x + 5);
618 put_str(format("Lv %s 失率 効果", ((use_mind == MIND_BERSERKER) || (use_mind == MIND_NINJUTSU)) ? "HP" : "MP"), y, x + 35);
620 put_str(format("Lv %s Fail Info", ((use_mind == MIND_BERSERKER) || (use_mind == MIND_NINJUTSU)) ? "HP" : "MP"), y, x + 35);
622 has_weapon[0] = buki_motteruka(INVEN_RARM);
623 has_weapon[1] = buki_motteruka(INVEN_LARM);
625 /* Dump the spells */
626 for (i = 0; i < MAX_MIND_POWERS; i++)
630 /* Access the spell */
631 spell = mind_ptr->info[i];
633 if (spell.min_lev > plev) break;
637 mana_cost = spell.mana_cost;
641 /* Reduce failure rate by "effective" level adjustment */
642 chance -= 3 * (plev - spell.min_lev);
644 /* Reduce failure rate by INT/WIS adjustment */
645 chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[mp_ptr->spell_stat]] - 1);
647 if (use_mind == MIND_KI)
649 if (heavy_armor()) chance += 20;
650 if (p_ptr->icky_wield[0]) chance += 20;
651 else if (has_weapon[0]) chance += 10;
652 if (p_ptr->icky_wield[1]) chance += 20;
653 else if (has_weapon[1]) chance += 10;
657 for (j = 0; j < p_ptr->magic_num1[0] / 50; j++)
658 mana_cost += (j+1) * 3 / 2;
662 /* Not enough mana to cast */
663 if ((use_mind != MIND_BERSERKER) && (use_mind != MIND_NINJUTSU) && (mana_cost > p_ptr->csp))
665 chance += 5 * (mana_cost - p_ptr->csp);
668 chance += p_ptr->to_m_chance;
670 /* Extract the minimum failure rate */
671 minfail = adj_mag_fail[p_ptr->stat_ind[mp_ptr->spell_stat]];
673 /* Minimum failure rate */
674 if (chance < minfail) chance = minfail;
676 /* Stunning makes spells harder */
677 if (p_ptr->stun > 50) chance += 25;
678 else if (p_ptr->stun) chance += 15;
680 if (use_mind == MIND_KI)
682 if (heavy_armor()) chance += 5;
683 if (p_ptr->icky_wield[0]) chance += 5;
684 if (p_ptr->icky_wield[1]) chance += 5;
686 /* Always a 5 percent chance of working */
687 if (chance > 95) chance = 95;
691 mindcraft_info(comment, use_mind, i);
695 if (i == (menu_line-1)) strcpy(psi_desc, _(" 》 ", " > "));
696 else strcpy(psi_desc, " ");
699 sprintf(psi_desc, " %c) ",I2A(i));
700 /* Dump the spell --(-- */
702 format("%-30s%2d %4d%s %3d%%%s",
703 spell.name, spell.min_lev, mana_cost,
705 (((use_mind == MIND_MINDCRAFTER) && (i == 13)) ? "~" : " "),
707 (((use_mind == MIND_MINDCRAFTER) && (i == 13)) ? "~ " : " "),
710 prt(psi_desc, y + i + 1, x);
713 /* Clear the bottom line */
714 prt("", y + i + 1, x);
718 else if (!only_browse)
723 /* Restore the screen */
734 ask = isupper(choice);
737 if (ask) choice = tolower(choice);
739 /* Extract request */
740 i = (islower(choice) ? A2I(choice) : -1);
743 /* Totally Illegal */
744 if ((i < 0) || (i >= num))
750 /* Save the spell index */
751 spell = mind_ptr->info[i];
759 (void) strnfmt(tmp_val, 78, _("%sを使いますか?", "Use %s? "), spell.name);
761 /* Belay that order */
762 if (!get_check(tmp_val)) continue;
769 /* Restore the screen */
770 if (redraw && !only_browse) screen_load();
773 p_ptr->window |= (PW_SPELL);
778 /* Abort if needed */
779 if (!flag) return (FALSE);
781 /* Save the choice */
784 #ifdef ALLOW_REPEAT /* TNB */
788 #endif /* ALLOW_REPEAT -- TNB */
796 * do_cmd_cast calls this function if the player's class is 'mindcrafter'.
797 * @param spell 発動する特殊技能のID
798 * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
800 static bool cast_mindcrafter_spell(int spell)
804 int plev = p_ptr->lev;
812 chg_virtue(V_KNOWLEDGE, 1);
813 chg_virtue(V_ENLIGHTEN, 1);
817 map_area(DETECT_RAD_MAP);
821 b = detect_monsters_normal(DETECT_RAD_DEFAULT);
822 if (plev > 14) b |= detect_monsters_invis(DETECT_RAD_DEFAULT);
824 b |= detect_traps(DETECT_RAD_DEFAULT, TRUE);
825 b |= detect_doors(DETECT_RAD_DEFAULT);
830 b = detect_all(DETECT_RAD_DEFAULT);
833 if ((plev > 24) && (plev < 40))
834 set_tim_esp(plev, FALSE);
836 if (!b) msg_print(_("安全な気がする。", "You feel safe."));
841 if (!get_aim_dir(&dir)) return FALSE;
843 if (randint1(100) < plev * 2)
844 fire_beam(GF_PSI, dir, damroll(3 + ((plev - 1) / 4), (3 + plev / 15)));
846 fire_ball(GF_PSI, dir, damroll(3 + ((plev - 1) / 4), (3 + plev / 15)), 0);
850 teleport_player(10, 0L);
854 teleport_player(plev * 5, 0L);
860 if (!get_aim_dir(&dir)) return FALSE;
862 fire_ball(GF_DOMINATION, dir, plev, 0);
866 charm_monsters(plev * 2);
870 /* Fist of Force --- not 'true' TK */
871 if (!get_aim_dir(&dir)) return FALSE;
873 fire_ball(GF_TELEKINESIS, dir, damroll(8 + ((plev - 5) / 4), 8),
874 (plev > 20 ? (plev - 20) / 8 + 1 : 0));
877 /* Character Armour */
878 set_shield(plev, FALSE);
879 if (plev > 14) set_oppose_acid(plev, FALSE);
880 if (plev > 19) set_oppose_fire(plev, FALSE);
881 if (plev > 24) set_oppose_cold(plev, FALSE);
882 if (plev > 29) set_oppose_elec(plev, FALSE);
883 if (plev > 34) set_oppose_pois(plev, FALSE);
888 return psychometry();
890 return ident_spell(FALSE);
893 msg_print(_("精神を捻じ曲げる波動を発生させた!", "Mind-warping forces emanate from your brain!"));
896 project(0, 2 + plev / 10, py, px,
897 (plev * 3), GF_PSI, PROJECT_KILL, -1);
899 (void)mindblast_monsters(randint1(plev * ((plev - 5) / 10 + 1)));
907 * Only heal when Adrenalin Channeling is not active. We check
908 * that by checking if the player isn't fast and 'heroed' atm.
910 if (!IS_FAST() || !IS_HERO())
915 b = 10 + randint1((plev * 3) / 2);
918 (void)set_fast(b, FALSE);
922 if (!get_aim_dir(&dir)) return FALSE;
924 fetch(dir, plev * 15, FALSE);
929 if (!get_aim_dir(&dir)) return FALSE;
931 b = damroll(plev / 2, 6);
933 /* This is always a radius-0 ball now */
934 if (fire_ball(GF_PSI_DRAIN, dir, b, 0))
935 p_ptr->energy_need += randint1(150);
939 if (!get_aim_dir(&dir)) return FALSE;
941 fire_beam(GF_PSY_SPEAR, dir, randint1(plev*3)+plev*3);
947 msg_print(_("既に時は止まっている。", "Time is already stopped."));
951 msg_print(_("「時よ!」", "You yell 'Time!'"));
955 p_ptr->energy_need -= 1000 + (100 + p_ptr->csp - 50)*TURNS_PER_TICK/10;
958 p_ptr->redraw |= (PR_MAP);
960 /* Update monsters */
961 p_ptr->update |= (PU_MONSTERS);
964 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
970 msg_print(_("なに?", "Zap?"));
978 * do_cmd_cast calls this function if the player's class is 'ForceTrainer'.
979 * @param spell 発動する特殊技能のID
980 * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
982 static bool cast_force_spell(int spell)
985 int plev = p_ptr->lev;
986 int boost = p_ptr->magic_num1[0];
988 if (heavy_armor()) boost /= 2;
994 if (!get_aim_dir(&dir)) return FALSE;
995 fire_ball(GF_MISSILE, dir, damroll(3 + ((plev - 1) / 5) + boost / 12, 4), 0);
998 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1001 set_tim_levitation(randint1(30) + 30 + boost / 5, FALSE);
1004 project_length = plev / 8 + 3;
1005 if (!get_aim_dir(&dir)) return FALSE;
1007 fire_beam(GF_MISSILE, dir, damroll(5 + ((plev - 1) / 5) + boost / 10, 5));
1010 set_resist_magic(randint1(20) + 20 + boost / 5, FALSE);
1013 msg_print(_("気を練った。", "You improved the Force."));
1014 p_ptr->magic_num1[0] += (70 + plev);
1015 p_ptr->update |= (PU_BONUS);
1016 if (randint1(p_ptr->magic_num1[0]) > (plev * 4 + 120))
1018 msg_print(_("気が暴走した!", "The Force exploded!"));
1019 fire_ball(GF_MANA, 0, p_ptr->magic_num1[0] / 2, 10);
1020 take_hit(DAMAGE_LOSELIFE, p_ptr->magic_num1[0] / 2, _("気の暴走", "Explosion of the Force"), -1);
1025 set_tim_sh_touki(randint1(plev / 2) + 15 + boost / 7, FALSE);
1031 if (!get_aim_dir(&dir)) return FALSE;
1035 dam = damroll(8 + ((plev - 5) / 4) + boost / 12, 8);
1036 fire_beam(GF_MISSILE, dir, dam);
1037 if (cave[y][x].m_idx)
1042 int m_idx = cave[y][x].m_idx;
1043 monster_type *m_ptr = &m_list[m_idx];
1044 monster_race *r_ptr = &r_info[m_ptr->r_idx];
1047 monster_desc(m_name, m_ptr, 0);
1049 if (randint1(r_ptr->level * 3 / 2) > randint0(dam / 2) + dam/2)
1051 msg_format(_("%sは飛ばされなかった。", "%^s was not blown away."), m_name);
1055 for (i = 0; i < 5; i++)
1059 if (cave_empty_bold(y, x))
1066 if ((ty != oy) || (tx != ox))
1068 msg_format(_("%sを吹き飛ばした!", "You blow %s away!"), m_name);
1069 cave[oy][ox].m_idx = 0;
1070 cave[ty][tx].m_idx = m_idx;
1074 update_mon(m_idx, TRUE);
1078 if (r_ptr->flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
1079 p_ptr->update |= (PU_MON_LITE);
1086 if (!get_aim_dir(&dir)) return FALSE;
1087 fire_ball(GF_MISSILE, dir, damroll(10, 6) + plev * 3 / 2 + boost * 3 / 5, (plev < 30) ? 2 : 3);
1093 if (!target_set(TARGET_KILL)) return FALSE;
1094 m_idx = cave[target_row][target_col].m_idx;
1096 if (!player_has_los_bold(target_row, target_col)) break;
1097 if (!projectable(py, px, target_row, target_col)) break;
1098 dispel_monster_status(m_idx);
1104 bool success = FALSE;
1106 for (i = 0; i < 1 + boost/100; i++)
1107 if (summon_specific(-1, py, px, plev, SUMMON_PHANTOM, PM_FORCE_PET))
1111 msg_print(_("御用でございますが、御主人様?", "'Your wish, master?'"));
1115 msg_print(_("何も現れなかった。", "Nothing happen."));
1120 fire_ball(GF_FIRE, 0, 200 + (2 * plev) + boost * 2, 10);
1123 if (!get_aim_dir(&dir)) return FALSE;
1125 fire_beam(GF_MANA, dir, damroll(10 + (plev / 2) + boost * 3 / 10, 15));
1128 set_lightspeed(randint1(16) + 16 + boost / 20, FALSE);
1131 msg_print(_("なに?", "Zap?"));
1133 p_ptr->magic_num1[0] = 0;
1134 p_ptr->update |= (PU_BONUS);
1141 * @brief 現在フロアに存在している鏡の数を数える / calculate mirrors
1144 static int number_of_mirrors( void )
1148 for( x=0 ; x < cur_wid ; x++ ){
1149 for( y=0 ; y < cur_hgt ; y++ ){
1150 if (is_mirror_grid(&cave[y][x])) val++;
1158 * do_cmd_cast calls this function if the player's class is 'Mirror magic'.
1159 * @param spell 発動する特殊技能のID
1160 * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
1162 static bool cast_mirror_spell(int spell)
1165 int plev = p_ptr->lev;
1172 /* mirror of seeing */
1174 tmp = is_mirror_grid(&cave[py][px]) ? 4 : 0;
1175 if( plev + tmp > 4)detect_monsters_normal(DETECT_RAD_DEFAULT);
1176 if( plev + tmp > 18 )detect_monsters_invis(DETECT_RAD_DEFAULT);
1177 if( plev + tmp > 28 )set_tim_esp(plev,FALSE);
1178 if( plev + tmp > 38 )map_area(DETECT_RAD_MAP);
1179 if( tmp == 0 && plev < 5 ){
1180 msg_print(_("鏡がなくて集中できなかった!", "You need a mirror to concentrate!"));
1185 if( number_of_mirrors() < 4 + plev/10 ){
1189 msg_format(_("これ以上鏡は制御できない!", "There are too many mirrors to control!"));
1193 if (!get_aim_dir(&dir)) return FALSE;
1194 if ( plev > 9 && is_mirror_grid(&cave[py][px]) ) {
1195 fire_beam(GF_LITE, dir,damroll(3+((plev-1)/5),4));
1198 fire_bolt(GF_LITE, dir,damroll(3+((plev-1)/5),4));
1203 teleport_player(10, 0L);
1205 /* mirror of light */
1207 (void)lite_area(damroll(2, (plev / 2)), (plev / 10) + 1);
1209 /* mirror of wandering */
1211 teleport_player(plev * 5, 0L);
1215 set_dustrobe(20+randint1(20),FALSE);
1217 /* banishing mirror */
1219 if (!get_aim_dir(&dir)) return FALSE;
1220 (void)fire_beam(GF_AWAY_ALL, dir , plev);
1222 /* mirror clashing */
1224 if (!get_aim_dir(&dir)) return FALSE;
1225 fire_ball(GF_SHARDS, dir, damroll(8 + ((plev - 5) / 4), 8),
1226 (plev > 20 ? (plev - 20) / 8 + 1 : 0));
1228 /* mirror sleeping */
1230 for(x=0;x<cur_wid;x++){
1231 for(y=0;y<cur_hgt;y++){
1232 if (is_mirror_grid(&cave[y][x])) {
1233 project(0,2,y,x,plev,GF_OLD_SLEEP,(PROJECT_GRID|PROJECT_ITEM|PROJECT_KILL|PROJECT_JUMP|PROJECT_NO_HANGEKI),-1);
1240 if (!get_aim_dir(&dir)) return FALSE;
1241 fire_beam(GF_SEEKER,dir, damroll(11+(plev-5)/4,8));
1243 /* seal of mirror */
1245 seal_of_mirror(plev*4+100);
1247 /* shield of water */
1249 tmp = 20+randint1(20);
1250 set_shield(tmp, FALSE);
1251 if( plev > 31 )set_tim_reflect(tmp, FALSE);
1252 if( plev > 39 )set_resist_magic(tmp,FALSE);
1256 if (!get_aim_dir(&dir)) return FALSE;
1257 fire_beam(GF_SUPER_RAY,dir, 150+randint1(2*plev));
1259 /* illusion light */
1261 tmp = is_mirror_grid(&cave[py][px]) ? 4 : 3;
1262 slow_monsters(plev);
1263 stun_monsters(plev*tmp);
1264 confuse_monsters(plev*tmp);
1265 turn_monsters(plev*tmp);
1266 stun_monsters(plev*tmp);
1267 stasis_monsters(plev*tmp);
1271 if( !is_mirror_grid(&cave[py][px]) ){
1272 msg_print(_("鏡の国の場所がわからない!", "You cannot find out where is the world of mirror!"));
1279 msg_print(_("鏡の世界を通り抜け… ", "Go through the world of mirror..."));
1280 return mirror_tunnel();
1282 /* mirror of recall */
1284 return word_of_recall();
1287 set_multishadow(6+randint1(6),FALSE);
1291 if( !binding_field(plev*11+5) )msg_print(_("適当な鏡を選べなかった!", "You were not able to choose suitable mirrors!"));
1293 /* mirror of Ruffnor */
1295 (void)set_invuln(randint1(4)+4,FALSE);
1298 msg_print(_("なに?", "Zap?"));
1301 p_ptr->magic_num1[0] = 0;
1308 * do_cmd_cast calls this function if the player's class is 'berserker'.
1309 * @param spell 発動する特殊技能のID
1310 * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
1312 static bool cast_berserk_spell(int spell)
1321 detect_monsters_mind(DETECT_RAD_DEFAULT);
1327 msg_print(_("乗馬中には無理だ。", "You cannot do it when riding."));
1331 if (!get_rep_dir2(&dir)) return FALSE;
1333 if (dir == 5) return FALSE;
1337 if (!cave[y][x].m_idx)
1339 msg_print(_("その方向にはモンスターはいません。", "There is no monster."));
1345 if (!player_can_enter(cave[y][x].feat, 0) || is_trap(cave[y][x].feat))
1351 if (player_can_enter(cave[y][x].feat, 0) && !is_trap(cave[y][x].feat) && !cave[y][x].m_idx)
1355 /* Move the player */
1356 (void)move_player_effect(y, x, MPE_FORGET_FLOW | MPE_HANDLE_STUFF | MPE_DONT_PICKUP);
1362 if (!get_rep_dir2(&dir)) return FALSE;
1365 move_player(dir, easy_disarm, TRUE);
1369 earthquake(py, px, 8+randint0(5));
1375 msg_print(_("なに?", "Zap?"));
1383 * do_cmd_cast calls this function if the player's class is 'ninja'.
1384 * @param spell 発動する特殊技能のID
1385 * @return 処理を実行したらTRUE、キャンセルした場合FALSEを返す。
1387 static bool cast_ninja_spell(int spell)
1391 int plev = p_ptr->lev;
1397 (void)unlite_area(0, 3);
1404 detect_monsters_normal(DETECT_RAD_DEFAULT);
1407 detect_traps(DETECT_RAD_DEFAULT, TRUE);
1408 detect_doors(DETECT_RAD_DEFAULT);
1409 detect_stairs(DETECT_RAD_DEFAULT);
1413 detect_objects_normal(DETECT_RAD_DEFAULT);
1418 teleport_player(10, 0L);
1423 if (!(p_ptr->special_defense & NINJA_KAWARIMI))
1425 msg_print(_("敵の攻撃に対して敏感になった。", "You are now prepare to evade any attacks."));
1426 p_ptr->special_defense |= NINJA_KAWARIMI;
1427 p_ptr->redraw |= (PR_STATUS);
1433 teleport_player(p_ptr->lev * 5, 0L);
1438 if (!get_rep_dir(&dir, FALSE)) return FALSE;
1441 if (cave[y][x].m_idx)
1444 if (randint0(p_ptr->skill_dis) < 7)
1445 msg_print(_("うまく逃げられなかった。", "You failed to run away."));
1447 teleport_player(30, 0L);
1451 msg_print(_("その方向にはモンスターはいません。", "You don't see any monster in this direction"));
1458 if (!get_aim_dir(&dir)) return FALSE;
1459 (void)stasis_monster(dir);
1463 return ident_spell(FALSE);
1465 set_tim_levitation(randint1(20) + 20, FALSE);
1468 fire_ball(GF_FIRE, 0, 50+plev, plev/10+2);
1469 teleport_player(30, 0L);
1470 set_oppose_fire(plev, FALSE);
1473 return rush_attack(NULL);
1477 for (i = 0; i < 8; i++)
1481 for (slot = 0; slot < INVEN_PACK; slot++)
1483 if (inventory[slot].tval == TV_SPIKE) break;
1485 if (slot == INVEN_PACK)
1488 if (!i) msg_print("くさびを持っていない。");
1489 else msg_print("くさびがなくなった。");
1491 if (!i) msg_print("You have no Iron Spikes.");
1492 else msg_print("You have no more Iron Spikes.");
1497 /* Gives a multiplier of 2 at first, up to 3 at 40th */
1498 do_cmd_throw_aux(1, FALSE, slot);
1506 monster_type *m_ptr;
1514 if (!target_set(TARGET_KILL)) return FALSE;
1515 m_idx = cave[target_row][target_col].m_idx;
1517 if (m_idx == p_ptr->riding) break;
1518 if (!player_has_los_bold(target_row, target_col)) break;
1519 if (!projectable(py, px, target_row, target_col)) break;
1520 m_ptr = &m_list[m_idx];
1521 monster_desc(m_name, m_ptr, 0);
1522 msg_format(_("%sを引き戻した。", "You pull back %s."), m_name);
1523 path_n = project_path(path_g, MAX_RANGE, target_row, target_col, py, px, 0);
1524 ty = target_row, tx = target_col;
1525 for (i = 1; i < path_n; i++)
1527 int ny = GRID_Y(path_g[i]);
1528 int nx = GRID_X(path_g[i]);
1529 cave_type *c_ptr = &cave[ny][nx];
1531 if (in_bounds(ny, nx) && cave_empty_bold(ny, nx) &&
1532 !(c_ptr->info & CAVE_OBJECT) &&
1533 !pattern_tile(ny, nx))
1539 /* Update the old location */
1540 cave[target_row][target_col].m_idx = 0;
1542 /* Update the new location */
1543 cave[ty][tx].m_idx = m_idx;
1545 /* Move the monster */
1549 /* Wake the monster up */
1550 (void)set_monster_csleep(m_idx, 0);
1552 /* Update the monster (new location) */
1553 update_mon(m_idx, TRUE);
1555 /* Redraw the old grid */
1556 lite_spot(target_row, target_col);
1558 /* Redraw the new grid */
1561 if (r_info[m_ptr->r_idx].flags7 & (RF7_LITE_MASK | RF7_DARK_MASK))
1562 p_ptr->update |= (PU_MON_LITE);
1566 /* Auto-Recall if possible and visible */
1567 if (!p_ptr->image) monster_race_track(m_ptr->ap_r_idx);
1569 /* Track a new monster */
1570 health_track(m_idx);
1576 if (!get_aim_dir(&dir)) return FALSE;
1577 fire_ball(GF_OLD_CONF, dir, plev*3, 3);
1580 project_length = -1;
1581 if (!get_aim_dir(&dir))
1588 (void)teleport_swap(dir);
1594 (void)set_kabenuke(randint1(plev/2) + plev/2, FALSE);
1595 set_oppose_acid(plev, FALSE);
1598 fire_ball(GF_POIS, 0, 75+plev*2/3, plev/5+2);
1599 fire_ball(GF_OLD_DRAIN, 0, 75+plev*2/3, plev/5+2);
1600 fire_ball(GF_CONFUSION, 0, 75+plev*2/3, plev/5+2);
1601 teleport_player(30, 0L);
1606 int num = damroll(3, 9);
1608 for (k = 0; k < num; k++)
1610 int typ = one_in_(2) ? GF_FIRE : one_in_(3) ? GF_NETHER : GF_PLASMA;
1611 int attempts = 1000;
1615 scatter(&y, &x, py, px, 4, 0);
1617 if (!player_bold(y, x)) break;
1619 project(0, 0, y, x, damroll(6 + plev / 8, 10), typ,
1620 (PROJECT_BEAM | PROJECT_THRU | PROJECT_GRID | PROJECT_KILL), -1);
1625 set_multishadow(6+randint1(6), FALSE);
1628 msg_print(_("なに?", "Zap?"));
1635 * @brief 特殊技能コマンドのメインルーチン /
1638 void do_cmd_mind(void)
1643 int plev = p_ptr->lev;
1644 int old_csp = p_ptr->csp;
1647 int use_mind, mana_cost;
1649 bool on_mirror = FALSE;
1651 /* not if confused */
1652 if (p_ptr->confused)
1654 msg_print(_("混乱していて集中できない!", "You are too confused!"));
1659 if (!get_mind_power(&n, FALSE)) return;
1662 switch(p_ptr->pclass)
1664 case CLASS_MINDCRAFTER: use_mind = MIND_MINDCRAFTER;p = "精神";break;
1665 case CLASS_FORCETRAINER: use_mind = MIND_KI;p = "気";break;
1666 case CLASS_BERSERKER: use_mind = MIND_BERSERKER;p = "怒り";break;
1667 case CLASS_MIRROR_MASTER: use_mind = MIND_MIRROR_MASTER;p = "鏡魔法";break;
1668 case CLASS_NINJA: use_mind = MIND_NINJUTSU;p = "精神";break;
1669 default: use_mind = 0;p = "超能力";break;
1672 switch(p_ptr->pclass)
1674 case CLASS_MINDCRAFTER: use_mind = MIND_MINDCRAFTER;break;
1675 case CLASS_FORCETRAINER: use_mind = MIND_KI;break;
1676 case CLASS_BERSERKER: use_mind = MIND_BERSERKER;break;
1677 case CLASS_MIRROR_MASTER: use_mind = MIND_MIRROR_MASTER;break;
1678 case CLASS_NINJA: use_mind = MIND_NINJUTSU;break;
1679 default: use_mind = 0;break;
1682 spell = mind_powers[use_mind].info[n];
1684 /* Spell failure chance */
1685 chance = spell.fail;
1687 mana_cost = spell.mana_cost;
1688 if (use_mind == MIND_KI)
1690 if (heavy_armor()) chance += 20;
1691 if (p_ptr->icky_wield[0]) chance += 20;
1692 else if (buki_motteruka(INVEN_RARM)) chance += 10;
1693 if (p_ptr->icky_wield[1]) chance += 20;
1694 else if (buki_motteruka(INVEN_LARM)) chance += 10;
1698 for (j = 0; j < p_ptr->magic_num1[0] / 50; j++)
1699 mana_cost += (j+1) * 3 / 2;
1703 /* Verify "dangerous" spells */
1704 if ((use_mind == MIND_BERSERKER) || (use_mind == MIND_NINJUTSU))
1706 if (mana_cost > p_ptr->chp)
1708 msg_print(_("HPが足りません。", "You do not have enough hp to use this power."));
1712 else if (mana_cost > p_ptr->csp)
1715 msg_print(_("MPが足りません。", "You do not have enough mana to use this power."));
1717 if (!over_exert) return;
1720 if (!get_check(_("それでも挑戦しますか? ", "Attempt it anyway? "))) return;
1726 /* Reduce failure rate by "effective" level adjustment */
1727 chance -= 3 * (plev - spell.min_lev);
1729 chance += p_ptr->to_m_chance;
1731 /* Reduce failure rate by INT/WIS adjustment */
1732 chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[mp_ptr->spell_stat]] - 1);
1734 /* Not enough mana to cast */
1735 if ((mana_cost > p_ptr->csp) && (use_mind != MIND_BERSERKER) && (use_mind != MIND_NINJUTSU))
1737 chance += 5 * (mana_cost - p_ptr->csp);
1740 /* Extract the minimum failure rate */
1741 minfail = adj_mag_fail[p_ptr->stat_ind[mp_ptr->spell_stat]];
1743 /* Minimum failure rate */
1744 if (chance < minfail) chance = minfail;
1746 /* Stunning makes spells harder */
1747 if (p_ptr->stun > 50) chance += 25;
1748 else if (p_ptr->stun) chance += 15;
1750 if (use_mind == MIND_KI)
1752 if (heavy_armor()) chance += 5;
1753 if (p_ptr->icky_wield[0]) chance += 5;
1754 if (p_ptr->icky_wield[1]) chance += 5;
1758 /* Always a 5 percent chance of working */
1759 if (chance > 95) chance = 95;
1762 if (randint0(100) < chance)
1764 if (flush_failure) flush();
1765 msg_format(_("%sの集中に失敗した!", "You failed to concentrate hard enough!"), p);
1769 if ((use_mind != MIND_BERSERKER) && (use_mind != MIND_NINJUTSU))
1771 if ((use_mind == MIND_KI) && (n != 5) && p_ptr->magic_num1[0])
1773 msg_print(_("気が散ってしまった...", "Your improved Force has gone away..."));
1774 p_ptr->magic_num1[0] = 0;
1777 if (randint1(100) < (chance / 2))
1782 if( use_mind == MIND_MINDCRAFTER ){
1785 msg_print(_("なんてこった!頭の中が真っ白になった!", "Oh, no! Your mind has gone blank!"));
1790 msg_print(_("奇妙な光景が目の前で踊っている...", "Weird visions seem to dance before your eyes..."));
1791 set_image(p_ptr->image + 5 + randint1(10));
1795 msg_print(_("あなたの頭は混乱した!", "Your brain is addled!"));
1796 set_confused(p_ptr->confused + randint1(8));
1800 set_stun(p_ptr->stun + randint1(8));
1805 msg_format(_("%sの力が制御できない氾流となって解放された!", "Your mind unleashes its power in an uncontrollable storm!"), p);
1807 project(PROJECT_WHO_UNCTRL_POWER, 2 + plev / 10, py, px, plev * 2,
1808 GF_MANA, PROJECT_JUMP | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM, -1);
1809 p_ptr->csp = MAX(0, p_ptr->csp - plev * MAX(1, plev / 10));
1812 if( use_mind == MIND_MIRROR_MASTER ){
1815 /* Nothing has happen */
1819 msg_print(_("鏡の世界の干渉を受けた!", "Weird visions seem to dance before your eyes..."));
1820 teleport_player(10, TELEPORT_PASSIVE);
1824 msg_print(_("まわりのものがキラキラ輝いている!", "Your brain is addled!"));
1825 set_image(p_ptr->image + 5 + randint1(10));
1830 msg_format(_("%sの力が制御できない氾流となって解放された!", "Your mind unleashes its power in an uncontrollable storm!"), p);
1832 project(PROJECT_WHO_UNCTRL_POWER, 2 + plev / 10, py, px, plev * 2,
1833 GF_MANA, PROJECT_JUMP | PROJECT_KILL | PROJECT_GRID | PROJECT_ITEM, -1);
1834 p_ptr->csp = MAX(0, p_ptr->csp - plev * MAX(1, plev / 10));
1846 case MIND_MINDCRAFTER:
1847 /* Cast the spell */
1848 cast = cast_mindcrafter_spell(n);
1851 /* Cast the spell */
1852 cast = cast_force_spell(n);
1854 case MIND_BERSERKER:
1855 /* Cast the spell */
1856 cast = cast_berserk_spell(n);
1858 case MIND_MIRROR_MASTER:
1859 /* Cast the spell */
1860 if( is_mirror_grid(&cave[py][px]) )on_mirror = TRUE;
1861 cast = cast_mirror_spell(n);
1864 /* Cast the spell */
1865 cast = cast_ninja_spell(n);
1868 msg_format(_("謎の能力:%d, %d", "Mystery power:%d, %d"),use_mind, n);
1878 /* teleport from mirror costs small energy */
1879 if( on_mirror && p_ptr->pclass == CLASS_MIRROR_MASTER )
1881 if( n==3 || n==5 || n==7 || n==16 )energy_use = 50;
1884 if ((use_mind == MIND_BERSERKER) || (use_mind == MIND_NINJUTSU))
1886 take_hit(DAMAGE_USELIFE, mana_cost, _("過度の集中", "concentrating too hard"), -1);
1888 p_ptr->redraw |= (PR_HP);
1891 /* Sufficient mana */
1892 else if (mana_cost <= old_csp)
1895 p_ptr->csp -= mana_cost;
1898 if (p_ptr->csp < 0) p_ptr->csp = 0;
1900 if ((use_mind == MIND_MINDCRAFTER) && (n == 13))
1904 p_ptr->csp_frac = 0;
1908 /* Over-exert the player */
1911 int oops = mana_cost - old_csp;
1914 if ((p_ptr->csp - mana_cost) < 0) p_ptr->csp_frac = 0;
1915 p_ptr->csp = MAX(0, p_ptr->csp - mana_cost);
1918 msg_format(_("%sを集中しすぎて気を失ってしまった!", "You faint from the effort!"),p);
1920 /* Hack -- Bypass free action */
1921 (void)set_paralyzed(p_ptr->paralyzed + randint1(5 * oops + 1));
1923 /* Damage WIS (possibly permanently) */
1924 if (randint0(100) < 50)
1926 bool perm = (randint0(100) < 25);
1929 msg_print(_("自分の精神を攻撃してしまった!", "You have damaged your mind!"));
1931 /* Reduce constitution */
1932 (void)dec_stat(A_WIS, 15 + randint1(10), perm);
1937 p_ptr->redraw |= (PR_MANA);
1940 p_ptr->window |= (PW_PLAYER);
1941 p_ptr->window |= (PW_SPELL);
1946 * @brief 現在プレイヤーが使用可能な特殊技能の一覧表示 /
1949 void do_cmd_mind_browse(void)
1956 if (p_ptr->pclass == CLASS_MINDCRAFTER) use_mind = MIND_MINDCRAFTER;
1957 else if (p_ptr->pclass == CLASS_FORCETRAINER) use_mind = MIND_KI;
1958 else if (p_ptr->pclass == CLASS_BERSERKER) use_mind = MIND_BERSERKER;
1959 else if (p_ptr->pclass == CLASS_NINJA) use_mind = MIND_NINJUTSU;
1960 else if (p_ptr->pclass == CLASS_MIRROR_MASTER)
1961 use_mind = MIND_MIRROR_MASTER;
1968 if (!get_mind_power(&n, TRUE))
1974 /* Clear lines, position cursor (really should use strlen here) */
1975 Term_erase(12, 21, 255);
1976 Term_erase(12, 20, 255);
1977 Term_erase(12, 19, 255);
1978 Term_erase(12, 18, 255);
1979 Term_erase(12, 17, 255);
1980 Term_erase(12, 16, 255);
1982 roff_to_buf(mind_tips[use_mind][n], 62, temp, sizeof(temp));
1983 for(j=0, line = 17;temp[j];j+=(1+strlen(&temp[j])))
1985 prt(&temp[j], line, 15);
1990 case MIND_MIRROR_MASTER:
1992 prt(_("何かキーを押して下さい。", "Hit any key."),0,0);