X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fspells2.c;h=0b7a86eb78eb25a2c32c3c7d12c56dd802038ad2;hb=e70ba712cf4b753e7d3876f60980c87cfeec09e3;hp=d8c446d2fe7f3aebb02c9cd9faf2ec0e82c6f88f;hpb=e7f8539e60ea67d011a1452a9e59d0c942a98592;p=hengband%2Fhengband.git diff --git a/src/spells2.c b/src/spells2.c index d8c446d2f..0b7a86eb7 100644 --- a/src/spells2.c +++ b/src/spells2.c @@ -14,6 +14,9 @@ #include "angband.h" #include "grid.h" #include "trap.h" +#include "monsterrace-hook.h" +#include "melee.h" +#include "world.h" /*! @@ -25,7 +28,7 @@ */ static bool detect_feat_flag(POSITION range, int flag, bool known) { - int x, y; + POSITION x, y; bool detect = FALSE; cave_type *c_ptr; @@ -50,7 +53,6 @@ static bool detect_feat_flag(POSITION range, int flag, bool known) c_ptr->info &= ~(CAVE_UNSAFE); - /* Redraw */ lite_spot(y, x); } } @@ -64,7 +66,6 @@ static bool detect_feat_flag(POSITION range, int flag, bool known) /* Hack -- Memorize */ c_ptr->info |= (CAVE_MARK); - /* Redraw */ lite_spot(y, x); detect = TRUE; @@ -157,7 +158,8 @@ bool detect_treasure(POSITION range) */ bool detect_objects_gold(POSITION range) { - int i, y, x; + OBJECT_IDX i; + POSITION y, x; POSITION range2 = range; bool detect = FALSE; @@ -211,7 +213,8 @@ bool detect_objects_gold(POSITION range) */ bool detect_objects_normal(POSITION range) { - int i, y, x; + OBJECT_IDX i; + POSITION y, x; POSITION range2 = range; bool detect = FALSE; @@ -273,7 +276,9 @@ bool detect_objects_normal(POSITION range) */ bool detect_objects_magic(POSITION range) { - int i, y, x, tv; + OBJECT_TYPE_VALUE tv; + OBJECT_IDX i; + POSITION y, x; bool detect = FALSE; @@ -350,12 +355,10 @@ bool detect_monsters_normal(POSITION range) { MONSTER_IDX i; POSITION y, x; - bool flag = FALSE; if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; - /* Scan monsters */ for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; @@ -376,11 +379,8 @@ bool detect_monsters_normal(POSITION range) /* Repair visibility later */ repair_monsters = TRUE; - /* Hack -- Detect monster */ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW); - - /* Update the monster */ - update_mon(i, FALSE); + update_monster(i, FALSE); flag = TRUE; } } @@ -388,7 +388,6 @@ bool detect_monsters_normal(POSITION range) if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE; if (flag) { - /* Describe result */ msg_print(_("モンスターの存在を感じとった!", "You sense the presence of monsters!")); } return (flag); @@ -408,7 +407,6 @@ bool detect_monsters_invis(POSITION range) if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; - /* Scan monsters */ for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; @@ -435,11 +433,8 @@ bool detect_monsters_invis(POSITION range) /* Repair visibility later */ repair_monsters = TRUE; - /* Hack -- Detect monster */ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW); - - /* Update the monster */ - update_mon(i, FALSE); + update_monster(i, FALSE); flag = TRUE; } } @@ -447,7 +442,6 @@ bool detect_monsters_invis(POSITION range) if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE; if (flag) { - /* Describe result */ msg_print(_("透明な生物の存在を感じとった!", "You sense the presence of invisible creatures!")); } return (flag); @@ -466,7 +460,6 @@ bool detect_monsters_evil(POSITION range) if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; - /* Scan monsters */ for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; @@ -499,17 +492,13 @@ bool detect_monsters_evil(POSITION range) /* Repair visibility later */ repair_monsters = TRUE; - /* Hack -- Detect monster */ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW); - - /* Update the monster */ - update_mon(i, FALSE); + update_monster(i, FALSE); flag = TRUE; } } if (flag) { - /* Describe result */ msg_print(_("邪悪なる生物の存在を感じとった!", "You sense the presence of evil creatures!")); } return (flag); @@ -528,11 +517,9 @@ bool detect_monsters_nonliving(POSITION range) if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; - /* Scan monsters */ for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; - monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; @@ -544,7 +531,7 @@ bool detect_monsters_nonliving(POSITION range) if (distance(p_ptr->y, p_ptr->x, y, x) > range) continue; /* Detect non-living monsters */ - if (!monster_living(r_ptr)) + if (!monster_living(m_ptr->r_idx)) { /* Update monster recall window */ if (p_ptr->monster_race_idx == m_ptr->r_idx) @@ -555,17 +542,13 @@ bool detect_monsters_nonliving(POSITION range) /* Repair visibility later */ repair_monsters = TRUE; - /* Hack -- Detect monster */ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW); - - /* Update the monster */ - update_mon(i, FALSE); + update_monster(i, FALSE); flag = TRUE; } } if (flag) { - /* Describe result */ msg_print(_("自然でないモンスターの存在を感じた!", "You sense the presence of unnatural beings!")); } return (flag); @@ -580,11 +563,10 @@ bool detect_monsters_mind(POSITION range) { MONSTER_IDX i; POSITION y, x; - bool flag = FALSE; + bool flag = FALSE; if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; - /* Scan monsters */ for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; @@ -611,17 +593,13 @@ bool detect_monsters_mind(POSITION range) /* Repair visibility later */ repair_monsters = TRUE; - /* Hack -- Detect monster */ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW); - - /* Update the monster */ - update_mon(i, FALSE); + update_monster(i, FALSE); flag = TRUE; } } if (flag) { - /* Describe result */ msg_print(_("殺気を感じとった!", "You sense the presence of someone's mind!")); } return (flag); @@ -642,7 +620,6 @@ bool detect_monsters_string(POSITION range, cptr Match) if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; - /* Scan monsters */ for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; @@ -669,11 +646,8 @@ bool detect_monsters_string(POSITION range, cptr Match) /* Repair visibility later */ repair_monsters = TRUE; - /* Hack -- Detect monster */ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW); - - /* Update the monster */ - update_mon(i, FALSE); + update_monster(i, FALSE); flag = TRUE; } } @@ -681,7 +655,6 @@ bool detect_monsters_string(POSITION range, cptr Match) if (music_singing(MUSIC_DETECT) && SINGING_COUNT(p_ptr) > 3) flag = FALSE; if (flag) { - /* Describe result */ msg_print(_("モンスターの存在を感じとった!", "You sense the presence of monsters!")); } return (flag); @@ -702,7 +675,6 @@ bool detect_monsters_xxx(POSITION range, u32b match_flag) if (d_info[dungeon_type].flags1 & DF1_DARKNESS) range /= 3; - /* Scan monsters */ for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; @@ -735,11 +707,8 @@ bool detect_monsters_xxx(POSITION range, u32b match_flag) /* Repair visibility later */ repair_monsters = TRUE; - /* Hack -- Detect monster */ m_ptr->mflag2 |= (MFLAG2_MARK | MFLAG2_SHOW); - - /* Update the monster */ - update_mon(i, FALSE); + update_monster(i, FALSE); flag = TRUE; } } @@ -755,7 +724,6 @@ bool detect_monsters_xxx(POSITION range, u32b match_flag) break; } - /* Describe result */ msg_format(_("%sの存在を感じとった!", "You sense the presence of %s!"), desc_monsters); msg_print(NULL); } @@ -801,7 +769,7 @@ bool detect_all(POSITION range) * this is done in two passes. -- JDL * */ -bool project_hack(EFFECT_ID typ, HIT_POINT dam) +bool project_all_los(EFFECT_ID typ, HIT_POINT dam) { MONSTER_IDX i; POSITION x, y; @@ -854,7 +822,7 @@ bool project_hack(EFFECT_ID typ, HIT_POINT dam) */ bool speed_monsters(void) { - return (project_hack(GF_OLD_SPEED, p_ptr->lev)); + return (project_all_los(GF_OLD_SPEED, p_ptr->lev)); } /*! @@ -863,7 +831,7 @@ bool speed_monsters(void) */ bool slow_monsters(int power) { - return (project_hack(GF_OLD_SLOW, power)); + return (project_all_los(GF_OLD_SLOW, power)); } /*! @@ -872,7 +840,7 @@ bool slow_monsters(int power) */ bool sleep_monsters(int power) { - return (project_hack(GF_OLD_SLEEP, power)); + return (project_all_los(GF_OLD_SLEEP, power)); } /*! @@ -881,7 +849,7 @@ bool sleep_monsters(int power) */ bool banish_evil(int dist) { - return (project_hack(GF_AWAY_EVIL, dist)); + return (project_all_los(GF_AWAY_EVIL, dist)); } /*! @@ -890,7 +858,7 @@ bool banish_evil(int dist) */ bool turn_undead(void) { - bool tester = (project_hack(GF_TURN_UNDEAD, p_ptr->lev)); + bool tester = (project_all_los(GF_TURN_UNDEAD, p_ptr->lev)); if (tester) chg_virtue(V_UNLIFE, -1); return tester; @@ -902,7 +870,7 @@ bool turn_undead(void) */ bool dispel_undead(HIT_POINT dam) { - bool tester = (project_hack(GF_DISP_UNDEAD, dam)); + bool tester = (project_all_los(GF_DISP_UNDEAD, dam)); if (tester) chg_virtue(V_UNLIFE, -2); return tester; @@ -914,7 +882,7 @@ bool dispel_undead(HIT_POINT dam) */ bool dispel_evil(HIT_POINT dam) { - return (project_hack(GF_DISP_EVIL, dam)); + return (project_all_los(GF_DISP_EVIL, dam)); } /*! @@ -923,7 +891,7 @@ bool dispel_evil(HIT_POINT dam) */ bool dispel_good(HIT_POINT dam) { - return (project_hack(GF_DISP_GOOD, dam)); + return (project_all_los(GF_DISP_GOOD, dam)); } /*! @@ -932,7 +900,7 @@ bool dispel_good(HIT_POINT dam) */ bool dispel_monsters(HIT_POINT dam) { - return (project_hack(GF_DISP_ALL, dam)); + return (project_all_los(GF_DISP_ALL, dam)); } /*! @@ -941,7 +909,7 @@ bool dispel_monsters(HIT_POINT dam) */ bool dispel_living(HIT_POINT dam) { - return (project_hack(GF_DISP_LIVING, dam)); + return (project_all_los(GF_DISP_LIVING, dam)); } /*! @@ -950,7 +918,7 @@ bool dispel_living(HIT_POINT dam) */ bool dispel_demons(HIT_POINT dam) { - return (project_hack(GF_DISP_DEMON, dam)); + return (project_all_los(GF_DISP_DEMON, dam)); } /*! @@ -959,7 +927,7 @@ bool dispel_demons(HIT_POINT dam) */ bool crusade(void) { - return (project_hack(GF_CRUSADE, p_ptr->lev*4)); + return (project_all_los(GF_CRUSADE, p_ptr->lev*4)); } /*! @@ -976,8 +944,7 @@ void aggravate_monsters(MONSTER_IDX who) /* Aggravate everyone nearby */ for (i = 1; i < m_max; i++) { - monster_type *m_ptr = &m_list[i]; -/* monster_race *r_ptr = &r_info[m_ptr->r_idx]; */ + monster_type *m_ptr = &m_list[i]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; @@ -1045,7 +1012,7 @@ bool genocide_aux(MONSTER_IDX m_idx, int power, bool player_cast, int dam_side, { if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE); do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_GENOCIDE, m_name); @@ -1057,7 +1024,7 @@ bool genocide_aux(MONSTER_IDX m_idx, int power, bool player_cast, int dam_side, if (resist && player_cast) { bool see_m = is_seen(m_ptr); - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, 0); if (see_m) @@ -1091,11 +1058,9 @@ bool genocide_aux(MONSTER_IDX m_idx, int power, bool player_cast, int dam_side, /* Visual feedback */ move_cursor_relative(p_ptr->y, p_ptr->x); - /* Redraw */ p_ptr->redraw |= (PR_HP); p_ptr->window |= (PW_PLAYER); - /* Handle */ handle_stuff(); Term_fresh(); @@ -1138,7 +1103,6 @@ bool symbol_genocide(int power, bool player_cast) /* Skip "wrong" monsters */ if (r_ptr->d_char != typ) continue; - /* Take note */ result |= genocide_aux(i, power, player_cast, 4, _("抹殺", "Genocide")); } @@ -1246,7 +1210,7 @@ bool mass_genocide_undead(int power, bool player_cast) bool probing(void) { int i; - SPEED speed; + int speed; /* TODO */ bool_hack cu, cv; bool probe = FALSE; char buf[256]; @@ -1272,7 +1236,7 @@ bool probing(void) /* Probe visible monsters */ if (m_ptr->ml) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; /* Start the message */ if (!probe) @@ -1330,8 +1294,9 @@ bool probing(void) /* HACK : Add the line to message buffer */ message_add(buf); + p_ptr->window |= (PW_MESSAGE); - window_stuff(); + handle_stuff(); if (m_ptr->ml) move_cursor_relative(m_ptr->fy, m_ptr->fx); inkey(); @@ -1470,7 +1435,7 @@ bool destroy_area(POSITION y1, POSITION x1, POSITION r, bool in_generate) { if (record_named_pet && is_pet(m_ptr) && m_ptr->nickname) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE); do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_DESTROY, m_name); @@ -1490,8 +1455,6 @@ bool destroy_area(POSITION y1, POSITION x1, POSITION r, bool in_generate) for (this_o_idx = c_ptr->o_idx; this_o_idx; this_o_idx = next_o_idx) { object_type *o_ptr; - - /* Acquire object */ o_ptr = &o_list[this_o_idx]; /* Acquire next object */ @@ -1505,7 +1468,7 @@ bool destroy_area(POSITION y1, POSITION x1, POSITION r, bool in_generate) if (in_generate && cheat_peek) { - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; object_desc(o_name, o_ptr, (OD_NAME_ONLY | OD_STORE)); msg_format(_("伝説のアイテム (%s) は生成中に*破壊*された。", "Artifact (%s) was *destroyed* during generation."), o_name); } @@ -1639,7 +1602,6 @@ bool destroy_area(POSITION y1, POSITION x1, POSITION r, bool in_generate) p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE | PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); @@ -1846,7 +1808,7 @@ bool earthquake_aux(POSITION cy, POSITION cx, POSITION r, MONSTER_IDX m_idx) if (m_idx) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_type *m_ptr = &m_list[m_idx]; /* Get the monster's real name */ @@ -1897,7 +1859,7 @@ bool earthquake_aux(POSITION cy, POSITION cx, POSITION r, MONSTER_IDX m_idx) if (!(r_ptr->flags2 & (RF2_KILL_WALL)) && !(r_ptr->flags2 & (RF2_PASS_WALL))) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; /* Assume not safe */ sn = 0; @@ -1963,14 +1925,13 @@ bool earthquake_aux(POSITION cy, POSITION cx, POSITION r, MONSTER_IDX m_idx) { if (record_named_pet && is_pet(&m_list[c_ptr->m_idx]) && m_list[c_ptr->m_idx].nickname) { - char m2_name[80]; + char m2_name[MAX_NLEN]; monster_desc(m2_name, m_ptr, MD_INDEF_VISIBLE); do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_EARTHQUAKE, m2_name); } } - delete_monster(yy, xx); /* No longer safe */ @@ -1992,13 +1953,8 @@ bool earthquake_aux(POSITION cy, POSITION cx, POSITION r, MONSTER_IDX m_idx) m_ptr->fy = sy; m_ptr->fx = sx; - /* Update the monster (new location) */ - update_mon(m_idx, TRUE); - - /* Redraw the old grid */ + update_monster(m_idx, TRUE); lite_spot(yy, xx); - - /* Redraw the new grid */ lite_spot(sy, sx); } } @@ -2115,7 +2071,6 @@ bool earthquake_aux(POSITION cy, POSITION cx, POSITION r, MONSTER_IDX m_idx) /* Update the health bar */ p_ptr->redraw |= (PR_HEALTH | PR_UHEALTH); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); @@ -2174,7 +2129,7 @@ void discharge_minion(void) /* Uniques resist discharging */ if (r_ptr->flags1 & RF1_UNIQUE) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, 0x00); msg_format(_("%sは爆破されるのを嫌がり、勝手に自分の世界へと帰った。", "%^s resists to be blasted, and run away."), m_name); delete_monster_idx(i); @@ -2190,7 +2145,7 @@ void discharge_minion(void) if (record_named_pet && m_ptr->nickname) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE); do_cmd_write_nikki(NIKKI_NAMED_PET, RECORD_NAMED_PET_BLAST, m_name); @@ -2242,13 +2197,9 @@ static void cave_temp_room_lite(void) if (c_ptr->m_idx) { int chance = 25; - monster_type *m_ptr = &m_list[c_ptr->m_idx]; - monster_race *r_ptr = &r_info[m_ptr->r_idx]; - - /* Update the monster */ - update_mon(c_ptr->m_idx, FALSE); + update_monster(c_ptr->m_idx, FALSE); /* Stupid monsters rarely wake up */ if (r_ptr->flags2 & (RF2_STUPID)) chance = 10; @@ -2265,12 +2216,8 @@ static void cave_temp_room_lite(void) /* Notice the "waking up" */ if (m_ptr->ml) { - char m_name[80]; - - /* Acquire the monster name */ + GAME_TEXT m_name[MAX_NLEN]; monster_desc(m_name, m_ptr, 0); - - /* Dump a message */ msg_format(_("%^sが目を覚ました。", "%^s wakes up."), m_name); } } @@ -2279,7 +2226,6 @@ static void cave_temp_room_lite(void) /* Note */ note_spot(y, x); - /* Redraw */ lite_spot(y, x); update_local_illumination(y, x); @@ -2359,11 +2305,9 @@ static void cave_temp_room_unlite(void) /* Process affected monsters */ if (c_ptr->m_idx) { - /* Update the monster */ - update_mon(c_ptr->m_idx, FALSE); + update_monster(c_ptr->m_idx, FALSE); } - /* Redraw */ lite_spot(y, x); update_local_illumination(y, x); @@ -3350,7 +3294,6 @@ bool wall_stone(void) p_ptr->update |= (PU_FLOW); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); return dummy; @@ -3513,7 +3456,7 @@ bool activate_ty_curse(bool stop_ty, int *count) (*count) += activate_hi_summon(p_ptr->y, p_ptr->x, FALSE); if (!one_in_(6)) break; case 7: case 8: case 9: case 18: - (*count) += summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (*count) += summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0'); if (!one_in_(6)) break; case 10: case 11: case 12: msg_print(_("経験値が体から吸い取られた気がする!", "You feel your experience draining away...")); @@ -3553,7 +3496,7 @@ bool activate_ty_curse(bool stop_ty, int *count) } if (!one_in_(6)) break; default: - while (i < 6) + while (i < A_MAX) { do { @@ -3607,51 +3550,51 @@ int activate_hi_summon(POSITION y, POSITION x, bool can_pet) switch (randint1(25) + (dun_level / 20)) { case 1: case 2: - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANT, mode, '\0'); break; case 3: case 4: - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_SPIDER, mode, '\0'); break; case 5: case 6: - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HOUND, mode, '\0'); break; case 7: case 8: - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HYDRA, mode, '\0'); break; case 9: case 10: - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_ANGEL, mode, '\0'); break; case 11: case 12: - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNDEAD, mode, '\0'); break; case 13: case 14: - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DRAGON, mode, '\0'); break; case 15: case 16: - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_DEMON, mode, '\0'); break; case 17: if (can_pet) break; - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE)); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_AMBERITES, (mode | PM_ALLOW_UNIQUE), '\0'); break; case 18: case 19: if (can_pet) break; - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE)); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_UNIQUE, (mode | PM_ALLOW_UNIQUE), '\0'); break; case 20: case 21: if (!can_pet) mode |= PM_ALLOW_UNIQUE; - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_UNDEAD, mode, '\0'); break; case 22: case 23: if (!can_pet) mode |= PM_ALLOW_UNIQUE; - count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, mode); + count += summon_specific((pet ? -1 : 0), y, x, summon_lev, SUMMON_HI_DRAGON, mode, '\0'); break; case 24: - count += summon_specific((pet ? -1 : 0), y, x, 100, SUMMON_CYBER, mode); + count += summon_specific((pet ? -1 : 0), y, x, 100, SUMMON_CYBER, mode, '\0'); break; default: if (!can_pet) mode |= PM_ALLOW_UNIQUE; - count += summon_specific((pet ? -1 : 0), y, x,pet ? summon_lev : (((summon_lev * 3) / 2) + 5), 0, mode); + count += summon_specific((pet ? -1 : 0), y, x,pet ? summon_lev : (((summon_lev * 3) / 2) + 5), 0, mode, '\0'); } } @@ -3684,7 +3627,7 @@ int summon_cyber(MONSTER_IDX who, POSITION y, POSITION x) for (i = 0; i < max_cyber; i++) { - count += summon_specific(who, y, x, 100, SUMMON_CYBER, mode); + count += summon_specific(who, y, x, 100, SUMMON_CYBER, mode, '\0'); } return count; @@ -3745,7 +3688,7 @@ void wall_breaker(void) */ bool confuse_monsters(HIT_POINT dam) { - return (project_hack(GF_OLD_CONF, dam)); + return (project_all_los(GF_OLD_CONF, dam)); } @@ -3756,7 +3699,7 @@ bool confuse_monsters(HIT_POINT dam) */ bool charm_monsters(HIT_POINT dam) { - return (project_hack(GF_CHARM, dam)); + return (project_all_los(GF_CHARM, dam)); } @@ -3767,7 +3710,7 @@ bool charm_monsters(HIT_POINT dam) */ bool charm_animals(HIT_POINT dam) { - return (project_hack(GF_CONTROL_ANIMAL, dam)); + return (project_all_los(GF_CONTROL_ANIMAL, dam)); } @@ -3778,7 +3721,7 @@ bool charm_animals(HIT_POINT dam) */ bool stun_monsters(HIT_POINT dam) { - return (project_hack(GF_STUN, dam)); + return (project_all_los(GF_STUN, dam)); } @@ -3789,7 +3732,7 @@ bool stun_monsters(HIT_POINT dam) */ bool stasis_monsters(HIT_POINT dam) { - return (project_hack(GF_STASIS, dam)); + return (project_all_los(GF_STASIS, dam)); } @@ -3800,7 +3743,7 @@ bool stasis_monsters(HIT_POINT dam) */ bool mindblast_monsters(HIT_POINT dam) { - return (project_hack(GF_PSI, dam)); + return (project_all_los(GF_PSI, dam)); } @@ -3811,7 +3754,7 @@ bool mindblast_monsters(HIT_POINT dam) */ bool banish_monsters(int dist) { - return (project_hack(GF_AWAY_ALL, dist)); + return (project_all_los(GF_AWAY_ALL, dist)); } @@ -3822,7 +3765,7 @@ bool banish_monsters(int dist) */ bool turn_evil(HIT_POINT dam) { - return (project_hack(GF_TURN_EVIL, dam)); + return (project_all_los(GF_TURN_EVIL, dam)); } @@ -3833,7 +3776,7 @@ bool turn_evil(HIT_POINT dam) */ bool turn_monsters(HIT_POINT dam) { - return (project_hack(GF_TURN_ALL, dam)); + return (project_all_los(GF_TURN_ALL, dam)); } @@ -3843,7 +3786,7 @@ bool turn_monsters(HIT_POINT dam) */ bool deathray_monsters(void) { - return (project_hack(GF_DEATH_RAY, p_ptr->lev * 200)); + return (project_all_los(GF_DEATH_RAY, p_ptr->lev * 200)); } /*! @@ -3922,23 +3865,14 @@ bool kawarimi(bool success) x = p_ptr->x; teleport_player(10 + randint1(90), 0L); - object_wipe(q_ptr); - object_prep(q_ptr, lookup_kind(TV_STATUE, SV_WOODEN_STATUE)); q_ptr->pval = MON_NINJA; - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); -#ifdef JP - if (success) msg_print("攻撃を受ける前に素早く身をひるがえした。"); - else msg_print("失敗!攻撃を受けてしまった。"); -#else - if (success) msg_print("You have turned around just before the attack hit you."); - else msg_print("Failed! You are hit by the attack."); -#endif + if (success) msg_print(_("攻撃を受ける前に素早く身をひるがえした。", "You have turned around just before the attack hit you.")); + else msg_print(_("失敗!攻撃を受けてしまった。", "Failed! You are hit by the attack.")); p_ptr->special_defense &= ~(NINJA_KAWARIMI); p_ptr->redraw |= (PR_STATUS); @@ -4025,9 +3959,7 @@ bool rush_attack(bool *mdeath) /* Move player before updating the monster */ if (!player_bold(ty, tx)) teleport_player_to(ty, tx, TELEPORT_NONMAGICAL); - - /* Update the monster */ - update_mon(cave[ny][nx].m_idx, TRUE); + update_monster(cave[ny][nx].m_idx, TRUE); /* Found a monster */ m_ptr = &m_list[cave[ny][nx].m_idx]; @@ -4035,8 +3967,7 @@ bool rush_attack(bool *mdeath) if (tm_idx != cave[ny][nx].m_idx) { #ifdef JP - msg_format("%s%sが立ちふさがっている!", tm_idx ? "別の" : "", - m_ptr->ml ? "モンスター" : "何か"); + msg_format("%s%sが立ちふさがっている!", tm_idx ? "別の" : "", m_ptr->ml ? "モンスター" : "何か"); #else msg_format("There is %s in the way!", m_ptr->ml ? (tm_idx ? "another monster" : "a monster") : "someone"); #endif @@ -4044,7 +3975,7 @@ bool rush_attack(bool *mdeath) else if (!player_bold(ty, tx)) { /* Hold the monster name */ - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; /* Get the monster name (BEFORE polymorphing) */ monster_desc(m_name, m_ptr, 0); @@ -4239,7 +4170,7 @@ void wild_magic(int spell) case 35: while (counter++ < 8) { - (void)summon_specific(0, p_ptr->y, p_ptr->x, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET)); + (void)summon_specific(0, p_ptr->y, p_ptr->x, (dun_level * 3) / 2, type, (PM_ALLOW_GROUP | PM_NO_PET), '\0'); } break; case 36: @@ -4520,7 +4451,7 @@ void cast_invoke_spirits(DIRECTION dir) msg_print(_("なんてこった!あなたの周りの地面から朽ちた人影が立ち上がってきた!", "Oh no! Mouldering forms rise from the earth around you!")); - (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0'); chg_virtue(V_UNLIFE, 1); } else if (die < 14) @@ -4680,7 +4611,7 @@ void cast_shuffle(void) else if (die < 14) { msg_print(_("なんてこった!《悪魔》だ!", "Oh no! It's the Devil!")); - summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + summon_specific(0, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0'); } else if (die < 18) { @@ -4828,7 +4759,7 @@ bool_hack life_stream(bool_hack message, bool_hack virtue) (void)set_cut(0); (void)restore_all_status(); (void)set_shero(0, TRUE); - update_stuff(); + handle_stuff(); hp_player(5000); return TRUE; @@ -5052,16 +4983,15 @@ bool psychometry(void) { OBJECT_IDX item; object_type *o_ptr; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; byte feel; cptr q, s; bool okay = FALSE; - item_tester_no_ryoute = TRUE; q = _("どのアイテムを調べますか?", "Meditate on which item? "); s = _("調べるアイテムがありません。", "You have nothing appropriate."); - if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR))) return (FALSE); + if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT))) return (FALSE); /* Get the item (in the pack) */ if (item >= 0) @@ -5115,7 +5045,7 @@ bool psychometry(void) o_ptr->marked |= OM_TOUCHED; /* Combine / Reorder the pack (later) */ - p_ptr->notice |= (PN_COMBINE | PN_REORDER); + p_ptr->update |= (PU_COMBINE | PU_REORDER); p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_PLAYER);