X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fracial.c;h=0121789bf5828e709c4e9faca27513f611db84a1;hb=311ed4ec5e3d9a61177c71d0652e1031e2c4a161;hp=8862858826dee40d87074986a55dcf1ef8a04d68;hpb=c3d4983e61983b8c6dac35c73abaab586cd9d020;p=hengband%2Fhengband.git diff --git a/src/racial.c b/src/racial.c index 886285882..0121789bf 100644 --- a/src/racial.c +++ b/src/racial.c @@ -114,8 +114,28 @@ static bool do_cmd_archer(void) y = py + ddy[dir]; x = px + ddx[dir]; c_ptr = &cave[y][x]; - if (c_ptr->feat == FEAT_RUBBLE) + + if (!have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_CAN_DIG)) + { +#ifdef JP + msg_print("¤½¤³¤Ë¤Ï´äÀФ¬¤Ê¤¤¡£"); +#else + msg_print("You need pile of rubble."); +#endif + return FALSE; + } + else if (!cave_have_flag_grid(c_ptr, FF_CAN_DIG) || !cave_have_flag_grid(c_ptr, FF_HURT_ROCK)) { +#ifdef JP + msg_print("¹Å¤¹¤®¤ÆÊø¤»¤Ê¤«¤Ã¤¿¡£"); +#else + msg_print("You failed to make ammo."); +#endif + } + else + { + s16b slot; + /* Get local object */ q_ptr = &forge; @@ -127,34 +147,30 @@ static bool do_cmd_archer(void) apply_magic(q_ptr, p_ptr->lev, AM_NO_FIXED_ART); q_ptr->discount = 99; - (void)inven_carry(q_ptr); + slot = inven_carry(q_ptr); object_desc(o_name, q_ptr, 0); #ifdef JP - msg_format("´äÀФòºï¤Ã¤Æ%s¤òºî¤Ã¤¿¡£",o_name); + msg_format("%s¤òºî¤Ã¤¿¡£", o_name); #else msg_print("You make some ammo."); #endif - (void)wall_to_mud(dir); - p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MONSTERS | PU_MON_LITE); - p_ptr->window |= (PW_OVERHEAD); - } - else - { -#ifdef JP - msg_print("¤½¤³¤Ë¤Ï´äÀФ¬¤Ê¤¤¡£"); -#else - msg_print("You need pile of rubble."); -#endif + /* Auto-inscription */ + if (slot >= 0) autopick_alter_item(slot, FALSE); + + /* Destroy the wall */ + cave_alter_feat(y, x, FF_HURT_ROCK); + + p_ptr->update |= (PU_FLOW); } } /**********Create arrows*********/ else if (ext == 2) { int item; - cptr q, s; + s16b slot; item_tester_hook = item_tester_hook_convertible; @@ -178,7 +194,7 @@ static bool do_cmd_archer(void) else { q_ptr = &o_list[0 - item]; - } + } /* Get local object */ q_ptr = &forge; @@ -211,14 +227,18 @@ static bool do_cmd_archer(void) floor_item_describe(0 - item); floor_item_optimize(0 - item); } - (void)inven_carry(q_ptr); + + slot = inven_carry(q_ptr); + + /* Auto-inscription */ + if (slot >= 0) autopick_alter_item(slot, FALSE); } /**********Create bolts*********/ else if (ext == 3) { int item; - cptr q, s; + s16b slot; item_tester_hook = item_tester_hook_convertible; @@ -276,7 +296,10 @@ static bool do_cmd_archer(void) floor_item_optimize(0 - item); } - (void)inven_carry(q_ptr); + slot = inven_carry(q_ptr); + + /* Auto-inscription */ + if (slot >= 0) autopick_alter_item(slot, FALSE); } return TRUE; } @@ -327,7 +350,7 @@ s = " } - if (!object_known_p(o_ptr)) + if (!object_is_known(o_ptr)) { #ifdef JP msg_print("´ÕÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¼è¤ê¹þ¤á¤Ê¤¤¡£"); @@ -408,6 +431,41 @@ s = " } +static bool can_do_cmd_cast(void) +{ + if (dun_level && (d_info[dungeon_type].flags1 & DF1_NO_MAGIC)) + { +#ifdef JP + msg_print("¥À¥ó¥¸¥ç¥ó¤¬ËâË¡¤òµÛ¼ý¤·¤¿¡ª"); +#else + msg_print("The dungeon absorbs all attempted magic!"); +#endif + msg_print(NULL); + return FALSE; + } + else if (p_ptr->anti_magic) + { +#ifdef JP + msg_print("È¿ËâË¡¥Ð¥ê¥¢¤¬ËâË¡¤ò¼ÙË⤷¤¿¡ª"); +#else + msg_print("An anti-magic shell disrupts your magic!"); +#endif + return FALSE; + } + else if (p_ptr->shero) + { +#ifdef JP + msg_format("¶¸Àï»Î²½¤·¤Æ¤¤¤ÆƬ¤¬²ó¤é¤Ê¤¤¡ª"); +#else + msg_format("You cannot think directly!"); +#endif + return FALSE; + } + else + return TRUE; +} + + static bool choose_kamae(void) { char choice; @@ -459,7 +517,7 @@ static bool choose_kamae(void) screen_load(); return FALSE; } - else if ((choice == 'a') || (choice == 'A') || (choice == ESCAPE)) + else if ((choice == 'a') || (choice == 'A')) { if (p_ptr->action == ACTION_KAMAE) { @@ -597,7 +655,7 @@ static bool choose_kata(void) screen_load(); return FALSE; } - else if ((choice == 'a') || (choice == 'A') || (choice == ESCAPE)) + else if ((choice == 'a') || (choice == 'A')) { if (p_ptr->action == ACTION_KATA) { @@ -896,7 +954,7 @@ static bool cmd_racial_power_aux(s32b command) #else msg_print("You are failed to run away."); #endif - else teleport_player(30); + else teleport_player(30, 0L); } else { @@ -998,13 +1056,20 @@ static bool cmd_racial_power_aux(s32b command) #endif return FALSE; } + if (p_ptr->riding) + { +#ifdef JP + msg_print("¾èÇÏÃæ¤Ï¤Ç¤­¤Þ¤»¤ó¡£"); +#else + msg_print("You need to get off a pet."); +#endif + return FALSE; + } if (command == -3) { - if (choose_kamae()) energy_use = 100; - else energy_use = 0; + if (!choose_kamae()) return FALSE; p_ptr->update |= (PU_BONUS); - p_ptr->redraw |= (PR_ARMOR); } else if (command == -4) { @@ -1127,10 +1192,11 @@ static bool cmd_racial_power_aux(s32b command) } case CLASS_RED_MAGE: { + if (!can_do_cmd_cast()) return FALSE; handle_stuff(); do_cmd_cast(); handle_stuff(); - if (!p_ptr->paralyzed) + if (!p_ptr->paralyzed && can_do_cmd_cast()) do_cmd_cast(); break; } @@ -1176,7 +1242,7 @@ static bool cmd_racial_power_aux(s32b command) } else if (command == -4) { - if (!buki_motteruka(INVEN_RARM)) + if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM)) { #ifdef JP msg_print("Éð´ï¤ò»ý¤¿¤Ê¤¤¤È¤¤¤±¤Þ¤»¤ó¡£"); @@ -1185,10 +1251,8 @@ static bool cmd_racial_power_aux(s32b command) #endif return FALSE; } - if (choose_kata()) energy_use = 100; - else energy_use = 0; + if (!choose_kata()) return FALSE; p_ptr->update |= (PU_BONUS); - p_ptr->redraw |= (PR_ARMOR); } break; } @@ -1343,6 +1407,7 @@ static bool cmd_racial_power_aux(s32b command) { int type = (one_in_(2) ? GF_NETHER : GF_FIRE); if (!get_aim_dir(&dir)) return FALSE; + if (music_singing_any()) stop_singing(); #ifdef JP msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê")); #else @@ -1373,6 +1438,8 @@ static bool cmd_racial_power_aux(s32b command) x = px + ddx[dir]; c_ptr = &cave[y][x]; + if (music_singing_any()) stop_singing(); + if (!c_ptr->m_idx) { #ifdef JP @@ -1469,7 +1536,7 @@ static bool cmd_racial_power_aux(s32b command) msg_print("Blink!"); #endif - teleport_player(10); + teleport_player(10, 0L); break; case RACE_HALF_ORC: @@ -1578,6 +1645,7 @@ static bool cmd_racial_power_aux(s32b command) case RACE_YEEK: if (!get_aim_dir(&dir)) return FALSE; + if (music_singing_any()) stop_singing(); #ifdef JP msg_print("¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤ò¾å¤²¤¿¡ª"); #else @@ -1589,6 +1657,7 @@ static bool cmd_racial_power_aux(s32b command) case RACE_KLACKON: if (!get_aim_dir(&dir)) return FALSE; + if (music_singing_any()) stop_singing(); #ifdef JP msg_print("»À¤òÅǤ¤¤¿¡£"); #else @@ -1829,6 +1898,8 @@ static bool cmd_racial_power_aux(s32b command) } } + if (music_singing_any()) stop_singing(); + #ifdef JP msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", Type_desc); #else @@ -1911,6 +1982,8 @@ static bool cmd_racial_power_aux(s32b command) x = px + ddx[dir]; c_ptr = &cave[y][x]; + if (music_singing_any()) stop_singing(); + if (!c_ptr->m_idx) { #ifdef JP @@ -1961,6 +2034,7 @@ static bool cmd_racial_power_aux(s32b command) case RACE_SPECTRE: if (!get_aim_dir(&dir)) return FALSE; + if (music_singing_any()) stop_singing(); #ifdef JP msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤¶«¤ÓÀ¼¤ò¤¢¤²¤¿¡ª"); #else @@ -1985,6 +2059,7 @@ static bool cmd_racial_power_aux(s32b command) { int type = (one_in_(2) ? GF_NETHER : GF_FIRE); if (!get_aim_dir(&dir)) return FALSE; + if (music_singing_any()) stop_singing(); #ifdef JP msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê")); #else @@ -2044,7 +2119,7 @@ static bool cmd_racial_power_aux(s32b command) #else msg_print("You fire a rocket."); #endif - fire_ball(GF_ROCKET, dir, plev * 5, 2); + fire_rocket(GF_ROCKET, dir, plev * 5, 2); } break;