X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fcmd2.c;h=804fc50b49e6c1504e2f3efd9ce5feeb9d5bf606;hb=eb2f15d1cfc313fda1f0578f2685246f3b76af4d;hp=3d7443dbe08808c9ad3d3eeb88d3338af0818f94;hpb=81bc5423676101389183570fcf2ef759e4ffce80;p=hengband%2Fhengband.git diff --git a/src/cmd2.c b/src/cmd2.c index 3d7443dbe..804fc50b4 100644 --- a/src/cmd2.c +++ b/src/cmd2.c @@ -12,6 +12,7 @@ #include "angband.h" #include "chest.h" +#include "melee.h" #include "object-hook.h" /*! @@ -806,10 +807,7 @@ void do_cmd_open(void) else if (c_ptr->m_idx && p_ptr->riding != c_ptr->m_idx) { p_ptr->energy_use = 100; - msg_print(_("モンスターが立ちふさがっている!", "There is a monster in the way!")); - - /* Attack */ py_attack(y, x, 0); } @@ -847,7 +845,6 @@ void do_cmd_open(void) */ static bool do_cmd_close_aux(POSITION y, POSITION x) { - /* Get grid and contents */ cave_type *c_ptr = &cave[y][x]; FEAT_IDX old_feat = c_ptr->feat; bool more = FALSE; @@ -935,11 +932,8 @@ void do_cmd_close(void) cave_type *c_ptr; FEAT_IDX feat; - /* Get requested location */ y = p_ptr->y + ddy[dir]; x = p_ptr->x + ddx[dir]; - - /* Get grid and contents */ c_ptr = &cave[y][x]; /* Feature code (applying "mimic" field) */ @@ -1410,7 +1404,6 @@ static bool do_cmd_disarm_chest(POSITION y, POSITION x, OBJECT_IDX o_idx) bool do_cmd_disarm_aux(POSITION y, POSITION x, DIRECTION dir) { - /* Get grid and contents */ cave_type *c_ptr = &cave[y][x]; /* Get feature */ @@ -1535,11 +1528,8 @@ void do_cmd_disarm(void) cave_type *c_ptr; FEAT_IDX feat; - /* Get location */ y = p_ptr->y + ddy[dir]; x = p_ptr->x + ddx[dir]; - - /* Get grid and contents */ c_ptr = &cave[y][x]; /* Feature code (applying "mimic" field) */ @@ -1780,12 +1770,10 @@ void do_cmd_bash(void) */ void do_cmd_alter(void) { - int y, x, dir; - - cave_type *c_ptr; - - bool more = FALSE; - + POSITION y, x; + DIRECTION dir; + cave_type *c_ptr; + bool more = FALSE; if (p_ptr->special_defense & KATA_MUSOU) { @@ -1811,7 +1799,6 @@ void do_cmd_alter(void) FEAT_IDX feat; feature_type *f_ptr; - /* Get location */ y = p_ptr->y + ddy[dir]; x = p_ptr->x + ddx[dir]; @@ -1824,10 +1811,8 @@ void do_cmd_alter(void) p_ptr->energy_use = 100; - /* Attack monsters */ if (c_ptr->m_idx) { - /* Attack */ py_attack(y, x, 0); } @@ -1936,11 +1921,8 @@ void do_cmd_spike(void) cave_type *c_ptr; FEAT_IDX feat; - /* Get location */ y = p_ptr->y + ddy[dir]; x = p_ptr->x + ddx[dir]; - - /* Get grid and contents */ c_ptr = &cave[y][x]; /* Feature code (applying "mimic" field) */ @@ -2214,8 +2196,6 @@ void do_cmd_rest(void) /* Redraw the state */ p_ptr->redraw |= (PR_STATE); - - /* Handle stuff */ handle_stuff(); /* Refresh */ @@ -2824,8 +2804,6 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) /* Start at the player */ y = p_ptr->y; x = p_ptr->x; - - /* Get local object */ q_ptr = &forge; /* Obtain a local object */ @@ -2850,8 +2828,6 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) } sound(SOUND_SHOOT); - - /* Hack -- Handle stuff */ handle_stuff(); /* Save the old location */ @@ -2884,7 +2860,6 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) if (c_ptr->info & (CAVE_MARK)) msg_print(_("岩が砕け散った。", "Wall rocks were shattered.")); /* Forget the wall */ c_ptr->info &= ~(CAVE_MARK); - p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE); /* Destroy the wall */ @@ -2905,10 +2880,7 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) if (snipe_type == SP_LITE) { cave[ny][nx].info |= (CAVE_GLOW); - note_spot(ny, nx); - - /* Redraw */ lite_spot(ny, nx); } @@ -2945,10 +2917,7 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) if (snipe_type == SP_EVILNESS) { cave[ny][nx].info &= ~(CAVE_GLOW | CAVE_MARK); - note_spot(ny, nx); - - /* Redraw */ lite_spot(ny, nx); } @@ -2960,7 +2929,6 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) x = nx; y = ny; - /* Monster here, Try to hit it */ if (cave[y][x].m_idx) { @@ -3089,15 +3057,12 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) if (snipe_type == SP_HOLYNESS) { cave[ny][nx].info |= (CAVE_GLOW); - note_spot(ny, nx); - - /* Redraw */ lite_spot(ny, nx); } /* Hit the monster, check for death */ - if (mon_take_hit(c_mon_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_ptr(m_ptr)))) + if (mon_take_hit(c_mon_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_idx(m_ptr)))) { /* Dead monster */ } @@ -3122,16 +3087,11 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) /* Anger the monster */ if (tdam > 0) anger_monster(m_ptr); - /* Take note */ if (fear && m_ptr->ml) { char m_name[80]; - sound(SOUND_FLEE); - - /* Get the monster name (or "it") */ monster_desc(m_name, m_ptr, 0); - msg_format(_("%^sは恐怖して逃げ出した!", "%^s flees in terror!"), m_name); } @@ -3169,7 +3129,7 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) m_ptr->fy = ny; /* Update the monster (new location) */ - update_mon(c_mon_ptr->m_idx, TRUE); + update_monster(c_mon_ptr->m_idx, TRUE); lite_spot(ny, nx); lite_spot(oy, ox); @@ -3261,7 +3221,7 @@ void do_cmd_fire_aux(INVENTORY_IDX item, object_type *j_ptr) void do_cmd_fire(void) { OBJECT_IDX item; - object_type *j_ptr; + object_type *j_ptr, *ammo_ptr; cptr q, s; is_fired = FALSE; /* not fired yet */ @@ -3302,7 +3262,10 @@ void do_cmd_fire(void) q = _("どれを撃ちますか? ", "Fire which item? "); s = _("発射されるアイテムがありません。", "You have nothing to fire."); - if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR))) + + + ammo_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR)); + if (!ammo_ptr) { flush(); return; @@ -3357,7 +3320,6 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) object_type forge; object_type *q_ptr; - object_type *o_ptr; bool hit_body = FALSE; @@ -3391,7 +3353,8 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) item_tester_hook = item_tester_hook_boomerang; q = _("どの武器を投げますか? ", "Throw which item? "); s = _("投げる武器がない。", "You have nothing to throw."); - if (!get_item(&item, q, s, (USE_EQUIP))) + o_ptr = choose_object(&item, q, s, (USE_EQUIP)); + if (!o_ptr) { flush(); return FALSE; @@ -3404,23 +3367,14 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) { q = _("どのアイテムを投げますか? ", "Throw which item? "); s = _("投げるアイテムがない。", "You have nothing to throw."); - if (!get_item(&item, q, s, (USE_INVEN | USE_FLOOR | USE_EQUIP))) + o_ptr = choose_object(&item, q, s, (USE_INVEN | USE_FLOOR | USE_EQUIP)); + if (!o_ptr) { flush(); return FALSE; } } - /* Access the item (if in the pack) */ - if (item >= 0) - { - o_ptr = &inventory[item]; - } - else - { - o_ptr = &o_list[0 - item]; - } - /* Item is cursed */ if (object_is_cursed(o_ptr) && (item >= INVEN_RARM)) { @@ -3440,8 +3394,6 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) } } - - /* Get local object */ q_ptr = &forge; /* Obtain a local object */ @@ -3537,8 +3489,6 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) y = p_ptr->y; x = p_ptr->x; - - /* Hack -- Handle stuff */ handle_stuff(); if ((p_ptr->pclass == CLASS_NINJA) && ((q_ptr->tval == TV_SPIKE) || ((have_flag(flgs, TR_THROW)) && (q_ptr->tval == TV_SWORD)))) shuriken = TRUE; @@ -3634,10 +3584,7 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) else { char m_name[80]; - - /* Get "the monster" or "it" */ monster_desc(m_name, m_ptr, 0); - msg_format(_("%sが%sに命中した。", "The %s hits %s."), o_name, m_name); if (m_ptr->ml) @@ -3692,7 +3639,7 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) tdam, m_ptr->hp - tdam, m_ptr->maxhp, m_ptr->max_maxhp); /* Hit the monster, check for death */ - if (mon_take_hit(c_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_ptr(m_ptr)))) + if (mon_take_hit(c_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_idx(m_ptr)))) { /* Dead monster */ } @@ -3706,16 +3653,11 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) if ((tdam > 0) && !object_is_potion(q_ptr)) anger_monster(m_ptr); - /* Take note */ if (fear && m_ptr->ml) { - char m_name[80]; - sound(SOUND_FLEE); - - /* Get the monster name (or "it") */ + char m_name[80]; monster_desc(m_name, m_ptr, 0); - msg_format(_("%^sは恐怖して逃げ出した!", "%^s flees in terror!"), m_name); } } @@ -3737,8 +3679,7 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) { j = 100; - if (!(summon_named_creature(0, y, x, q_ptr->pval, - !(object_is_cursed(q_ptr)) ? PM_FORCE_PET : 0L))) + if (!(summon_named_creature(0, y, x, q_ptr->pval, !(object_is_cursed(q_ptr)) ? PM_FORCE_PET : 0L))) msg_print(_("人形は捻じ曲がり砕け散ってしまった!", "The Figurine writhes and then shatters.")); else if (object_is_cursed(q_ptr)) msg_print(_("これはあまり良くない気がする。", "You have a bad feeling about this.")); @@ -3851,15 +3792,8 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) /* Increment the equip counter by hand */ equip_cnt++; - /* Recalculate bonuses */ - p_ptr->update |= (PU_BONUS); - /* Recalculate torch */ - p_ptr->update |= (PU_TORCH); - - /* Recalculate mana XXX */ - p_ptr->update |= (PU_MANA); - + p_ptr->update |= (PU_BONUS | PU_TORCH | PU_MANA); p_ptr->window |= (PW_EQUIP); } else @@ -3874,17 +3808,14 @@ bool do_cmd_throw(int mult, bool boomerang, OBJECT_IDX shuriken) calc_android_exp(); } - /* Drop (or break) near that location */ if (do_drop) { if (cave_have_flag_bold(y, x, FF_PROJECT)) { - /* Drop (or break) near that location */ (void)drop_near(q_ptr, j, y, x); } else { - /* Drop (or break) near that location */ (void)drop_near(q_ptr, j, prev_y, prev_x); } } @@ -3911,17 +3842,15 @@ static POSITION temp2_y[MAX_SHORT]; void forget_travel_flow(void) { POSITION x, y; - - /* Check the entire dungeon */ + /* Check the entire dungeon / Forget the old data */ for (y = 0; y < cur_hgt; y++) { for (x = 0; x < cur_wid; x++) { - /* Forget the old data */ + travel.cost[y][x] = MAX_SHORT; } } - travel.y = travel.x = 0; }