X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fxtra2.c;h=616ceebb1489c5def88bf35e3e9dc15f9b056910;hb=726f216d5588550aed8640845ca131e63955ad9b;hp=ba279817b8cc15790e5b28573d657f5f8f814eaf;hpb=eabbe110bbd707289f6d9228c5fbd74d6ba65d49;p=hengband%2Fhengband.git diff --git a/src/xtra2.c b/src/xtra2.c index ba279817b..616ceebb1 100644 --- a/src/xtra2.c +++ b/src/xtra2.c @@ -14,6 +14,8 @@ #include "angband.h" #include "cmd-pet.h" #include "object-curse.h" +#include "monsterrace-hook.h" +#include "objectkind-hook.h" #define REWARD_CHANCE 10 @@ -49,8 +51,6 @@ void check_experience(void) /* Redraw experience */ p_ptr->redraw |= (PR_EXP); - - /* Handle stuff */ handle_stuff(); @@ -60,16 +60,9 @@ void check_experience(void) { /* Lose a level */ p_ptr->lev--; - - /* Update some stuff */ p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); - - /* Redraw some stuff */ p_ptr->redraw |= (PR_LEV | PR_TITLE); - p_ptr->window |= (PW_PLAYER); - - /* Handle stuff */ handle_stuff(); } @@ -104,18 +97,12 @@ void check_experience(void) msg_format(_("レベル %d にようこそ。", "Welcome to level %d."), p_ptr->lev); - /* Update some stuff */ p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); - - /* Redraw some stuff */ p_ptr->redraw |= (PR_LEV | PR_TITLE | PR_EXP); - p_ptr->window |= (PW_PLAYER | PW_SPELL | PW_INVEN); /* HPとMPの上昇量を表示 */ level_up = 1; - - /* Handle stuff */ handle_stuff(); level_up = 0; @@ -131,37 +118,22 @@ void check_experience(void) int n; char tmp[32]; -#ifdef JP cnv_stat(p_ptr->stat_max[0], tmp); - prt(format(" a) 腕力 (現在値 %s)", tmp), 2, 14); + prt(format(_(" a) 腕力 (現在値 %s)", " a) Str (cur %s)"), tmp), 2, 14); cnv_stat(p_ptr->stat_max[1], tmp); - prt(format(" b) 知能 (現在値 %s)", tmp), 3, 14); + prt(format(_(" b) 知能 (現在値 %s)", " a) Int (cur %s)"), tmp), 3, 14); cnv_stat(p_ptr->stat_max[2], tmp); - prt(format(" c) 賢さ (現在値 %s)", tmp), 4, 14); + prt(format(_(" c) 賢さ (現在値 %s)", " a) Wis (cur %s)"), tmp), 4, 14); cnv_stat(p_ptr->stat_max[3], tmp); - prt(format(" d) 器用 (現在値 %s)", tmp), 5, 14); + prt(format(_(" d) 器用 (現在値 %s)", " a) Dex (cur %s)"), tmp), 5, 14); cnv_stat(p_ptr->stat_max[4], tmp); - prt(format(" e) 耐久 (現在値 %s)", tmp), 6, 14); + prt(format(_(" e) 耐久 (現在値 %s)", " a) Con (cur %s)"), tmp), 6, 14); cnv_stat(p_ptr->stat_max[5], tmp); - prt(format(" f) 魅力 (現在値 %s)", tmp), 7, 14); - prt("", 8, 14); - prt(" どの能力値を上げますか?", 1, 14); -#else - cnv_stat(p_ptr->stat_max[0], tmp); - prt(format(" a) Str (cur %s)", tmp), 2, 14); - cnv_stat(p_ptr->stat_max[1], tmp); - prt(format(" b) Int (cur %s)", tmp), 3, 14); - cnv_stat(p_ptr->stat_max[2], tmp); - prt(format(" c) Wis (cur %s)", tmp), 4, 14); - cnv_stat(p_ptr->stat_max[3], tmp); - prt(format(" d) Dex (cur %s)", tmp), 5, 14); - cnv_stat(p_ptr->stat_max[4], tmp); - prt(format(" e) Con (cur %s)", tmp), 6, 14); - cnv_stat(p_ptr->stat_max[5], tmp); - prt(format(" f) Chr (cur %s)", tmp), 7, 14); + prt(format(_(" f) 魅力 (現在値 %s)", " a) Chr (cur %s)"), tmp), 7, 14); + prt("", 8, 14); - prt(" Which stat do you want to raise?", 1, 14); -#endif + prt(_(" どの能力値を上げますか?", " Which stat do you want to raise?"), 1, 14); + while(1) { choice = inkey(); @@ -196,15 +168,9 @@ void check_experience(void) level_reward = FALSE; } - /* Update some stuff */ p_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); - - /* Redraw some stuff */ p_ptr->redraw |= (PR_LEV | PR_TITLE); - p_ptr->window |= (PW_PLAYER | PW_SPELL); - - /* Handle stuff */ handle_stuff(); } @@ -240,151 +206,6 @@ static int get_coin_type(MONRACE_IDX r_idx) } -/*! - * @brief オブジェクトがクロークかどうかを判定する / - * Hack -- determine if a template is Cloak - * @param k_idx 判定したいオブジェクトのベースアイテムID - * @return オブジェクトがクロークならばTRUEを返す - */ -static bool kind_is_cloak(KIND_OBJECT_IDX k_idx) -{ - object_kind *k_ptr = &k_info[k_idx]; - - /* Analyze the item type */ - if (k_ptr->tval == TV_CLOAK) - { - return (TRUE); - } - - /* Assume not good */ - return (FALSE); -} - - -/*! - * @brief オブジェクトが竿状武器かどうかを判定する / - * Hack -- determine if a template is Polearm - * @param k_idx 判定したいオブジェクトのベースアイテムID - * @return オブジェクトが竿状武器ならばTRUEを返す - */ -static bool kind_is_polearm(KIND_OBJECT_IDX k_idx) -{ - object_kind *k_ptr = &k_info[k_idx]; - - /* Analyze the item type */ - if (k_ptr->tval == TV_POLEARM) - { - return (TRUE); - } - - /* Assume not good */ - return (FALSE); -} - - -/*! - * @brief オブジェクトが剣かどうかを判定する / - * Hack -- determine if a template is Sword - * @param k_idx 判定したいオブジェクトのベースアイテムID - * @return オブジェクトが剣ならばTRUEを返す - */ -static bool kind_is_sword(KIND_OBJECT_IDX k_idx) -{ - object_kind *k_ptr = &k_info[k_idx]; - - /* Analyze the item type */ - if ((k_ptr->tval == TV_SWORD) && (k_ptr->sval > 2)) - { - return (TRUE); - } - - /* Assume not good */ - return (FALSE); -} - - -/*! - * @brief オブジェクトが魔法書かどうかを判定する / - * Hack -- determine if a template is Book - * @param k_idx 判定したいオブジェクトのベースアイテムID - * @return オブジェクトが魔法書ならばTRUEを返す - */ -static bool kind_is_book(KIND_OBJECT_IDX k_idx) -{ - object_kind *k_ptr = &k_info[k_idx]; - - /* Analyze the item type */ - if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK)) - { - return (TRUE); - } - - /* Assume not good */ - return (FALSE); -} - - -/*! - * @brief オブジェクトがベースアイテム時点でGOODかどうかを判定する / - * Hack -- determine if a template is Good book - * @param k_idx 判定したいオブジェクトのベースアイテムID - * @return オブジェクトがベースアイテム時点でGOODなアイテムならばTRUEを返す - */ -static bool kind_is_good_book(KIND_OBJECT_IDX k_idx) -{ - object_kind *k_ptr = &k_info[k_idx]; - - /* Analyze the item type */ - if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1)) - { - return (TRUE); - } - - /* Assume not good */ - return (FALSE); -} - - -/*! - * @brief オブジェクトが鎧かどうかを判定する / - * Hack -- determine if a template is Armor - * @param k_idx 判定したいオブジェクトのベースアイテムID - * @return オブジェクトが鎧ならばTRUEを返す - */ -static bool kind_is_armor(KIND_OBJECT_IDX k_idx) -{ - object_kind *k_ptr = &k_info[k_idx]; - - /* Analyze the item type */ - if (k_ptr->tval == TV_HARD_ARMOR) - { - return (TRUE); - } - - /* Assume not good */ - return (FALSE); -} - - -/*! - * @brief オブジェクトが打撃武器かどうかを判定する / - * Hack -- determine if a template is hafted weapon - * @param k_idx 判定したいオブジェクトのベースアイテムID - * @return オブジェクトが打撃武器ならばTRUEを返す - */ -static bool kind_is_hafted(KIND_OBJECT_IDX k_idx) -{ - object_kind *k_ptr = &k_info[k_idx]; - - /* Analyze the item type */ - if (k_ptr->tval == TV_HAFTED) - { - return (TRUE); - } - - /* Assume not good */ - return (FALSE); -} /*! * @brief クエストを達成状態にする / @@ -460,7 +281,6 @@ void check_quest_completion(monster_type *m_ptr) object_type forge; object_type *o_ptr; - /* Get the location */ y = m_ptr->fy; x = m_ptr->fx; @@ -646,10 +466,7 @@ void check_quest_completion(monster_type *m_ptr) for (i = 0; i < (dun_level / 15)+1; i++) { - /* Get local object */ o_ptr = &forge; - - /* Wipe the object */ object_wipe(o_ptr); /* Make a great object */ @@ -689,10 +506,11 @@ void check_find_art_quest_completion(object_type *o_ptr) * @param r_ptr 撃破されたモンスターの種族情報を持つ構造体の参照ポインタ * @return 撃破されたモンスターの述語 */ -cptr extract_note_dies(monster_race *r_ptr) +cptr extract_note_dies(MONRACE_IDX r_idx) { + monster_race *r_ptr = &r_info[r_idx]; /* Some monsters get "destroyed" */ - if (!monster_living(r_ptr)) + if (!monster_living(r_idx)) { int i; @@ -730,15 +548,14 @@ cptr extract_note_dies(monster_race *r_ptr) */ void monster_death(MONSTER_IDX m_idx, bool drop_item) { - int i, j, y, x; + int i, j; + POSITION y, x; int dump_item = 0; int dump_gold = 0; - int number = 0; monster_type *m_ptr = &m_list[m_idx]; - monster_race *r_ptr = &r_info[m_ptr->r_idx]; bool visible = ((m_ptr->ml && !p_ptr->image) || (r_ptr->flags1 & RF1_UNIQUE)); @@ -766,7 +583,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) p_ptr->update |= (PU_MON_LITE); } - /* Get the location */ y = m_ptr->fy; x = m_ptr->fx; @@ -819,12 +635,10 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (arena_info[p_ptr->arena_number].tval) { - /* Get local object */ q_ptr = &forge; /* Prepare to make a prize */ object_prep(q_ptr, lookup_kind(arena_info[p_ptr->arena_number].tval, arena_info[p_ptr->arena_number].sval)); - apply_magic(q_ptr, object_level, AM_NO_FIXED_ART); /* Drop it in the dungeon */ @@ -882,8 +696,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (!one_in_(5)) corpse = TRUE; } } - - /* Get local object */ q_ptr = &forge; /* Prepare to make an object */ @@ -913,7 +725,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) for (i = 0; i < 2; i++) { - int wy = y, wx = x; + POSITION wy = y, wx = x; bool pet = is_pet(m_ptr); BIT_FLAGS mode = 0L; @@ -921,13 +733,11 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode)) { - if (player_can_see_bold(wy, wx)) - notice = TRUE; + if (player_can_see_bold(wy, wx)) notice = TRUE; } } - if (notice) - msg_print(_("ピンク・ホラーは分裂した!", "The Pink horror divides!")); + if (notice) msg_print(_("ピンク・ホラーは分裂した!", "The Pink horror divides!")); } break; @@ -935,7 +745,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Bloodletters of Khorne may drop a blade of chaos */ if (drop_chosen_item && (randint1(100) < 15)) { - /* Get local object */ q_ptr = &forge; /* Prepare to make a Blade of Chaos */ @@ -951,10 +760,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) case MON_RAAL: if (drop_chosen_item && (dun_level > 9)) { - /* Get local object */ q_ptr = &forge; - - /* Wipe the object */ object_wipe(q_ptr); /* Activate restriction */ @@ -1057,8 +863,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) case MON_SERPENT: if (!drop_chosen_item) break; - - /* Get local object */ q_ptr = &forge; /* Mega-Hack -- Prepare to make "Grond" */ @@ -1072,8 +876,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); - - /* Get local object */ q_ptr = &forge; /* Mega-Hack -- Prepare to make "Chaos" */ @@ -1092,7 +894,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) case MON_B_DEATH_SWORD: if (drop_chosen_item) { - /* Get local object */ q_ptr = &forge; /* Prepare to make a broken sword */ @@ -1108,7 +909,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (drop_chosen_item && ((m_ptr->r_idx == MON_A_GOLD) || ((m_ptr->r_idx == MON_A_SILVER) && (r_ptr->r_akills % 5 == 0)))) { - /* Get local object */ q_ptr = &forge; /* Prepare to make a Can of Toys */ @@ -1136,10 +936,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) case '(': if (dun_level > 0) { - /* Get local object */ q_ptr = &forge; - - /* Wipe the object */ object_wipe(q_ptr); /* Activate restriction */ @@ -1156,10 +953,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) case '/': if (dun_level > 4) { - /* Get local object */ q_ptr = &forge; - - /* Wipe the object */ object_wipe(q_ptr); /* Activate restriction */ @@ -1176,10 +970,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) case '[': if (dun_level > 19) { - /* Get local object */ q_ptr = &forge; - - /* Wipe the object */ object_wipe(q_ptr); /* Activate restriction */ @@ -1196,10 +987,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) case '\\': if (dun_level > 4) { - /* Get local object */ q_ptr = &forge; - - /* Wipe the object */ object_wipe(q_ptr); /* Activate restriction */ @@ -1216,10 +1004,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) case '|': if (m_ptr->r_idx != MON_STORMBRINGER) { - /* Get local object */ q_ptr = &forge; - - /* Wipe the object */ object_wipe(q_ptr); /* Activate restriction */ @@ -1296,7 +1081,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (k_idx) { - /* Get local object */ q_ptr = &forge; /* Prepare to make a reward */ @@ -1338,10 +1122,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Drop some objects */ for (j = 0; j < number; j++) { - /* Get local object */ q_ptr = &forge; - - /* Wipe the object */ object_wipe(q_ptr); /* Make Gold */ @@ -1568,15 +1349,14 @@ static void get_exp_from_mon(HIT_POINT dam, monster_type *m_ptr) */ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) { - monster_type *m_ptr = &m_list[m_idx]; - monster_race *r_ptr = &r_info[m_ptr->r_idx]; - - monster_type exp_mon; + monster_type *m_ptr = &m_list[m_idx]; + monster_race *r_ptr = &r_info[m_ptr->r_idx]; + monster_type exp_mon; /* Innocent until proven otherwise */ - bool innocent = TRUE, thief = FALSE; - int i; - int expdam; + bool innocent = TRUE, thief = FALSE; + int i; + HIT_POINT expdam; (void)COPY(&exp_mon, m_ptr, monster_type); @@ -1591,7 +1371,6 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH); if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH); - /* Wake it up */ (void)set_monster_csleep(m_idx, 0); /* Hack - Cancel any special player stealth magics. -LM- */ @@ -1603,15 +1382,14 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) /* Genocided by chaos patron */ if (!m_idx) return TRUE; - /* Hurt it */ m_ptr->hp -= dam; - m_ptr->dealt_damage += dam; + if(m_ptr->dealt_damage > m_ptr->max_maxhp * 100) m_ptr->dealt_damage = m_ptr->max_maxhp * 100; + if (p_ptr->wizard) { - msg_format( _("合計%d/%dのダメージを与えた。","You do %d (out of %d) damage."), - m_ptr->dealt_damage, m_ptr->maxhp); + msg_format( _("合計%d/%dのダメージを与えた。","You do %d (out of %d) damage."), m_ptr->dealt_damage, m_ptr->maxhp); } /* It is dead now */ @@ -1710,13 +1488,13 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) /* Dump a message */ if (!get_rnd_line(_("mondeath_j.txt", "mondeath.txt"), m_ptr->r_idx, line_got)) - + { msg_format("%^s %s", m_name, line_got); + } #ifdef WORLD_SCORE if (m_ptr->r_idx == MON_SERPENT) { - /* Make screen dump */ screen_dump = make_screen_dump(); } #endif @@ -1759,8 +1537,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) chg_virtue(V_COMPASSION, -1); } - if ((r_ptr->flags3 & RF3_GOOD) && - ((r_ptr->level) / 10 + (3 * dun_level) >= randint1(100))) + if ((r_ptr->flags3 & RF3_GOOD) && ((r_ptr->level) / 10 + (3 * dun_level) >= randint1(100))) chg_virtue(V_UNLIFE, 1); if (r_ptr->d_char == 'A') @@ -1817,8 +1594,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) { if (r_ptr->flags1 & RF1_UNIQUE) chg_virtue(V_JUSTICE, 3); - else if (1+((r_ptr->level) / 10 + (2 * dun_level)) - >= randint1(100)) + else if (1+((r_ptr->level) / 10 + (2 * dun_level)) >= randint1(100)) chg_virtue(V_JUSTICE, 1); } else if (innocent) @@ -1834,11 +1610,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) if ((r_ptr->flags1 & RF1_UNIQUE) && record_destroy_uniq) { char note_buf[160]; -#ifdef JP - sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? "(クローン)" : ""); -#else - sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? "(Clone)" : ""); -#endif + sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? _("(クローン)", "(Clone)") : ""); do_cmd_write_nikki(NIKKI_UNIQUE, 0, note_buf); } @@ -1866,7 +1638,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) } /* Death by Physical attack -- non-living monster */ - else if (!monster_living(r_ptr)) + else if (!monster_living(m_ptr->r_idx)) { bool explode = FALSE; @@ -1884,7 +1656,7 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON)) msg_format("せっかくだから%sを倒した。", m_name); else -msg_format("%sを倒した。", m_name); + msg_format("%sを倒した。", m_name); #else msg_format("You have destroyed %s.", m_name); #endif @@ -1898,7 +1670,7 @@ msg_format("%sを倒した。", m_name); if ((p_ptr->pseikaku == SEIKAKU_COMBAT) || (inventory[INVEN_BOW].name1 == ART_CRIMSON)) msg_format("せっかくだから%sを葬り去った。", m_name); else -msg_format("%sを葬り去った。", m_name); + msg_format("%sを葬り去った。", m_name); #else msg_format("You have slain %s.", m_name); #endif @@ -1920,18 +1692,13 @@ msg_format("%sを葬り去った。", m_name); monster_death(m_idx, TRUE); /* Mega hack : replace IKETA to BIKETAL */ - if ((m_ptr->r_idx == MON_IKETA) && - !(p_ptr->inside_arena || p_ptr->inside_battle)) + if ((m_ptr->r_idx == MON_IKETA) && !(p_ptr->inside_arena || p_ptr->inside_battle)) { - int dummy_y = m_ptr->fy; - int dummy_x = m_ptr->fx; + POSITION dummy_y = m_ptr->fy; + POSITION dummy_x = m_ptr->fx; BIT_FLAGS mode = 0L; - if (is_pet(m_ptr)) mode |= PM_FORCE_PET; - - /* Delete the monster */ delete_monster_idx(m_idx); - if (summon_named_creature(0, dummy_y, dummy_x, MON_BIKETAL, mode)) { msg_print(_("「ハァッハッハッハ!!私がバイケタルだ!!」", "Uwa-hahaha! *I* am Biketal!")); @@ -1939,7 +1706,6 @@ msg_format("%sを葬り去った。", m_name); } else { - /* Delete the monster */ delete_monster_idx(m_idx); } @@ -1976,8 +1742,7 @@ msg_format("%sを葬り去った。", m_name); * Run (sometimes) if at 10% or less of max hit points, * or (usually) when hit for half its current hit points */ - if ((randint1(10) >= percentage) || - ((dam >= m_ptr->hp) && (randint0(100) < 80))) + if ((randint1(10) >= percentage) || ((dam >= m_ptr->hp) && (randint0(100) < 80))) { /* Hack -- note fear */ (*fear) = TRUE; @@ -1991,22 +1756,6 @@ msg_format("%sを葬り去った。", m_name); #endif -#if 0 - if (p_ptr->riding && (p_ptr->riding == m_idx) && (dam > 0)) - { - char m_name[80]; - - /* Extract monster name */ - monster_desc(m_name, m_ptr, 0); - - if (m_ptr->hp > m_ptr->maxhp/3) dam = (dam + 1) / 2; - if (rakuba((dam > 200) ? 200 : dam, FALSE)) - { - msg_format(_("%^sに振り落とされた!", "%^s has thrown you off!"), m_name); - } - } -#endif - /* Not dead yet */ return (FALSE); } @@ -2037,7 +1786,6 @@ void panel_bounds_center(void) { int wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); panel_row_max = panel_row_min + hgt - 1; @@ -2083,8 +1831,6 @@ void resize_map(void) /* Hack -- update */ handle_stuff(); - - /* Redraw */ Term_redraw(); /* @@ -2108,13 +1854,10 @@ void redraw_window(void) if (!character_dungeon) return; p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER); - p_ptr->window |= (PW_MESSAGE | PW_OVERHEAD | PW_DUNGEON | PW_MONSTER | PW_OBJECT); /* Hack -- update */ handle_stuff(); - - /* Redraw */ Term_redraw(); } @@ -2133,7 +1876,6 @@ bool change_panel(POSITION dy, POSITION dx) POSITION y, x; TERM_LEN wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); /* Apply the motion */ @@ -2160,10 +1902,7 @@ bool change_panel(POSITION dy, POSITION dx) p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - - /* Handle stuff */ handle_stuff(); /* Success */ @@ -2189,7 +1928,6 @@ static bool change_panel_xy(POSITION y, POSITION x) POSITION dy = 0, dx = 0; TERM_LEN wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); if (y < panel_row_min) dy = -1; @@ -2223,7 +1961,6 @@ void verify_panel(void) int max_prow_min; int max_pcol_min; - /* Get size */ get_screen_size(&wid, &hgt); max_prow_min = cur_hgt - hgt; @@ -2300,16 +2037,13 @@ void verify_panel(void) panel_col_min = pcol_min; /* Hack -- optional disturb on "panel change" */ - if (disturb_panel && !center_player) disturb(0, 0); + if (disturb_panel && !center_player) disturb(FALSE, FALSE); /* Recalculate the boundaries */ panel_bounds_center(); p_ptr->update |= (PU_MONSTERS); - - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); } @@ -2320,14 +2054,14 @@ void verify_panel(void) cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode) { monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx]; - bool living; - int perc; + bool living; + int perc; cptr desc; cptr attitude; cptr clone; /* Determine if the monster is "living" */ - living = monster_living(ap_r_ptr); + living = monster_living(m_ptr->ap_r_idx); /* Calculate a health "percentage" */ perc = 100L * m_ptr->hp / m_ptr->maxhp; @@ -2335,55 +2069,29 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode) /* Healthy monsters */ if (m_ptr->hp >= m_ptr->maxhp) { - /* No damage */ -#ifdef JP - desc = living ? "無傷" : "無ダメージ"; -#else - desc = living ? "unhurt" : "undamaged"; -#endif - + desc = living ? _("無傷", "unhurt") : _("無ダメージ", "undamaged"); } else if (perc >= 60) { -#ifdef JP - desc = living ? "軽傷" : "小ダメージ"; -#else - desc = living ? "somewhat wounded" : "somewhat damaged"; -#endif - + desc = living ? _("軽傷", "somewhat wounded") : _("小ダメージ", "somewhat damaged"); } else if (perc >= 25) { -#ifdef JP - desc = living ? "負傷" : "中ダメージ"; -#else - desc = living ? "wounded" : "damaged"; -#endif - + desc = living ? _("負傷", "wounded") : _("中ダメージ", "damaged"); } else if (perc >= 10) { -#ifdef JP - desc = living ? "重傷" : "大ダメージ"; -#else - desc = living ? "badly wounded" : "badly damaged"; -#endif - + desc = living ? _("重傷", "badly wounded") : _("大ダメージ", "badly damaged"); } else { -#ifdef JP - desc = living ? "半死半生" : "倒れかけ"; -#else - desc = living ? "almost dead" : "almost destroyed"; -#endif + desc = living ? _("半死半生", "almost dead") : _("倒れかけ", "almost destroyed"); } - /* Need attitude information? */ if (!(mode & 0x01)) { @@ -2403,7 +2111,6 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode) attitude = _("", ""); } - /* Clone monster? */ if (m_ptr->smart & SM_CLONED) { @@ -2423,6 +2130,7 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode) { return format(_("レベル???, %s%s%s", "Level ???, %s%s%s"), desc, attitude, clone); } + } @@ -2740,8 +2448,6 @@ static POSITION_IDX target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION /* Track best */ b_i = i; b_v = v; } - - /* Result */ return (b_i); } @@ -2779,8 +2485,6 @@ static bool target_set_accept(POSITION y, POSITION x) 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 */ @@ -2800,7 +2504,6 @@ static bool target_set_accept(POSITION y, POSITION x) if (have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_NOTICE)) return TRUE; } - /* Nope */ return (FALSE); } @@ -2982,8 +2685,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) feature_type *f_ptr; char query = '\001'; char out_val[MAX_NLEN+80]; - -#ifdef ALLOW_EASY_FLOOR OBJECT_IDX floor_list[23]; ITEM_NUMBER floor_num = 0; @@ -2998,8 +2699,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) } } -#endif /* ALLOW_EASY_FLOOR */ - /* Hack -- under the player */ if (player_bold(y, x)) { @@ -3063,8 +2762,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) /* Hack -- health bar for this monster */ health_track(c_ptr->m_idx); - - /* Hack -- handle stuff */ handle_stuff(); /* Interact */ @@ -3154,8 +2851,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) char o_name[MAX_NLEN]; object_type *o_ptr; - - /* Acquire object */ o_ptr = &o_list[this_o_idx]; /* Acquire next object */ @@ -3164,7 +2859,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) /* Obtain an object description */ object_desc(o_name, o_ptr, 0); - /* Describe the object */ #ifdef JP sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info); #else @@ -3194,8 +2888,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) #endif } - -#ifdef ALLOW_EASY_FLOOR if (floor_num) { int min_width = 0; @@ -3207,19 +2899,14 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) char o_name[MAX_NLEN]; object_type *o_ptr; - - /* Acquire object */ o_ptr = &o_list[floor_list[0]]; - /* Describe the object */ object_desc(o_name, o_ptr, 0); #ifdef JP - sprintf(out_val, "%s%s%s%s[%s]", - s1, o_name, s2, s3, info); + sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info); #else - sprintf(out_val, "%s%s%s%s [%s]", - s1, s2, s3, o_name, info); + sprintf(out_val, "%s%s%s%s [%s]", s1, s2, s3, o_name, info); #endif prt(out_val, 0, 0); @@ -3237,11 +2924,9 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) { /* Display rough information about items */ #ifdef JP - sprintf(out_val, "%s %d個のアイテム%s%s ['x'で一覧, %s]", - s1, (int)floor_num, s2, s3, info); + sprintf(out_val, "%s %d個のアイテム%s%s ['x'で一覧, %s]", s1, (int)floor_num, s2, s3, info); #else - sprintf(out_val, "%s%s%sa pile of %d items [x,%s]", - s1, s2, s3, (int)floor_num, info); + sprintf(out_val, "%s%s%sa pile of %d items [x,%s]", s1, s2, s3, (int)floor_num, info); #endif prt(out_val, 0, 0); @@ -3262,8 +2947,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) { int i; OBJECT_IDX o_idx; - - /* Save screen */ screen_save(); /* Display */ @@ -3273,19 +2956,13 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) /* Prompt */ #ifdef JP - sprintf(out_val, "%s %d個のアイテム%s%s [Enterで次へ, %s]", - s1, (int)floor_num, s2, s3, info); + sprintf(out_val, "%s %d個のアイテム%s%s [Enterで次へ, %s]", s1, (int)floor_num, s2, s3, info); #else - sprintf(out_val, "%s%s%sa pile of %d items [Enter,%s]", - s1, s2, s3, (int)floor_num, info); + sprintf(out_val, "%s%s%sa pile of %d items [Enter,%s]", s1, s2, s3, (int)floor_num, info); #endif prt(out_val, 0, 0); - - /* Wait */ query = inkey(); - - /* Load screen */ screen_load(); /* Exit unless 'Enter' */ @@ -3317,15 +2994,11 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) /* NOTREACHED */ } -#endif /* ALLOW_EASY_FLOOR */ - /* Scan all objects in the grid */ 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 */ @@ -3342,7 +3015,6 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) /* Obtain an object description */ object_desc(o_name, o_ptr, 0); - /* Describe the object */ #ifdef JP sprintf(out_val, "%s%s%s%s[%s]", s1, o_name, s2, s3, info); #else @@ -3523,7 +3195,7 @@ static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) * some form of "scrolling" the map around the cursor. * That is, consider the possibility of "auto-scrolling" the screen * while the cursor moves around. This may require changes in the - * "update_mon()" code to allow "visibility" even if off panel, and + * "update_monster()" code to allow "visibility" even if off panel, and * may require dynamic recalculation of the "temp" grid set. * * Hack -- targeting/observing an "outer border grid" may induce @@ -3570,7 +3242,6 @@ bool target_set(BIT_FLAGS mode) int wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); /* Cancel target */ @@ -3709,12 +3380,9 @@ bool target_set(BIT_FLAGS mode) p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); /* Recalculate interesting grids */ @@ -3800,12 +3468,9 @@ bool target_set(BIT_FLAGS mode) p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); /* Recalculate interesting grids */ @@ -3919,12 +3584,9 @@ bool target_set(BIT_FLAGS mode) p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); /* Recalculate interesting grids */ @@ -4044,12 +3706,9 @@ bool target_set(BIT_FLAGS mode) p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); /* Failure to set target */ @@ -4078,7 +3737,6 @@ bool get_aim_dir(DIRECTION *dp) cptr p; COMMAND_CODE code; - /* Initialize */ (*dp) = 0; /* Global direction */ @@ -4087,8 +3745,6 @@ bool get_aim_dir(DIRECTION *dp) /* Hack -- auto-target if requested */ if (use_old_target && target_okay()) dir = 5; -#ifdef ALLOW_REPEAT /* TNB */ - if (repeat_pull(&code)) { /* Confusion? */ @@ -4102,8 +3758,6 @@ bool get_aim_dir(DIRECTION *dp) } *dp = (DIRECTION)code; -#endif /* ALLOW_REPEAT -- TNB */ - /* Ask until satisfied */ while (!dir) { @@ -4191,59 +3845,33 @@ bool get_aim_dir(DIRECTION *dp) /* Save direction */ (*dp) = dir; -#ifdef ALLOW_REPEAT /* TNB */ - /* repeat_push(dir); */ repeat_push((COMMAND_CODE)command_dir); -#endif /* ALLOW_REPEAT -- TNB */ - /* A "valid" direction was entered */ return (TRUE); } - -/* - * Request a "movement" direction (1,2,3,4,6,7,8,9) from the user, - * and place it into "command_dir", unless we already have one. - * - * This function should be used for all "repeatable" commands, such as - * run, walk, open, close, bash, disarm, spike, tunnel, etc, as well - * as all commands which must reference a grid adjacent to the player, - * and which may not reference the grid under the player. Note that, - * for example, it is no longer possible to "disarm" or "open" chests - * in the same grid as the player. - * - * Direction "5" is illegal and will (cleanly) abort the command. - * - * This function tracks and uses the "global direction", and uses - * that as the "desired direction", to which "confusion" is applied. - */ -bool get_rep_dir(DIRECTION *dp, bool under) +bool get_direction(DIRECTION *dp, bool allow_under, bool with_steed) { DIRECTION dir; cptr prompt; COMMAND_CODE code; - /* Initialize */ (*dp) = 0; /* Global direction */ dir = command_dir; -#ifdef ALLOW_REPEAT /* TNB */ - if (repeat_pull(&code)) { dir = (DIRECTION)code; -/* return (TRUE); */ + /* return (TRUE); */ } *dp = (DIRECTION)code; -#endif /* ALLOW_REPEAT -- TNB */ - - if (under) + if (allow_under) { prompt = _("方向 ('.'足元, ESCで中断)? ", "Direction ('.' at feet, Escape to cancel)? "); } @@ -4251,7 +3879,7 @@ bool get_rep_dir(DIRECTION *dp, bool under) { prompt = _("方向 (ESCで中断)? ", "Direction (Escape to cancel)? "); } - + /* Get a direction */ while (!dir) { @@ -4261,7 +3889,7 @@ bool get_rep_dir(DIRECTION *dp, bool under) if (!get_com(prompt, &ch, TRUE)) break; /* Look down */ - if ((under) && ((ch == '5') || (ch == '-') || (ch == '.'))) + if ((allow_under) && ((ch == '5') || (ch == '-') || (ch == '.'))) { dir = 5; } @@ -4275,7 +3903,7 @@ bool get_rep_dir(DIRECTION *dp, bool under) } /* Prevent weirdness */ - if ((dir == 5) && (!under)) dir = 0; + if ((dir == 5) && (!allow_under)) dir = 0; /* Aborted */ if (!dir) return (FALSE); @@ -4293,7 +3921,7 @@ bool get_rep_dir(DIRECTION *dp, bool under) dir = ddd[randint0(8)]; } } - else if (p_ptr->riding) + else if (p_ptr->riding && with_steed) { monster_type *m_ptr = &m_list[p_ptr->riding]; monster_race *r_ptr = &r_info[m_ptr->r_idx]; @@ -4347,31 +3975,40 @@ bool get_rep_dir(DIRECTION *dp, bool under) /* Save direction */ (*dp) = dir; -#ifdef ALLOW_REPEAT /* TNB */ - -/* repeat_push(dir); */ + /* repeat_push(dir); */ repeat_push((COMMAND_CODE)command_dir); -#endif /* ALLOW_REPEAT -- TNB */ - /* Success */ return (TRUE); } - -bool get_rep_dir2(DIRECTION *dp) +/* + * @brief 進行方向を指定する(騎乗対象の混乱の影響を受ける) / Request a "movement" direction (1,2,3,4,6,7,8,9) from the user, + * and place it into "command_dir", unless we already have one. + * + * This function should be used for all "repeatable" commands, such as + * run, walk, open, close, bash, disarm, spike, tunnel, etc, as well + * as all commands which must reference a grid adjacent to the player, + * and which may not reference the grid under the player. Note that, + * for example, it is no longer possible to "disarm" or "open" chests + * in the same grid as the player. + * + * Direction "5" is illegal and will (cleanly) abort the command. + * + * This function tracks and uses the "global direction", and uses + * that as the "desired direction", to which "confusion" is applied. + */ +bool get_rep_dir(DIRECTION *dp, bool under) { DIRECTION dir; + cptr prompt; COMMAND_CODE code; - /* Initialize */ (*dp) = 0; /* Global direction */ dir = command_dir; -#ifdef ALLOW_REPEAT /* TNB */ - if (repeat_pull(&code)) { dir = (DIRECTION)code; @@ -4379,24 +4016,39 @@ bool get_rep_dir2(DIRECTION *dp) } *dp = (DIRECTION)code; -#endif /* ALLOW_REPEAT -- TNB */ - + if (under) + { + prompt = _("方向 ('.'足元, ESCで中断)? ", "Direction ('.' at feet, Escape to cancel)? "); + } + else + { + prompt = _("方向 (ESCで中断)? ", "Direction (Escape to cancel)? "); + } + /* Get a direction */ while (!dir) { char ch; /* Get a command (or Cancel) */ - if (!get_com(_("方向 (ESCで中断)? ", "Direction (Escape to cancel)? "), &ch, TRUE)) break; + if (!get_com(prompt, &ch, TRUE)) break; - /* Look up the direction */ - dir = get_keymap_dir(ch); + /* Look down */ + if ((under) && ((ch == '5') || (ch == '-') || (ch == '.'))) + { + dir = 5; + } + else + { + /* Look up the direction */ + dir = get_keymap_dir(ch); - if (!dir) bell(); + if (!dir) bell(); + } } /* Prevent weirdness */ - if (dir == 5) dir = 0; + if ((dir == 5) && (!under)) dir = 0; /* Aborted */ if (!dir) return (FALSE); @@ -4414,24 +4066,63 @@ bool get_rep_dir2(DIRECTION *dp) dir = ddd[randint0(8)]; } } + else if (p_ptr->riding) + { + monster_type *m_ptr = &m_list[p_ptr->riding]; + monster_race *r_ptr = &r_info[m_ptr->r_idx]; + + if (MON_CONFUSED(m_ptr)) + { + /* Standard confusion */ + if (randint0(100) < 75) + { + /* Random direction */ + dir = ddd[randint0(8)]; + } + } + else if ((r_ptr->flags1 & RF1_RAND_50) && (r_ptr->flags1 & RF1_RAND_25) && (randint0(100) < 50)) + { + /* Random direction */ + dir = ddd[randint0(8)]; + } + else if ((r_ptr->flags1 & RF1_RAND_50) && (randint0(100) < 25)) + { + /* Random direction */ + dir = ddd[randint0(8)]; + } + } /* Notice confusion */ if (command_dir != dir) { - /* Warn the user */ - msg_print(_("あなたは混乱している。", "You are confused.")); + if (p_ptr->confused) + { + /* Warn the user */ + msg_print(_("あなたは混乱している。", "You are confused.")); + } + else + { + char m_name[80]; + monster_type *m_ptr = &m_list[p_ptr->riding]; + + monster_desc(m_name, m_ptr, 0); + if (MON_CONFUSED(m_ptr)) + { + msg_format(_("%sは混乱している。", "%^s is confusing."), m_name); + } + else + { + msg_format(_("%sは思い通りに動いてくれない。", "You cannot control %s."), m_name); + } + } } /* Save direction */ (*dp) = dir; -#ifdef ALLOW_REPEAT /* TNB */ - /* repeat_push(dir); */ repeat_push((COMMAND_CODE)command_dir); -#endif /* ALLOW_REPEAT -- TNB */ - /* Success */ return (TRUE); } @@ -4559,8 +4250,6 @@ void gain_level_reward(int chosen_reward) msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「汝の行いは貴き剣に値せり。」", "'Thy deed hath earned thee a worthy blade.'")); - - /* Get local object */ q_ptr = &forge; dummy = TV_SWORD; switch (randint1(p_ptr->lev)) @@ -5046,7 +4735,6 @@ static bool tgt_pt_accept(POSITION y, POSITION x) if (cave_have_flag_grid(c_ptr, FF_QUEST_EXIT)) return (TRUE); } - /* Nope */ return (FALSE); } @@ -5099,7 +4787,6 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr) int wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); x = p_ptr->x; @@ -5169,12 +4856,9 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr) p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); } else /* move cursor to next stair and change panel */ @@ -5258,12 +4942,9 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr) p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); *x_ptr = x; @@ -5278,7 +4959,6 @@ bool get_hack_dir(DIRECTION *dp) cptr p; char command; - /* Initialize */ (*dp) = 0; /* Global direction */