X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fracial.c;h=c129db94077c0c0b883920ca0ca3729b71b32600;hb=827b58461e81870e2d93e290078b8e9e0649d580;hp=611ae5e88242bdbcad7cfc1ac969e1b4fe94ed69;hpb=7e8a60405c78f7f8bc938aa1e0dc6208dda57c46;p=hengband%2Fhengband.git diff --git a/src/racial.c b/src/racial.c index 611ae5e88..c129db940 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, TRUE, 2); + 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; @@ -192,7 +208,7 @@ static bool do_cmd_archer(void) q_ptr->discount = 99; - object_desc(o_name, q_ptr, TRUE, 2); + object_desc(o_name, q_ptr, 0); #ifdef JP msg_format("%s¤òºî¤Ã¤¿¡£", o_name); #else @@ -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; @@ -256,7 +276,7 @@ static bool do_cmd_archer(void) q_ptr->discount = 99; - object_desc(o_name, q_ptr, TRUE, 2); + object_desc(o_name, q_ptr, 0); #ifdef JP msg_format("%s¤òºî¤Ã¤¿¡£", o_name); #else @@ -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("´ÕÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¼è¤ê¹þ¤á¤Ê¤¤¡£"); @@ -380,7 +403,7 @@ s = " } } - object_desc(o_name, o_ptr, TRUE, 3); + object_desc(o_name, o_ptr, 0); /* Message */ #ifdef JP msg_format("%s¤ÎËâÎϤò¼è¤ê¹þ¤ó¤À¡£", o_name); @@ -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) { @@ -824,6 +882,14 @@ static int racial_aux(power_desc_type *pd_ptr) } + +void ratial_stop_mouth() +{ + if (music_singing_any()) stop_singing(); + if (hex_spelling_any()) stop_hex_spell_all(); +} + + static bool cmd_racial_power_aux(s32b command) { s16b plev = p_ptr->lev; @@ -859,8 +925,15 @@ static bool cmd_racial_power_aux(s32b command) } break; } - case CLASS_MAGE: case CLASS_HIGH_MAGE: + if (p_ptr->realm1 == REALM_HEX) + { + bool retval = stop_hex_spell(); + if (retval) energy_use = 10; + return (retval); + } + case CLASS_MAGE: + /* case CLASS_HIGH_MAGE: */ case CLASS_SORCERER: { if (!eat_magic(p_ptr->lev * 2)) return FALSE; @@ -896,7 +969,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 { @@ -911,6 +984,7 @@ static bool cmd_racial_power_aux(s32b command) break; } case CLASS_RANGER: + case CLASS_SNIPER: { #ifdef JP msg_print("Ũ¤òÄ´ºº¤·¤¿..."); @@ -980,7 +1054,7 @@ static bool cmd_racial_power_aux(s32b command) #else msg_print("You glare nearby monsters..."); #endif - slow_monsters(); + slow_monsters(p_ptr->lev); stun_monsters(p_ptr->lev * 4); confuse_monsters(p_ptr->lev * 4); turn_monsters(p_ptr->lev * 4); @@ -989,7 +1063,7 @@ static bool cmd_racial_power_aux(s32b command) } case CLASS_MONK: { - if (empty_hands(TRUE) < 2) + if (!(empty_hands(TRUE) & EMPTY_HAND_RARM)) { #ifdef JP msg_print("ÁǼꤸ¤ã¤Ê¤¤¤È¤Ç¤­¤Þ¤»¤ó¡£"); @@ -998,13 +1072,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) { @@ -1113,7 +1194,12 @@ static bool cmd_racial_power_aux(s32b command) } case CLASS_MAGIC_EATER: { - if (!gain_magic()) return FALSE; + if (command == -3) { + if (!gain_magic()) return FALSE; + } else if (command == -4) { + if (!can_do_cmd_cast()) return FALSE; + if (!do_cmd_magic_eater(FALSE, TRUE)) return FALSE; + } break; } case CLASS_BARD: @@ -1127,10 +1213,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 +1263,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 +1272,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; } @@ -1282,19 +1367,8 @@ static bool cmd_racial_power_aux(s32b command) { if (command == -3) { - int x, y; - for (x = 0; x < cur_wid; x++) - { - for (y = 0; y < cur_hgt; y++) - { - if (is_mirror_grid(&cave[y][x])) - { - remove_mirror(y, x); - project(0, 2, y, x, p_ptr->lev / 2 + 5, GF_SHARDS, - (PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_JUMP | PROJECT_NO_HANGEKI), -1); - } - } - } + /* Explode all mirrors */ + remove_all_mirrors(TRUE); } else if (command == -4) { @@ -1338,11 +1412,35 @@ static bool cmd_racial_power_aux(s32b command) } case CLASS_NINJA: { - if (p_ptr->action == ACTION_HAYAGAKE) set_action(ACTION_NONE); - else set_action(ACTION_HAYAGAKE); + if (p_ptr->action == ACTION_HAYAGAKE) + { + set_action(ACTION_NONE); + } + else + { + cave_type *c_ptr = &cave[py][px]; + feature_type *f_ptr = &f_info[c_ptr->feat]; + + if (!have_flag(f_ptr->flags, FF_PROJECT) || + (!p_ptr->levitation && have_flag(f_ptr->flags, FF_DEEP))) + { +#ifdef JP + msg_print("¤³¤³¤Ç¤ÏÁÇÁ᤯ư¤±¤Ê¤¤¡£"); +#else + msg_print("You cannot run in here."); +#endif + } + else + { + set_action(ACTION_HAYAGAKE); + } + } + + energy_use = 0; break; } + } } else if (p_ptr->mimic_form) @@ -1354,6 +1452,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; + ratial_stop_mouth(); #ifdef JP msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê")); #else @@ -1384,6 +1483,8 @@ static bool cmd_racial_power_aux(s32b command) x = px + ddx[dir]; c_ptr = &cave[y][x]; + ratial_stop_mouth(); + if (!c_ptr->m_idx) { #ifdef JP @@ -1480,7 +1581,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: @@ -1563,13 +1664,7 @@ static bool cmd_racial_power_aux(s32b command) case RACE_HALF_GIANT: if (!get_aim_dir(&dir)) return FALSE; -#ifdef JP - msg_print("ÀФÎÊɤò᤭¤Ä¤±¤¿¡£"); -#else - msg_print("You bash at a stone wall."); -#endif - - (void)wall_to_mud(dir); + (void)wall_to_mud(dir, 20 + randint1(30)); break; case RACE_HALF_TITAN: @@ -1595,6 +1690,7 @@ static bool cmd_racial_power_aux(s32b command) case RACE_YEEK: if (!get_aim_dir(&dir)) return FALSE; + ratial_stop_mouth(); #ifdef JP msg_print("¿È¤ÎÌÓ¤â¤è¤À¤Ä¶«¤ÓÀ¼¤ò¾å¤²¤¿¡ª"); #else @@ -1606,6 +1702,7 @@ static bool cmd_racial_power_aux(s32b command) case RACE_KLACKON: if (!get_aim_dir(&dir)) return FALSE; + ratial_stop_mouth(); #ifdef JP msg_print("»À¤òÅǤ¤¤¿¡£"); #else @@ -1846,6 +1943,8 @@ static bool cmd_racial_power_aux(s32b command) } } + ratial_stop_mouth(); + #ifdef JP msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£", Type_desc); #else @@ -1928,6 +2027,8 @@ static bool cmd_racial_power_aux(s32b command) x = px + ddx[dir]; c_ptr = &cave[y][x]; + ratial_stop_mouth(); + if (!c_ptr->m_idx) { #ifdef JP @@ -1978,6 +2079,7 @@ static bool cmd_racial_power_aux(s32b command) case RACE_SPECTRE: if (!get_aim_dir(&dir)) return FALSE; + ratial_stop_mouth(); #ifdef JP msg_print("¤¢¤Ê¤¿¤Ï¤ª¤É¤í¤ª¤É¤í¤·¤¤¶«¤ÓÀ¼¤ò¤¢¤²¤¿¡ª"); #else @@ -1995,13 +2097,14 @@ static bool cmd_racial_power_aux(s32b command) #endif if (plev < 25) sleep_monsters_touch(); - else (void)sleep_monsters(); + else (void)sleep_monsters(plev); break; case RACE_DEMON: { int type = (one_in_(2) ? GF_NETHER : GF_FIRE); if (!get_aim_dir(&dir)) return FALSE; + ratial_stop_mouth(); #ifdef JP msg_format("¤¢¤Ê¤¿¤Ï%s¤Î¥Ö¥ì¥¹¤òÅǤ¤¤¿¡£",((type == GF_NETHER) ? "ÃϹö" : "²Ð±ê")); #else @@ -2012,7 +2115,7 @@ static bool cmd_racial_power_aux(s32b command) } break; - case RACE_KUTA: + case RACE_KUTAR: (void)set_tsubureru(randint1(20) + 30, FALSE); break; @@ -2061,7 +2164,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; @@ -2137,8 +2240,23 @@ strcpy(power_desc[num].name, " power_desc[num++].number = -3; break; } - case CLASS_MAGE: case CLASS_HIGH_MAGE: + if (p_ptr->realm1 == REALM_HEX) + { +#ifdef JP + strcpy(power_desc[num].name, "±Ó¾§¤ò¤ä¤á¤ë"); +#else + strcpy(power_desc[num].name, "Stop spelling"); +#endif + power_desc[num].level = 1; + power_desc[num].cost = 0; + power_desc[num].stat = A_INT; + power_desc[num].fail = 0; + power_desc[num++].number = -3; + break; + } + case CLASS_MAGE: + /* case CLASS_HIGH_MAGE: */ case CLASS_SORCERER: { #ifdef JP @@ -2202,6 +2320,7 @@ strcpy(power_desc[num].name, " break; } case CLASS_RANGER: + case CLASS_SNIPER: { #ifdef JP strcpy(power_desc[num].name, "¥â¥ó¥¹¥¿¡¼Ä´ºº"); @@ -2426,6 +2545,13 @@ strcpy(power_desc[num].name, " power_desc[num].stat = A_INT; power_desc[num].fail = 0; power_desc[num++].number = -3; + + strcpy(power_desc[num].name, _("¶¯ÎÏȯư", "Powerful Activation")); + power_desc[num].level = 10; + power_desc[num].cost = 10 + (lvl - 10) / 2; + power_desc[num].stat = A_INT; + power_desc[num].fail = 0; + power_desc[num++].number = -4; break; } case CLASS_BARD: @@ -2968,7 +3094,7 @@ sprintf(power_desc[num].name, " power_desc[num].fail = 20; power_desc[num++].number = -1; break; - case RACE_KUTA: + case RACE_KUTAR: #ifdef JP strcpy(power_desc[num].name, "²£¤Ë¿­¤Ó¤ë"); #else