OSDN Git Service

[Refactor] #37353 鏡使いのレイシャル「静水」を mirror_concentration() に分離。 / Separate Mirror master...
[hengband/hengband.git] / src / spells2.c
index 3e99e39..a10c445 100644 (file)
@@ -4982,3 +4982,319 @@ bool psychometry(void)
        /* Something happened */
        return (TRUE);
 }
+
+
+bool draconian_breath(player_type *creature_ptr)
+{
+       DIRECTION dir;
+       int Type = (one_in_(3) ? GF_COLD : GF_FIRE);
+       concptr Type_desc = ((Type == GF_COLD) ? _("冷気", "cold") : _("炎", "fire"));
+
+       if (!get_aim_dir(&dir)) return FALSE;
+
+       if (randint1(100) < creature_ptr->lev)
+       {
+               switch (creature_ptr->pclass)
+               {
+               case CLASS_WARRIOR:
+               case CLASS_BERSERKER:
+               case CLASS_RANGER:
+               case CLASS_TOURIST:
+               case CLASS_IMITATOR:
+               case CLASS_ARCHER:
+               case CLASS_SMITH:
+                       if (one_in_(3))
+                       {
+                               Type = GF_MISSILE;
+                               Type_desc = _("エレメント", "the elements");
+                       }
+                       else
+                       {
+                               Type = GF_SHARDS;
+                               Type_desc = _("破片", "shards");
+                       }
+                       break;
+               case CLASS_MAGE:
+               case CLASS_WARRIOR_MAGE:
+               case CLASS_HIGH_MAGE:
+               case CLASS_SORCERER:
+               case CLASS_MAGIC_EATER:
+               case CLASS_RED_MAGE:
+               case CLASS_BLUE_MAGE:
+               case CLASS_MIRROR_MASTER:
+                       if (one_in_(3))
+                       {
+                               Type = GF_MANA;
+                               Type_desc = _("魔力", "mana");
+                       }
+                       else
+                       {
+                               Type = GF_DISENCHANT;
+                               Type_desc = _("劣化", "disenchantment");
+                       }
+                       break;
+               case CLASS_CHAOS_WARRIOR:
+                       if (!one_in_(3))
+                       {
+                               Type = GF_CONFUSION;
+                               Type_desc = _("混乱", "confusion");
+                       }
+                       else
+                       {
+                               Type = GF_CHAOS;
+                               Type_desc = _("カオス", "chaos");
+                       }
+                       break;
+               case CLASS_MONK:
+               case CLASS_SAMURAI:
+               case CLASS_FORCETRAINER:
+                       if (!one_in_(3))
+                       {
+                               Type = GF_CONFUSION;
+                               Type_desc = _("混乱", "confusion");
+                       }
+                       else
+                       {
+                               Type = GF_SOUND;
+                               Type_desc = _("轟音", "sound");
+                       }
+                       break;
+               case CLASS_MINDCRAFTER:
+                       if (!one_in_(3))
+                       {
+                               Type = GF_CONFUSION;
+                               Type_desc = _("混乱", "confusion");
+                       }
+                       else
+                       {
+                               Type = GF_PSI;
+                               Type_desc = _("精神エネルギー", "mental energy");
+                       }
+                       break;
+               case CLASS_PRIEST:
+               case CLASS_PALADIN:
+                       if (one_in_(3))
+                       {
+                               Type = GF_HELL_FIRE;
+                               Type_desc = _("地獄の劫火", "hellfire");
+                       }
+                       else
+                       {
+                               Type = GF_HOLY_FIRE;
+                               Type_desc = _("聖なる炎", "holy fire");
+                       }
+                       break;
+               case CLASS_ROGUE:
+               case CLASS_NINJA:
+                       if (one_in_(3))
+                       {
+                               Type = GF_DARK;
+                               Type_desc = _("暗黒", "darkness");
+                       }
+                       else
+                       {
+                               Type = GF_POIS;
+                               Type_desc = _("毒", "poison");
+                       }
+                       break;
+               case CLASS_BARD:
+                       if (!one_in_(3))
+                       {
+                               Type = GF_SOUND;
+                               Type_desc = _("轟音", "sound");
+                       }
+                       else
+                       {
+                               Type = GF_CONFUSION;
+                               Type_desc = _("混乱", "confusion");
+                       }
+                       break;
+               }
+       }
+
+       stop_mouth();
+       msg_format(_("あなたは%sのブレスを吐いた。", "You breathe %s."), Type_desc);
+
+       fire_breath(Type, dir, creature_ptr->lev * 2, (creature_ptr->lev / 15) + 1);
+       return TRUE;
+}
+
+bool android_inside_weapon(player_type *creature_ptr)
+{
+       DIRECTION dir;
+       if (!get_aim_dir(&dir)) return FALSE;
+       if (creature_ptr->lev < 10)
+       {
+               msg_print(_("レイガンを発射した。", "You fire your ray gun."));
+               fire_bolt(GF_MISSILE, dir, (creature_ptr->lev + 1) / 2);
+       }
+       else if (creature_ptr->lev < 25)
+       {
+               msg_print(_("ブラスターを発射した。", "You fire your blaster."));
+               fire_bolt(GF_MISSILE, dir, creature_ptr->lev);
+       }
+       else if (creature_ptr->lev < 35)
+       {
+               msg_print(_("バズーカを発射した。", "You fire your bazooka."));
+               fire_ball(GF_MISSILE, dir, creature_ptr->lev * 2, 2);
+       }
+       else if (creature_ptr->lev < 45)
+       {
+               msg_print(_("ビームキャノンを発射した。", "You fire a beam cannon."));
+               fire_beam(GF_MISSILE, dir, creature_ptr->lev * 2);
+       }
+       else
+       {
+               msg_print(_("ロケットを発射した。", "You fire a rocket."));
+               fire_rocket(GF_ROCKET, dir, creature_ptr->lev * 5, 2);
+       }
+       return TRUE;
+}
+
+bool create_ration(player_type *crature_ptr)
+{
+       object_type *q_ptr;
+       object_type forge;
+       q_ptr = &forge;
+
+       /* Create the food ration */
+       object_prep(q_ptr, lookup_kind(TV_FOOD, SV_FOOD_RATION));
+
+       /* Drop the object from heaven */
+       (void)drop_near(q_ptr, -1, crature_ptr->y, crature_ptr->x);
+       msg_print(_("食事を料理して作った。", "You cook some food."));
+       return TRUE;
+}
+
+void hayagake(player_type *creature_ptr)
+{
+       if (creature_ptr->action == ACTION_HAYAGAKE)
+       {
+               set_action(ACTION_NONE);
+       }
+       else
+       {
+               cave_type *c_ptr = &cave[creature_ptr->y][creature_ptr->x];
+               feature_type *f_ptr = &f_info[c_ptr->feat];
+
+               if (!have_flag(f_ptr->flags, FF_PROJECT) ||
+                       (!creature_ptr->levitation && have_flag(f_ptr->flags, FF_DEEP)))
+               {
+                       msg_print(_("ここでは素早く動けない。", "You cannot run in here."));
+               }
+               else
+               {
+                       set_action(ACTION_HAYAGAKE);
+               }
+       }
+       creature_ptr->energy_use = 0;
+}
+
+bool double_attack(player_type *creature_ptr)
+{
+       DIRECTION dir;
+       POSITION x, y;
+
+       if (!get_rep_dir(&dir, FALSE)) return FALSE;
+       y = creature_ptr->y + ddy[dir];
+       x = creature_ptr->x + ddx[dir];
+       if (cave[y][x].m_idx)
+       {
+               if (one_in_(3))
+                       msg_print(_("あーたたたたたたたたたたたたたたたたたたたたたた!!!",
+                               "Ahhhtatatatatatatatatatatatatatataatatatatattaaaaa!!!!"));
+               else if(one_in_(2))
+                       msg_print(_("無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄!!!",
+                               "Mudamudamudamudamudamudamudamudamudamudamudamudamuda!!!!"));
+               else
+                       msg_print(_("オラオラオラオラオラオラオラオラオラオラオラオラ!!!",
+                               "Oraoraoraoraoraoraoraoraoraoraoraoraoraoraoraoraora!!!!"));
+
+               py_attack(y, x, 0);
+               if (cave[y][x].m_idx)
+               {
+                       handle_stuff();
+                       py_attack(y, x, 0);
+               }
+               creature_ptr->energy_need += ENERGY_NEED();
+       }
+       else
+       {
+               msg_print(_("その方向にはモンスターはいません。", "You don't see any monster in this direction"));
+               msg_print(NULL);
+       }
+       return TRUE;
+}
+
+bool comvert_hp_to_mp(player_type *creature_ptr)
+{
+       int gain_sp = take_hit(DAMAGE_USELIFE, creature_ptr->lev, _("HPからMPへの無謀な変換", "thoughtless convertion from HP to SP"), -1) / 5;
+       if (gain_sp)
+       {
+               creature_ptr->csp += gain_sp;
+               if (creature_ptr->csp > creature_ptr->msp)
+               {
+                       creature_ptr->csp = creature_ptr->msp;
+                       creature_ptr->csp_frac = 0;
+               }
+       }
+       else
+       {
+               msg_print(_("変換に失敗した。", "You failed to convert."));
+       }
+       creature_ptr->redraw |= (PR_HP | PR_MANA);
+       return TRUE;
+}
+
+bool comvert_mp_to_hp(player_type *creature_ptr)
+{
+       if (creature_ptr->csp >= creature_ptr->lev / 5)
+       {
+               creature_ptr->csp -= creature_ptr->lev / 5;
+               hp_player(creature_ptr->lev);
+       }
+       else
+       {
+               msg_print(_("変換に失敗した。", "You failed to convert."));
+       }
+       /* Redraw mana and hp */
+       creature_ptr->redraw |= (PR_HP | PR_MANA);
+       return TRUE;
+}
+
+bool demonic_breath(player_type *creature_ptr)
+{
+       DIRECTION dir;
+       int type = (one_in_(2) ? GF_NETHER : GF_FIRE);
+       if (!get_aim_dir(&dir)) return FALSE;
+       stop_mouth();
+       msg_format(_("あなたは%sのブレスを吐いた。", "You breathe %s."), ((type == GF_NETHER) ? _("地獄", "nether") : _("火炎", "fire")));
+       fire_breath(type, dir, creature_ptr->lev * 3, (creature_ptr->lev / 15) + 1);
+       return TRUE;
+}
+
+bool mirror_concentration(player_type *creature_ptr)
+{
+       if (total_friends)
+       {
+               msg_print(_("今はペットを操ることに集中していないと。", "You need concentration on the pets now."));
+               return FALSE;
+       }
+       if (is_mirror_grid(&cave[creature_ptr->y][creature_ptr->x]))
+       {
+               msg_print(_("少し頭がハッキリした。", "You feel your head clear a little."));
+
+               creature_ptr->csp += (5 + creature_ptr->lev * creature_ptr->lev / 100);
+               if (creature_ptr->csp >= creature_ptr->msp)
+               {
+                       creature_ptr->csp = creature_ptr->msp;
+                       creature_ptr->csp_frac = 0;
+               }
+               creature_ptr->redraw |= (PR_MANA);
+       }
+       else
+       {
+               msg_print(_("鏡の上でないと集中できない!", "Here are not any mirrors!"));
+       }
+       return TRUE;
+}
\ No newline at end of file