+ break;
+ }
+
+ case ACT_JUDGE:
+ {
+#ifdef JP
+ msg_format("%s¤ÏÀÖ¤¯ÌÀ¤ë¤¯¸÷¤Ã¤¿¡ª", name);
+#else
+ msg_format("The %s flashes bright red!", name);
+#endif
+ chg_virtue(V_KNOWLEDGE, 1);
+ chg_virtue(V_ENLIGHTEN, 1);
+ wiz_lite(FALSE);
+#ifdef JP
+ msg_format("%s¤Ï¤¢¤Ê¤¿¤ÎÂÎÎϤòÃ¥¤Ã¤¿...", name);
+ take_hit(DAMAGE_LOSELIFE, damroll(3,8), "¿³È½¤ÎÊõÀÐ", -1);
+#else
+ msg_format("The %s drains your vitality...", name);
+ take_hit(DAMAGE_LOSELIFE, damroll(3, 8), "the Jewel of Judgement", -1);
+#endif
+ (void)detect_traps(DETECT_RAD_DEFAULT, TRUE);
+ (void)detect_doors(DETECT_RAD_DEFAULT);
+ (void)detect_stairs(DETECT_RAD_DEFAULT);
+#ifdef JP
+ if (get_check("µ¢´Ô¤ÎÎϤò»È¤¤¤Þ¤¹¤«¡©"))
+#else
+ if (get_check("Activate recall? "))
+#endif
+ {
+ (void)word_of_recall();
+ }
+
+ break;
+ }
+
+ case ACT_TELEKINESIS:
+ {
+ if (!get_aim_dir(&dir)) return FALSE;
+#ifdef JP
+ msg_format("%s¤ò¿¤Ð¤·¤¿¡£", name);
+#else
+ msg_format("You stretched your %s.", name);
+#endif
+ fetch(dir, 500, TRUE);
+ break;
+ }
+
+ case ACT_DETECT_UNIQUE:
+ {
+ int i;
+ monster_type *m_ptr;
+ monster_race *r_ptr;
+#ifdef JP
+ msg_print("´ñ̯¤Ê¾ì½ê¤¬Æ¬¤ÎÃæ¤ËÉ⤫¤ó¤À¡¥¡¥¡¥");
+#else
+ msg_print("Some strange places show up in your mind. And you see ...");
+#endif
+ /* Process the monsters (backwards) */
+ for (i = m_max - 1; i >= 1; i--)
+ {
+ /* Access the monster */
+ m_ptr = &m_list[i];
+
+ /* Ignore "dead" monsters */
+ if (!m_ptr->r_idx) continue;
+
+ r_ptr = &r_info[m_ptr->r_idx];
+
+ if(r_ptr->flags1 & RF1_UNIQUE)
+ {
+#ifdef JP
+ msg_format("%s¡¥ ",r_name + r_ptr->name);
+#else
+ msg_format("%s. ",r_name + r_ptr->name);
+#endif
+ }
+ }
+ break;
+ }
+
+ case ACT_ESCAPE:
+ {
+ switch (randint1(13))
+ {
+ case 1: case 2: case 3: case 4: case 5:
+ teleport_player(10, 0L);
+ break;
+ case 6: case 7: case 8: case 9: case 10:
+ teleport_player(222, 0L);
+ break;
+ case 11: case 12:
+ (void)stair_creation();
+ break;
+ default:
+#ifdef JP
+ if (get_check("¤³¤Î³¬¤òµî¤ê¤Þ¤¹¤«¡©"))
+#else
+ if (get_check("Leave this level? "))
+#endif
+ {
+ if (autosave_l) do_cmd_save_game(TRUE);
+
+ /* Leaving */
+ p_ptr->leaving = TRUE;
+ }
+ }
+ break;
+ }
+
+ case ACT_DISP_CURSE_XTRA:
+ {
+#ifdef JP
+ msg_format("%s¤¬¿¿¼Â¤ò¾È¤é¤·½Ð¤¹...", name);
+#else
+ msg_format("The %s exhibits the truth...", name);
+#endif
+ if (remove_all_curse())
+ {
+#ifdef JP
+ msg_print("狼¤Ë¸«¼é¤é¤ì¤Æ¤¤¤ë¤è¤¦¤Êµ¤¤¬¤¹¤ë¡£");
+#else
+ msg_print("You feel as if someone is watching over you.");
+#endif
+ }
+ (void)probing();
+ break;
+ }
+
+ case ACT_BRAND_FIRE_BOLTS:
+ {
+#ifdef JP
+ msg_format("%s¤¬¿¼¹È¤Ëµ±¤¤¤¿...", name);
+#else
+ msg_format("Your %s glows deep red...", name);
+#endif
+ (void)brand_bolts();
+ break;
+ }
+
+ case ACT_RECHARGE_XTRA:
+ {
+#ifdef JP
+ msg_format("%s¤¬Çò¤¯µ±¤¤¤¿¡¥¡¥¡¥", name);
+#else
+ msg_format("The %s gleams with blinding light...", name);
+#endif
+ if (!recharge(1000)) return FALSE;
+ break;
+ }
+
+ case ACT_LORE:
+ {
+#ifdef JP
+ msg_print("ÀФ¬±£¤µ¤ì¤¿ÈëÌ©¤ò¼Ì¤·½Ð¤·¤¿¡¥¡¥¡¥");
+#else
+ msg_print("The stone reveals hidden mysteries...");
+#endif
+ if (!ident_spell(FALSE)) return FALSE;
+
+ if (mp_ptr->spell_book)
+ {
+ /* Sufficient mana */
+ if (20 <= p_ptr->csp)
+ {
+ /* Use some mana */
+ p_ptr->csp -= 20;
+ }
+
+ /* Over-exert the player */
+ else
+ {
+ int oops = 20 - p_ptr->csp;
+
+ /* No mana left */
+ p_ptr->csp = 0;
+ p_ptr->csp_frac = 0;
+
+ /* Message */
+#ifdef JP
+ msg_print("ÀФòÀ©¸æ¤Ç¤¤Ê¤¤¡ª");
+#else
+ msg_print("You are too weak to control the stone!");
+#endif
+ /* Hack -- Bypass free action */
+ (void)set_paralyzed(p_ptr->paralyzed +
+ randint1(5 * oops + 1));
+
+ /* Confusing. */
+ (void)set_confused(p_ptr->confused +
+ randint1(5 * oops + 1));
+ }
+
+ /* Redraw mana */
+ p_ptr->redraw |= (PR_MANA);
+ }
+#ifdef JP
+ take_hit(DAMAGE_LOSELIFE, damroll(1, 12), "´í¸±¤ÊÈëÌ©", -1);
+#else
+ take_hit(DAMAGE_LOSELIFE, damroll(1, 12), "perilous secrets", -1);
+#endif
+ /* Confusing. */
+ if (one_in_(5)) (void)set_confused(p_ptr->confused +
+ randint1(10));
+
+ /* Exercise a little care... */
+ if (one_in_(20))
+#ifdef JP
+ take_hit(DAMAGE_LOSELIFE, damroll(4, 10), "´í¸±¤ÊÈëÌ©", -1);
+#else
+ take_hit(DAMAGE_LOSELIFE, damroll(4, 10), "perilous secrets", -1);
+#endif
+ break;
+ }
+
+ case ACT_SHIKOFUMI:
+ {
+#ifdef JP
+ msg_print("Î϶¯¤¯»Í¸Ô¤òƧ¤ó¤À¡£");
+#else
+ msg_print("You stamp. (as if you are in a ring.)");
+#endif
+ (void)set_afraid(0);
+ (void)set_hero(randint1(20) + 20, FALSE);
+ dispel_evil(p_ptr->lev * 3);
+ break;
+ }
+
+ case ACT_PHASE_DOOR:
+ {
+ teleport_player(10, 0L);
+ break;
+ }
+
+ case ACT_DETECT_ALL_MONS:
+ {
+ (void)detect_monsters_invis(255);
+ (void)detect_monsters_normal(255);
+ break;
+ }
+
+ case ACT_ULTIMATE_RESIST:
+ {
+ int v = randint1(25)+25;
+ (void)set_afraid(0);
+ (void)set_hero(v, FALSE);
+ (void)hp_player(10);
+ (void)set_blessed(v, FALSE);
+ (void)set_oppose_acid(v, FALSE);
+ (void)set_oppose_elec(v, FALSE);
+ (void)set_oppose_fire(v, FALSE);
+ (void)set_oppose_cold(v, FALSE);
+ (void)set_oppose_pois(v, FALSE);
+ (void)set_ultimate_res(v, FALSE);
+ break;
+ }
+
+
+ /* Unique activation */
+ case ACT_CAST_OFF:
+ {
+ int inv, o_idx, t;
+ char o_name[MAX_NLEN];
+ object_type forge;
+
+ /* Cast off activated item */
+ for (inv = INVEN_RARM; inv <= INVEN_FEET; inv++)
+ {
+ if (o_ptr == &inventory[inv]) break;
+ }
+
+ /* Paranoia */
+ if (inv > INVEN_FEET) return FALSE;
+
+ object_copy(&forge, o_ptr);
+ inven_item_increase(inv, (0 - o_ptr->number));
+ inven_item_optimize(inv);
+ o_idx = drop_near(&forge, 0, py, px);
+ o_ptr = &o_list[o_idx];
+
+ object_desc(o_name, o_ptr, OD_NAME_ONLY);
+ msg_format(_("%s¤ò椮¼Î¤Æ¤¿¡£", "You cast off %d."), o_name);
+
+ /* Get effects */
+ msg_print(_("¡Ödz¤¨¾å¤¬¤ì²¶¤Î¾®±§Ã衪¡×", "You say, 'Burn up my cosmo!"));
+ t = 20 + randint1(20);
+ (void)set_blind(p_ptr->blind + t);
+ (void)set_afraid(0);
+ (void)set_tim_esp(p_ptr->tim_esp + t, FALSE);
+ (void)set_tim_regen(p_ptr->tim_regen + t, FALSE);
+ (void)set_hero(p_ptr->hero + t, FALSE);
+ (void)set_blessed(p_ptr->blessed + t, FALSE);
+ (void)set_fast(p_ptr->fast + t, FALSE);
+ (void)set_shero(p_ptr->shero + t, FALSE);
+ if (p_ptr->pclass == CLASS_FORCETRAINER)
+ {
+ p_ptr->magic_num1[0] = plev * 5 + 190;
+ msg_print(_("µ¤¤¬ÇúȯÀ£Á°¤Ë¤Ê¤Ã¤¿¡£", "Your force are immediatly before explosion."));
+ }
+
+ break;
+ }
+
+ case ACT_FISHING:
+ {
+ int x, y;
+
+ if (!get_rep_dir2(&dir)) return FALSE;
+ y = py+ddy[dir];
+ x = px+ddx[dir];
+ tsuri_dir = dir;
+ if (!cave_have_flag_bold(y, x, FF_WATER))
+ {
+#ifdef JP
+ msg_print("¤½¤³¤Ï¿åÊդǤϤʤ¤¡£");
+#else
+ msg_print("There is no fishing place.");
+#endif
+ return FALSE;
+ }
+ else if (cave[y][x].m_idx)
+ {
+ char m_name[80];
+ monster_desc(m_name, &m_list[cave[y][x].m_idx], 0);
+#ifdef JP
+ msg_format("%s¤¬¼ÙËâ¤À¡ª", m_name);
+#else
+ msg_format("%^s is stand in your way.", m_name);
+#endif
+ energy_use = 0;
+ return FALSE;
+ }
+ set_action(ACTION_FISH);
+ p_ptr->redraw |= (PR_STATE);
+ break;
+ }
+
+ case ACT_INROU:
+ {
+ int count = 0, i;
+ monster_type *m_ptr;
+#ifndef JP
+ cptr kakusan = "";
+#endif
+ if (summon_named_creature(0, py, px, MON_SUKE, PM_FORCE_PET))
+ {
+#ifdef JP
+ msg_print("¡Ø½õ¤µ¤ó¡Ù¤¬¸½¤ì¤¿¡£");
+#else
+ msg_print("Suke-san apperars.");
+ kakusan = "Suke-san";
+#endif
+ count++;
+ }
+ if (summon_named_creature(0, py, px, MON_KAKU, PM_FORCE_PET))
+ {
+#ifdef JP
+ msg_print("¡Ø³Ê¤µ¤ó¡Ù¤¬¸½¤ì¤¿¡£");
+#else
+ msg_print("Kaku-san appears.");
+ kakusan = "Kaku-san";
+#endif
+ count++;
+ }
+ if (!count)
+ {
+ for (i = m_max - 1; i > 0; i--)
+ {
+ m_ptr = &m_list[i];
+ if (!m_ptr->r_idx) continue;
+ if (!((m_ptr->r_idx == MON_SUKE) || (m_ptr->r_idx == MON_KAKU))) continue;
+ if (!los(m_ptr->fy, m_ptr->fx, py, px)) continue;
+ if (!projectable(m_ptr->fy, m_ptr->fx, py, px)) continue;
+ count++;
+ break;
+ }
+ }
+
+ if (count)
+ {
+#ifdef JP
+ msg_print("¡Ö¼Ô¤É¤â¡¢¤Ò¤«¤¨¤ª¤í¤¦¡ª¡ª¡ª¤³¤Î¤ªÊý¤ò¤É¤Ê¤¿¤È¤³¤³¤í¤¨¤ë¡£¡×");
+#else
+ msg_format("%^s says 'WHO do you think this person is! Bow your head, down your knees!'", kakusan);
+#endif
+ sukekaku = TRUE;
+ stun_monsters(120);
+ confuse_monsters(120);
+ turn_monsters(120);
+ stasis_monsters(120);
+ sukekaku = FALSE;
+ }
+ else
+ {
+#ifdef JP
+ msg_print("¤·¤«¤·¡¢²¿¤âµ¯¤¤Ê¤«¤Ã¤¿¡£");
+#else
+ msg_print("Nothing happen.");
+#endif
+ }
+ break;
+ }
+
+ case ACT_MURAMASA:
+ {
+ /* Only for Muramasa */
+ if (o_ptr->name1 != ART_MURAMASA) return FALSE;
+#ifdef JP
+ if (get_check("ËÜÅö¤Ë»È¤¤¤Þ¤¹¤«¡©"))
+#else
+ if (get_check("Are you sure?!"))
+#endif
+ {
+#ifdef JP
+ msg_print("¼Àµ¤¬¿Ì¤¨¤¿¡¥¡¥¡¥");
+#else
+ msg_print("The Muramasa pulsates...");
+#endif
+ do_inc_stat(A_STR);
+ if (one_in_(2))
+ {
+#ifdef JP
+ msg_print("¼Àµ¤Ï²õ¤ì¤¿¡ª");
+#else
+ msg_print("The Muramasa is destroyed!");
+#endif
+ curse_weapon_object(TRUE, o_ptr);
+ }
+ }
+ break;
+ }
+
+ case ACT_BLOODY_MOON:
+ {
+ /* Only for Bloody Moon */
+ if (o_ptr->name1 != ART_BLOOD) return FALSE;
+#ifdef JP
+ msg_print("³ù¤¬ÌÀ¤ë¤¯µ±¤¤¤¿...");
+#else
+ msg_print("Your scythe glows brightly!");
+#endif
+ get_bloody_moon_flags(o_ptr);
+ if (p_ptr->prace == RACE_ANDROID) calc_android_exp();
+ p_ptr->update |= (PU_BONUS | PU_HP);
+ break;
+ }
+
+ case ACT_CRIMSON:
+ {
+ int num = 1;
+ int i;
+ int flg = PROJECT_STOP | PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL;
+ int tx, ty;
+
+ /* Only for Crimson */
+ if (o_ptr->name1 != ART_CRIMSON) return FALSE;
+
+#ifdef JP
+ msg_print("¤»¤Ã¤«¤¯¤À¤«¤é¡Ø¥¯¥ê¥à¥¾¥ó¡Ù¤ò¤Ö¤Ã¤Ñ¤Ê¤¹¤¼¡ª");
+#else
+ msg_print("I'll fire CRIMSON! SEKKAKUDAKARA!");
+#endif
+
+ if (!get_aim_dir(&dir)) return FALSE;
+
+ /* Use the given direction */
+ tx = px + 99 * ddx[dir];
+ ty = py + 99 * ddy[dir];
+
+ /* Hack -- Use an actual "target" */
+ if ((dir == 5) && target_okay())
+ {
+ tx = target_col;
+ ty = target_row;
+ }
+
+ if (p_ptr->pclass == CLASS_ARCHER)
+ {
+ /* Extra shot at level 10 */
+ if (p_ptr->lev >= 10) num++;
+
+ /* Extra shot at level 30 */
+ if (p_ptr->lev >= 30) num++;
+
+ /* Extra shot at level 45 */
+ if (p_ptr->lev >= 45) num++;
+ }
+
+ for (i = 0; i < num; i++)
+ project(0, p_ptr->lev/20+1, ty, tx, p_ptr->lev*p_ptr->lev*6/50, GF_ROCKET, flg, -1);