X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmane.c;h=6500c0e808bca442b1732a73f83a7eec46be7a31;hb=7cdb104ee79b818365e7871434e4050e221d63ae;hp=52a4c0608c167ed966ead700ee0d328fdc32834e;hpb=3d4628de3bc32b425304abaa8985a6623d80d23e;p=hengband%2Fhengband.git diff --git a/src/mane.c b/src/mane.c index 52a4c0608..6500c0e80 100644 --- a/src/mane.c +++ b/src/mane.c @@ -11,6 +11,10 @@ */ #include "angband.h" +#include "spells-summon.h" +#include "spells-status.h" +#include "cmd-spell.h" +#include "player-status.h" static int damage; @@ -24,39 +28,35 @@ static int damage; static void mane_info(char *p, int power, HIT_POINT dam) { PLAYER_LEVEL plev = p_ptr->lev; - cptr s_dam = _("損傷:", "dam "); - cptr s_dur = _("期間:", "dur "); - cptr s_range = _("範囲:", "range "); - cptr s_heal = _("回復:", "heal "); strcpy(p, ""); if ((power > 2 && power < 41) || (power > 41 && power < 59) || (power == 75)) - sprintf(p, " %s%d", s_dam, (int)dam); + sprintf(p, " %s%d", KWD_DAM, (int)dam); else { switch (power) { case 41: - sprintf(p, " %sd%d+%d", s_heal, plev * 3, plev); + sprintf(p, " %sd%d+%d", KWD_HEAL, plev * 3, plev); break; case 64: - sprintf(p, " %sd%d+%d", s_dur, 20+plev, plev); + sprintf(p, " %sd%d+%d", KWD_DURATION, 20+plev, plev); break; case 66: - sprintf(p, " %s%d", s_heal, plev*6); + sprintf(p, " %s%d", KWD_HEAL, plev*6); break; case 67: - sprintf(p, " %sd7+7", s_dur); + sprintf(p, " %sd7+7", KWD_DURATION); break; case 68: - sprintf(p, " %s10", s_range); + sprintf(p, " %s10", KWD_SPHERE); break; case 69: - sprintf(p, " %s%d", s_range, plev * 5); + sprintf(p, " %s%d", KWD_SPHERE, plev * 5); break; case 79: - sprintf(p, " %s5", s_range); + sprintf(p, " %s5", KWD_SPHERE); break; default: break; @@ -96,7 +96,7 @@ static int get_mane_power(int *sn, bool baigaesi) char choice; char out_val[160]; char comment[80]; - cptr p = _("能力", "power"); + concptr p = _("能力", "power"); monster_power spell; bool flag, redraw; @@ -135,8 +135,6 @@ static int get_mane_power(int *sn, bool baigaesi) /* Show list */ redraw = TRUE; - - /* Save the screen */ screen_save(); /* Display a list of spells */ @@ -195,8 +193,6 @@ static int get_mane_power(int *sn, bool baigaesi) { /* Hide list */ redraw = FALSE; - - /* Restore the screen */ screen_load(); } @@ -238,15 +234,10 @@ static int get_mane_power(int *sn, bool baigaesi) /* Stop the loop */ flag = TRUE; } - - /* Restore the screen */ if (redraw) screen_load(); - /* Show choices */ p_ptr->window |= (PW_SPELL); - - /* Window stuff */ - window_stuff(); + handle_stuff(); /* Abort if needed */ if (!flag) return (FALSE); @@ -672,7 +663,7 @@ static bool use_mane(int spell) teleport_player(plev * 5, 0L); break; case MS_WORLD: - world_player = TRUE; + p_ptr->timewalk = TRUE; if (damage == 1 || damage == 2) msg_print(_("「『ザ・ワールド』!時は止まった!」", "You yell 'The World! Time has stopped!'")); else if (damage == 3 || damage == 6) @@ -682,15 +673,9 @@ static bool use_mane(int spell) msg_print(NULL); /* Hack */ - p_ptr->energy_need -= 1000 + (100 + randint1(200)+200)*TURNS_PER_TICK/10; - - /* Redraw map */ + p_ptr->energy_need -= 1000 + (100 + randint1(200) + 200) * TURNS_PER_TICK / 10; p_ptr->redraw |= (PR_MAP); - - /* Update monsters */ p_ptr->update |= (PU_MONSTERS); - - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); handle_stuff(); @@ -701,7 +686,7 @@ static bool use_mane(int spell) { monster_type *m_ptr; monster_race *r_ptr; - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; if (!target_set(TARGET_KILL)) return FALSE; if (!cave[target_row][target_col].m_idx) break; @@ -737,31 +722,10 @@ static bool use_mane(int spell) (void)fire_beam(GF_AWAY_ALL, dir, plev); break; - case MS_TELE_LEVEL: - { - IDX target_m_idx; - monster_type *m_ptr; - monster_race *r_ptr; - char m_name[80]; - - if (!target_set(TARGET_KILL)) return FALSE; - target_m_idx = cave[target_row][target_col].m_idx; - if (!target_m_idx) break; - if (!player_has_los_bold(target_row, target_col)) break; - if (!projectable(p_ptr->y, p_ptr->x, target_row, target_col)) break; - m_ptr = &m_list[target_m_idx]; - r_ptr = &r_info[m_ptr->r_idx]; - monster_desc(m_name, m_ptr, 0); - msg_format(_("%^sの足を指さした。", "You gesture at %^s's feet."), m_name); - if ((r_ptr->flagsr & (RFR_EFF_RES_NEXU_MASK | RFR_RES_TELE)) || - (r_ptr->flags1 & RF1_QUESTOR) || (r_ptr->level + randint1(50) > plev + randint1(60))) - { - msg_print(_("しかし効果がなかった!", "%^s is unaffected!")); - } - else teleport_level(target_m_idx); + case MS_TELE_LEVEL: + return teleport_level_other(p_ptr); break; - } case MS_PSY_SPEAR: if (!get_aim_dir(&dir)) return FALSE; @@ -806,7 +770,7 @@ static bool use_mane(int spell) msg_print(_("サイバーデーモンを召喚した!", "You summon Cyberdemons!")); if (max_cyber > 4) max_cyber = 4; for (k = 0;k < max_cyber; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_CYBER, mode); + summon_specific(-1, target_row, target_col, plev, SUMMON_CYBER, mode, '\0'); break; } case MS_S_MONSTER: @@ -815,7 +779,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("仲間を召喚した。", "You summon help.")); for (k = 0;k < 1; k++) - summon_specific(-1, target_row, target_col, plev, 0, (mode | u_mode)); + summon_specific(-1, target_row, target_col, plev, 0, (mode | u_mode), '\0'); break; } case MS_S_MONSTERS: @@ -823,8 +787,8 @@ static bool use_mane(int spell) int k; if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("モンスターを召喚した!", "You summon monsters!")); - for (k = 0;k < 6; k++) - summon_specific(-1, target_row, target_col, plev, 0, (mode | u_mode)); + for (k = 0;k < A_MAX; k++) + summon_specific(-1, target_row, target_col, plev, 0, (mode | u_mode), '\0'); break; } case MS_S_ANT: @@ -832,8 +796,8 @@ static bool use_mane(int spell) int k; if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("アリを召喚した。", "You summon ants.")); - for (k = 0;k < 6; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_ANT, mode); + for (k = 0;k < A_MAX; k++) + summon_specific(-1, target_row, target_col, plev, SUMMON_ANT, mode, '\0'); break; } case MS_S_SPIDER: @@ -841,8 +805,8 @@ static bool use_mane(int spell) int k; if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("蜘蛛を召喚した。", "You summon spiders.")); - for (k = 0;k < 6; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_SPIDER, mode); + for (k = 0;k < A_MAX; k++) + summon_specific(-1, target_row, target_col, plev, SUMMON_SPIDER, mode, '\0'); break; } case MS_S_HOUND: @@ -851,7 +815,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("ハウンドを召喚した。", "You summon hounds.")); for (k = 0;k < 4; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_HOUND, mode); + summon_specific(-1, target_row, target_col, plev, SUMMON_HOUND, mode, '\0'); break; } case MS_S_HYDRA: @@ -860,7 +824,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("ヒドラを召喚した。", "You summon hydras.")); for (k = 0;k < 4; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_HYDRA, mode); + summon_specific(-1, target_row, target_col, plev, SUMMON_HYDRA, mode, '\0'); break; } case MS_S_ANGEL: @@ -869,7 +833,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("天使を召喚した!", "You summon angel!")); for (k = 0;k < 1; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_ANGEL, mode); + summon_specific(-1, target_row, target_col, plev, SUMMON_ANGEL, mode, '\0'); break; } case MS_S_DEMON: @@ -878,7 +842,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("混沌の宮廷から悪魔を召喚した!", "You summon a demon from the Courts of Chaos!")); for (k = 0;k < 1; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_DEMON, (mode | u_mode)); + summon_specific(-1, target_row, target_col, plev, SUMMON_DEMON, (mode | u_mode), '\0'); break; } case MS_S_UNDEAD: @@ -887,7 +851,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("アンデッドの強敵を召喚した!", "You summon an undead adversary!")); for (k = 0;k < 1; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_UNDEAD, (mode | u_mode)); + summon_specific(-1, target_row, target_col, plev, SUMMON_UNDEAD, (mode | u_mode), '\0'); break; } case MS_S_DRAGON: @@ -896,7 +860,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("ドラゴンを召喚した!", "You summon dragon!")); for (k = 0;k < 1; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_DRAGON, (mode | u_mode)); + summon_specific(-1, target_row, target_col, plev, SUMMON_DRAGON, (mode | u_mode), '\0'); break; } case MS_S_HI_UNDEAD: @@ -904,8 +868,8 @@ static bool use_mane(int spell) int k; if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("強力なアンデッドを召喚した!", "You summon greater undead!")); - for (k = 0;k < 6; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode)); + for (k = 0;k < A_MAX; k++) + summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode), '\0'); break; } case MS_S_HI_DRAGON: @@ -914,7 +878,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("古代ドラゴンを召喚した!", "You summon ancient dragons!")); for (k = 0;k < 4; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_HI_DRAGON, (mode | u_mode)); + summon_specific(-1, target_row, target_col, plev, SUMMON_HI_DRAGON, (mode | u_mode), '\0'); break; } case MS_S_AMBERITE: @@ -923,7 +887,7 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("アンバーの王族を召喚した!", "You summon Lords of Amber!")); for (k = 0;k < 4; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE)); + summon_specific(-1, target_row, target_col, plev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE), '\0'); break; } case MS_S_UNIQUE: @@ -932,9 +896,9 @@ static bool use_mane(int spell) if (!target_set(TARGET_KILL)) return FALSE; msg_print(_("特別な強敵を召喚した!", "You summon special opponents!")); for (k = 0;k < 4; k++) - if (summon_specific(-1, target_row, target_col, plev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE))) count++; + if (summon_specific(-1, target_row, target_col, plev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE), '\0')) count++; for (k = count;k < 4; k++) - summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode)); + summon_specific(-1, target_row, target_col, plev, SUMMON_HI_UNDEAD, (mode | u_mode), '\0'); break; } default: @@ -971,13 +935,7 @@ bool do_cmd_mane(bool baigaesi) monster_power spell; bool cast; - - /* not if confused */ - if (p_ptr->confused) - { - msg_print(_("混乱していて集中できない!", "You are too confused!")); - return TRUE; - } + if (cmd_limit_confused(p_ptr)) return FALSE; if (!p_ptr->mane_num) { @@ -1040,9 +998,8 @@ bool do_cmd_mane(bool baigaesi) p_ptr->mane_dam[j] = p_ptr->mane_dam[j+1]; } - p_ptr->energy_use = 100; + take_turn(p_ptr, 100);; - /* Window stuff */ p_ptr->redraw |= (PR_IMITATION); p_ptr->window |= (PW_PLAYER); p_ptr->window |= (PW_SPELL);