X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fxtra2.c;h=2b46503fb1895ed49dd1f8751dc94a528a52a61a;hb=f3f34986b26c373491579443ce163995330a9b76;hp=f40f1f844e00137ebc0bf60e371417cc62a4bc02;hpb=ecd6cbce6eb5930b854fcfe3c2b181fe298ecf25;p=hengband%2Fhengband.git diff --git a/src/xtra2.c b/src/xtra2.c index f40f1f844..2b46503fb 100644 --- a/src/xtra2.c +++ b/src/xtra2.c @@ -12,6 +12,11 @@ #include "angband.h" +#include "cmd-pet.h" +#include "object-curse.h" +#include "monsterrace-hook.h" +#include "objectkind-hook.h" +#include "sort.h" #define REWARD_CHANCE 10 @@ -47,8 +52,6 @@ void check_experience(void) /* Redraw experience */ p_ptr->redraw |= (PR_EXP); - - /* Handle stuff */ handle_stuff(); @@ -58,17 +61,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); - - /* Window stuff */ p_ptr->window |= (PW_PLAYER); - - /* Handle stuff */ handle_stuff(); } @@ -99,30 +94,16 @@ void check_experience(void) do_cmd_write_nikki(NIKKI_LEVELUP, p_ptr->lev, NULL); } - /* Sound */ sound(SOUND_LEVEL); - /* Message */ -#ifdef JP -msg_format("レベル %d にようこそ。", p_ptr->lev); -#else - msg_format("Welcome to level %d.", p_ptr->lev); - -#endif + 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); - - /* Window stuff */ p_ptr->window |= (PW_PLAYER | PW_SPELL | PW_INVEN); /* HPとMPの上昇量を表示 */ level_up = 1; - - /* Handle stuff */ handle_stuff(); level_up = 0; @@ -138,43 +119,28 @@ msg_format("レベル %d にようこそ。", p_ptr->lev); int n; char tmp[32]; -#ifdef JP - cnv_stat(p_ptr->stat_max[0], tmp); - prt(format(" a) 腕力 (現在値 %s)", tmp), 2, 14); - cnv_stat(p_ptr->stat_max[1], tmp); - prt(format(" b) 知能 (現在値 %s)", tmp), 3, 14); - cnv_stat(p_ptr->stat_max[2], tmp); - prt(format(" c) 賢さ (現在値 %s)", tmp), 4, 14); - cnv_stat(p_ptr->stat_max[3], tmp); - prt(format(" d) 器用 (現在値 %s)", tmp), 5, 14); - cnv_stat(p_ptr->stat_max[4], tmp); - prt(format(" e) 耐久 (現在値 %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); + prt(format(_(" a) 腕力 (現在値 %s)", " a) Str (cur %s)"), tmp), 2, 14); cnv_stat(p_ptr->stat_max[1], tmp); - prt(format(" b) Int (cur %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) Wis (cur %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) Dex (cur %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) Con (cur %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) 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(); if ((choice >= 'a') && (choice <= 'f')) break; } - for(n = 0; n < 6; n++) + for(n = 0; n < A_MAX; n++) if (n != choice - 'a') prt("",n+2,14); if (get_check(_("よろしいですか?", "Are you sure? "))) break; @@ -203,16 +169,9 @@ msg_format("レベル %d にようこそ。", p_ptr->lev); 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); - - /* Window stuff */ p_ptr->window |= (PW_PLAYER | PW_SPELL); - - /* Handle stuff */ handle_stuff(); } @@ -228,9 +187,9 @@ msg_format("レベル %d にようこそ。", p_ptr->lev); * @details * Hack -- Return the "automatic coin type" of a monster race * Used to allocate proper treasure when "Creeping coins" die - * XXX XXX XXX Note the use of actual "monster names" + * Note the use of actual "monster names" */ -static int get_coin_type(MONRACE_IDX r_idx) +static OBJECT_SUBTYPE_VALUE get_coin_type(MONRACE_IDX r_idx) { /* Analyze monsters */ switch (r_idx) @@ -248,158 +207,13 @@ 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 クエストを達成状態にする / * @param quest_num 達成状態にしたいクエストのID * @return なし */ -void complete_quest(int quest_num) +void complete_quest(QUEST_IDX quest_num) { quest_type* const q_ptr = &quest[quest_num]; @@ -430,10 +244,10 @@ void complete_quest(int quest_num) * @brief 現在フロアに残っている敵モンスターの数を返す / * @return 現在の敵モンスターの数 */ -static int count_all_hostile_monsters(void) +static MONSTER_NUMBER count_all_hostile_monsters(void) { - int x, y; - int number_mon = 0; + POSITION x, y; + MONSTER_NUMBER number_mon = 0; for (x = 0; x < cur_wid; ++ x) { @@ -443,7 +257,7 @@ static int count_all_hostile_monsters(void) if (m_idx > 0 && is_hostile(&m_list[m_idx])) { - ++ number_mon; + ++number_mon; } } } @@ -460,8 +274,7 @@ static int count_all_hostile_monsters(void) void check_quest_completion(monster_type *m_ptr) { POSITION y, x; - - int quest_num; + QUEST_IDX quest_num; bool create_stairs = FALSE; bool reward = FALSE; @@ -469,19 +282,18 @@ 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; /* Inside a quest */ - quest_num = p_ptr->inside_quest; + quest_num = p_ptr->inside_quest; /* Search for an active quest on this dungeon level */ if (!quest_num) { - int i; + QUEST_IDX i; - for (i = max_quests - 1; i > 0; i--) + for (i = max_q_idx - 1; i > 0; i--) { quest_type* const q_ptr = &quest[i]; @@ -655,16 +467,11 @@ 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 */ make_object(o_ptr, AM_GOOD | AM_GREAT); - - /* Drop it in the dungeon */ (void)drop_near(o_ptr, -1, y, x); } } @@ -678,13 +485,13 @@ void check_quest_completion(monster_type *m_ptr) */ void check_find_art_quest_completion(object_type *o_ptr) { - int i; + QUEST_IDX i; /* Check if completed a quest */ - for (i = 0; i < max_quests; i++) + for (i = 0; i < max_q_idx; i++) { - if ((quest[i].type == QUEST_TYPE_FIND_ARTIFACT) && - (quest[i].status == QUEST_STATUS_TAKEN) && - (quest[i].k_idx == o_ptr->name1)) + if((quest[i].type == QUEST_TYPE_FIND_ARTIFACT) && + (quest[i].status == QUEST_STATUS_TAKEN) && + (quest[i].k_idx == o_ptr->name1)) { complete_quest(i); } @@ -698,10 +505,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; @@ -739,15 +547,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)); @@ -775,13 +582,12 @@ 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; 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, 3, m_name); @@ -793,7 +599,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (r_ptr->blow[i].method == RBM_EXPLODE) { BIT_FLAGS flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; - int typ = mbe_info[r_ptr->blow[i].effect].explode_type; + EFFECT_ID typ = mbe_info[r_ptr->blow[i].effect].explode_type; DICE_NUMBER d_dice = r_ptr->blow[i].d_dice; DICE_SID d_side = r_ptr->blow[i].d_side; HIT_POINT damage = damroll(d_dice, d_side); @@ -828,15 +634,11 @@ 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 */ (void)drop_near(q_ptr, -1, y, x); } @@ -844,7 +646,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) p_ptr->arena_number++; if (record_arena) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; /* Extract monster name */ monster_desc(m_name, m_ptr, MD_IGNORE_HALLU | MD_ASSUME_VISIBLE | MD_INDEF_VISIBLE); @@ -891,8 +693,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 */ @@ -901,8 +701,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) apply_magic(q_ptr, object_level, AM_NO_FIXED_ART); q_ptr->pval = m_ptr->r_idx; - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } @@ -922,21 +720,19 @@ 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; if (pet) mode |= PM_FORCE_PET; - if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode)) + if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_BLUE_HORROR, mode, '\0')) { - 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; @@ -944,15 +740,12 @@ 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 */ object_prep(q_ptr, lookup_kind(TV_SWORD, SV_BLADE_OF_CHAOS)); apply_magic(q_ptr, object_level, AM_NO_FIXED_ART | mo_mode); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -960,10 +753,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 */ @@ -974,8 +764,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Make a book */ make_object(q_ptr, mo_mode); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -1004,7 +792,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) BIT_FLAGS mode = 0L; if (pet) mode |= PM_FORCE_PET; - if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode)) + if (summon_specific((pet ? -1 : m_idx), wy, wx, 100, SUMMON_DAWN, mode, '\0')) { if (player_can_see_bold(wy, wx)) msg_print(_("新たな戦士が現れた!", "A new warrior steps forth!")); @@ -1028,7 +816,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Reward for "lazy" player */ if (p_ptr->pseikaku == SEIKAKU_NAMAKE) { - int a_idx = 0; + ARTIFACT_IDX a_idx = 0; artifact_type *a_ptr = NULL; if (!drop_chosen_item) break; @@ -1066,8 +854,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" */ @@ -1078,11 +864,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Mega-Hack -- Actually create "Grond" */ apply_magic(q_ptr, -1, AM_GOOD | AM_GREAT); - - /* 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" */ @@ -1093,21 +875,16 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Mega-Hack -- Actually create "Chaos" */ apply_magic(q_ptr, -1, AM_GOOD | AM_GREAT); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); break; case MON_B_DEATH_SWORD: if (drop_chosen_item) { - /* Get local object */ q_ptr = &forge; /* Prepare to make a broken sword */ object_prep(q_ptr, lookup_kind(TV_SWORD, randint1(2))); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -1117,15 +894,12 @@ 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 */ object_prep(q_ptr, lookup_kind(TV_CHEST, SV_CHEST_KANDUME)); apply_magic(q_ptr, object_level, AM_NO_FIXED_ART); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -1145,10 +919,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,8 +927,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Make a cloak */ make_object(q_ptr, mo_mode); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -1165,10 +934,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,8 +942,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Make a poleweapon */ make_object(q_ptr, mo_mode); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -1185,10 +949,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,8 +957,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Make a hard armor */ make_object(q_ptr, mo_mode); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -1205,10 +964,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,8 +972,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Make a hafted weapon */ make_object(q_ptr, mo_mode); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -1225,10 +979,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 */ @@ -1236,8 +987,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Make a sword */ make_object(q_ptr, mo_mode); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } break; @@ -1248,7 +997,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Mega-Hack -- drop fixed items */ if (drop_chosen_item) { - int a_idx = 0; + ARTIFACT_IDX a_idx = 0; int chance = 0; for(i = 0; i < 4; i++) @@ -1278,7 +1027,7 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if ((r_ptr->flags7 & RF7_GUARDIAN) && (d_info[dungeon_type].final_guardian == m_ptr->r_idx)) { - IDX k_idx = d_info[dungeon_type].final_object ? d_info[dungeon_type].final_object + KIND_OBJECT_IDX k_idx = d_info[dungeon_type].final_object ? d_info[dungeon_type].final_object : lookup_kind(TV_SCROLL, SV_SCROLL_ACQUIREMENT); if (d_info[dungeon_type].final_artifact) @@ -1305,15 +1054,12 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) if (k_idx) { - /* Get local object */ q_ptr = &forge; /* Prepare to make a reward */ object_prep(q_ptr, k_idx); apply_magic(q_ptr, object_level, AM_NO_FIXED_ART | AM_GOOD); - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } msg_format(_("あなたは%sを制覇した!", "You have conquered %s!"),d_name+d_info[dungeon_type].name); @@ -1347,10 +1093,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 */ @@ -1359,7 +1102,6 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Make some gold */ if (!make_gold(q_ptr)) continue; - /* XXX XXX XXX */ dump_gold++; } @@ -1369,11 +1111,8 @@ void monster_death(MONSTER_IDX m_idx, bool drop_item) /* Make an object */ if (!make_object(q_ptr, mo_mode)) continue; - /* XXX XXX XXX */ dump_item++; } - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, y, x); } @@ -1527,7 +1266,7 @@ static void get_exp_from_mon(HIT_POINT dam, monster_type *m_ptr) } /* Special penalty for rest_and_shoot exp scum */ - if ((m_ptr->dealt_damage > (u32b)m_ptr->max_maxhp) && (m_ptr->hp >= 0)) + if ((m_ptr->dealt_damage > m_ptr->max_maxhp) && (m_ptr->hp >= 0)) { int over_damage = m_ptr->dealt_damage / m_ptr->max_maxhp; if (over_damage > 32) over_damage = 32; @@ -1570,7 +1309,7 @@ static void get_exp_from_mon(HIT_POINT dam, monster_type *m_ptr) * Made name, sex, and capitalization generic -BEN- * As always, the "ghost" processing is a total hack. * Hack -- we "delay" fear messages by passing around a "fear" flag. - * XXX XXX XXX Consider decreasing monster experience over time, say, + * Consider decreasing monster experience over time, say, * by using "(m_exp * m_lev * (m_lev)) / (p_lev * (m_lev + n_killed))" * instead of simply "(m_exp * m_lev) / (p_lev)", to make the first * monster worth more than subsequent monsters. This would also need @@ -1579,16 +1318,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; - int dealt_damage; + bool innocent = TRUE, thief = FALSE; + int i; + HIT_POINT expdam; (void)COPY(&exp_mon, m_ptr, monster_type); @@ -1603,7 +1340,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- */ @@ -1615,24 +1351,20 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) /* Genocided by chaos patron */ if (!m_idx) return TRUE; - /* Remember dealt_damage before this attack*/ - dealt_damage = m_ptr->dealt_damage; - - /* Hurt it */ m_ptr->hp -= dam; - m_ptr->dealt_damage += dam; - if(m_ptr->dealt_damage > (u32b)m_ptr->max_maxhp * 100) m_ptr->dealt_damage = m_ptr->max_maxhp * 100; + + 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 */ if (m_ptr->hp < 0) { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; if (r_info[m_ptr->r_idx].flags7 & RF7_TANUKI) { @@ -1722,16 +1454,14 @@ bool mon_take_hit(MONSTER_IDX m_idx, HIT_POINT dam, bool *fear, cptr note) if (r_ptr->flags2 & RF2_CAN_SPEAK) { char line_got[1024]; - - /* 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 @@ -1774,8 +1504,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') @@ -1832,8 +1561,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) @@ -1849,11 +1577,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); } @@ -1881,7 +1605,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; @@ -1899,7 +1623,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 @@ -1913,7 +1637,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 @@ -1935,18 +1659,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!")); @@ -1954,7 +1673,6 @@ msg_format("%sを葬り去った。", m_name); } else { - /* Delete the monster */ delete_monster_idx(m_idx); } @@ -1991,13 +1709,12 @@ 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; - /* XXX XXX XXX Hack -- Add some timed fear */ + /* Hack -- Add some timed fear */ (void)set_monster_monfear(m_idx, (randint1(10) + (((dam >= m_ptr->hp) && (percentage > 7)) ? 20 : ((11 - percentage) * 5)))); @@ -2006,22 +1723,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); } @@ -2034,7 +1735,7 @@ msg_format("%sを葬り去った。", m_name); * @param hgt_p コンソールの表示行数を返す * @return なし */ -void get_screen_size(int *wid_p, int *hgt_p) +void get_screen_size(TERM_LEN *wid_p, TERM_LEN *hgt_p) { Term_get_size(wid_p, hgt_p); *hgt_p -= ROW_MAP + 2; @@ -2050,9 +1751,8 @@ void get_screen_size(int *wid_p, int *hgt_p) */ void panel_bounds_center(void) { - int wid, hgt; + TERM_LEN wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); panel_row_max = panel_row_min + hgt - 1; @@ -2082,25 +1782,13 @@ void resize_map(void) verify_panel(); - /* Update stuff */ p_ptr->update |= (PU_TORCH | PU_BONUS | PU_HP | PU_MANA | PU_SPELLS); - - /* Forget lite/view */ p_ptr->update |= (PU_UN_VIEW | PU_UN_LITE); - - /* Update lite/view */ p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE); - - /* Update monsters */ p_ptr->update |= (PU_MONSTERS); - - /* Redraw everything */ p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY); - /* Hack -- update */ handle_stuff(); - - /* Redraw */ Term_redraw(); /* @@ -2109,7 +1797,6 @@ void resize_map(void) */ if (can_save) move_cursor_relative(p_ptr->y, p_ptr->x); - /* Refresh */ Term_fresh(); } @@ -2123,16 +1810,10 @@ void redraw_window(void) /* Only if the dungeon exists */ if (!character_dungeon) return; - /* Window stuff */ p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER); - - /* Window stuff */ p_ptr->window |= (PW_MESSAGE | PW_OVERHEAD | PW_DUNGEON | PW_MONSTER | PW_OBJECT); - /* Hack -- update */ handle_stuff(); - - /* Redraw */ Term_redraw(); } @@ -2146,12 +1827,11 @@ void redraw_window(void) * Also used in do_cmd_locate * @return 実際に再描画が必要だった場合TRUEを返す */ -bool change_panel(int dy, int dx) +bool change_panel(POSITION dy, POSITION dx) { - int y, x; - int wid, hgt; + POSITION y, x; + TERM_LEN wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); /* Apply the motion */ @@ -2176,13 +1856,8 @@ bool change_panel(int dy, int dx) /* Recalculate the boundaries */ panel_bounds_center(); - /* Update stuff */ p_ptr->update |= (PU_MONSTERS); - - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - - /* Handle stuff */ handle_stuff(); /* Success */ @@ -2203,12 +1878,11 @@ bool change_panel(int dy, int dx) * Also used in do_cmd_locate * @return 実際に再描画が必要だった場合TRUEを返す */ -bool change_panel_xy(int y, int x) +static bool change_panel_xy(POSITION y, POSITION x) { - int dy = 0, dx = 0; - int wid, hgt; + POSITION dy = 0, dx = 0; + TERM_LEN wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); if (y < panel_row_min) dy = -1; @@ -2233,16 +1907,15 @@ bool change_panel_xy(int y, int x) */ void verify_panel(void) { - int y = p_ptr->y; - int x = p_ptr->x; - int wid, hgt; + POSITION y = p_ptr->y; + POSITION x = p_ptr->x; + TERM_LEN wid, hgt; int prow_min; int pcol_min; int max_prow_min; int max_pcol_min; - /* Get size */ get_screen_size(&wid, &hgt); max_prow_min = cur_hgt - hgt; @@ -2319,18 +1992,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(); - /* Update stuff */ p_ptr->update |= (PU_MONSTERS); - - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); } @@ -2341,70 +2009,44 @@ 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; + perc = m_ptr->maxhp > 0 ? 100L * m_ptr->hp / m_ptr->maxhp : 0; /* 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)) { @@ -2424,7 +2066,6 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode) attitude = _("", ""); } - /* Clone monster? */ if (m_ptr->smart & SM_CLONED) { @@ -2444,71 +2085,7 @@ cptr look_mon_desc(monster_type *m_ptr, BIT_FLAGS mode) { return format(_("レベル???, %s%s%s", "Level ???, %s%s%s"), desc, attitude, clone); } -} - - - -/* - * Angband sorting algorithm -- quick sort in place - * - * Note that the details of the data we are sorting is hidden, - * and we rely on the "ang_sort_comp()" and "ang_sort_swap()" - * function hooks to interact with the data, which is given as - * two pointers, and which may have any user-defined form. - */ -void ang_sort_aux(vptr u, vptr v, int p, int q) -{ - int z, a, b; - - /* Done sort */ - if (p >= q) return; - - /* Pivot */ - z = p; - - /* Begin */ - a = p; - b = q; - - /* Partition */ - while (TRUE) - { - /* Slide i2 */ - while (!(*ang_sort_comp)(u, v, b, z)) b--; - - /* Slide i1 */ - while (!(*ang_sort_comp)(u, v, z, a)) a++; - - /* Done partition */ - if (a >= b) break; - - /* Swap */ - (*ang_sort_swap)(u, v, a, b); - - /* Advance */ - a++, b--; - } - - /* Recurse left side */ - ang_sort_aux(u, v, p, b); - - /* Recurse right side */ - ang_sort_aux(u, v, b+1, q); -} - -/* - * Angband sorting algorithm -- quick sort in place - * - * Note that the details of the data we are sorting is hidden, - * and we rely on the "ang_sort_comp()" and "ang_sort_swap()" - * function hooks to interact with the data, which is given as - * two pointers, and which may have any user-defined form. - */ -void ang_sort(vptr u, vptr v, int n) -{ - /* Sort the array */ - ang_sort_aux(u, v, 0, n-1); } @@ -2548,7 +2125,7 @@ bool target_able(MONSTER_IDX m_idx) /* Monster must be projectable */ if (!projectable(p_ptr->y, p_ptr->x, m_ptr->fy, m_ptr->fx)) return (FALSE); - /* XXX XXX XXX Hack -- Never target trappers */ + /* Hack -- Never target trappers */ /* if (CLEAR_ATTR && (CLEAR_CHAR)) return (FALSE); */ /* Assume okay */ @@ -2720,13 +2297,11 @@ static void ang_sort_swap_distance(vptr u, vptr v, int a, int b) /* * Hack -- help "select" a location (see below) */ -static s16b target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx) +static POSITION_IDX target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx) { - int i, v; - - int x2, y2, x3, y3, x4, y4; - - int b_i = -1, b_v = 9999; + POSITION_IDX i, v; + POSITION x2, y2, x3, y3, x4, y4; + POSITION_IDX b_i = -1, b_v = 9999; /* Scan the locations */ @@ -2755,7 +2330,7 @@ static s16b target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx) /* Approximate Double Distance */ v = ((x4 > y4) ? (x4 + x4 + y4) : (y4 + y4 + x4)); - /* XXX XXX XXX Penalize location */ + /* Penalize location */ /* Track best */ if ((b_i >= 0) && (v >= b_v)) continue; @@ -2763,8 +2338,6 @@ static s16b target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx) /* Track best */ b_i = i; b_v = v; } - - /* Result */ return (b_i); } @@ -2772,11 +2345,10 @@ static s16b target_pick(POSITION y1, POSITION x1, POSITION dy, POSITION dx) /* * Hack -- determine if a given location is "interesting" */ -static bool target_set_accept(int y, int x) +static bool target_set_accept(POSITION y, POSITION x) { cave_type *c_ptr; - - s16b this_o_idx, next_o_idx = 0; + OBJECT_IDX this_o_idx, next_o_idx = 0; /* Bounds */ if (!(in_bounds(y, x))) return (FALSE); @@ -2784,11 +2356,9 @@ static bool target_set_accept(int y, int x) /* Player grid is always interesting */ if (player_bold(y, x)) return (TRUE); - /* Handle hallucination */ if (p_ptr->image) return (FALSE); - /* Examine the grid */ c_ptr = &cave[y][x]; @@ -2805,8 +2375,6 @@ static bool target_set_accept(int y, int 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 */ @@ -2826,7 +2394,6 @@ static bool target_set_accept(int y, int x) if (have_flag(f_info[get_feat_mimic(c_ptr)].flags, FF_NOTICE)) return TRUE; } - /* Nope */ return (FALSE); } @@ -2838,8 +2405,8 @@ static bool target_set_accept(int y, int x) */ static void target_set_prepare(BIT_FLAGS mode) { - int y, x; - int min_hgt, max_hgt, min_wid, max_wid; + POSITION y, x; + POSITION min_hgt, max_hgt, min_wid, max_wid; if (mode & TARGET_KILL) { @@ -2994,22 +2561,20 @@ bool show_gold_on_floor = FALSE; * recall info and the health bar info to track that monster. * * Eventually, we may allow multiple objects per grid, or objects - * and terrain features in the same grid. XXX XXX XXX + * and terrain features in the same grid. * * This function must handle blindness/hallucination. */ -static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) +static char target_set_aux(POSITION y, POSITION x, BIT_FLAGS mode, cptr info) { cave_type *c_ptr = &cave[y][x]; - s16b this_o_idx, next_o_idx = 0; + OBJECT_IDX this_o_idx, next_o_idx = 0; cptr s1 = "", s2 = "", s3 = "", x_info = ""; bool boring = TRUE; - s16b feat; + FEAT_IDX feat; feature_type *f_ptr; - int query = '\001'; + char query = '\001'; char out_val[MAX_NLEN+80]; - -#ifdef ALLOW_EASY_FLOOR OBJECT_IDX floor_list[23]; ITEM_NUMBER floor_num = 0; @@ -3024,20 +2589,15 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) } } -#endif /* ALLOW_EASY_FLOOR */ - /* Hack -- under the player */ if (player_bold(y, x)) { - /* Description */ #ifdef JP s1 = "あなたは"; s2 = "の上"; s3 = "にいる"; #else s1 = "You are "; - - /* Preposition */ s2 = "on "; #endif } @@ -3075,22 +2635,15 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) { monster_type *m_ptr = &m_list[c_ptr->m_idx]; monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx]; - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; bool recall = FALSE; /* Not boring */ boring = FALSE; - /* Get the monster name ("a kobold") */ monster_desc(m_name, m_ptr, MD_INDEF_VISIBLE); - - /* Hack -- track this monster race */ monster_race_track(m_ptr->ap_r_idx); - - /* Hack -- health bar for this monster */ health_track(c_ptr->m_idx); - - /* Hack -- handle stuff */ handle_stuff(); /* Interact */ @@ -3101,7 +2654,6 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) /* Recall */ if (recall) { - /* Save */ screen_save(); /* Recall on screen */ @@ -3113,7 +2665,6 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) /* Command */ query = inkey(); - /* Restore */ screen_load(); /* Normal commands */ @@ -3177,11 +2728,9 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) /* Scan all objects being carried */ for (this_o_idx = m_ptr->hold_o_idx; this_o_idx; this_o_idx = next_o_idx) { - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; object_type *o_ptr; - - /* Acquire object */ o_ptr = &o_list[this_o_idx]; /* Acquire next object */ @@ -3190,7 +2739,6 @@ static int target_set_aux(int y, int 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 @@ -3220,8 +2768,6 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) #endif } - -#ifdef ALLOW_EASY_FLOOR if (floor_num) { int min_width = 0; @@ -3230,23 +2776,17 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) { if (floor_num == 1) { - char o_name[MAX_NLEN]; + GAME_TEXT 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); - /* Message */ #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); @@ -3264,11 +2804,9 @@ static int target_set_aux(int y, int 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); @@ -3288,9 +2826,7 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) while (1) { int i; - IDX o_idx; - - /* Save screen */ + OBJECT_IDX o_idx; screen_save(); /* Display */ @@ -3300,19 +2836,13 @@ static int target_set_aux(int y, int 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' */ @@ -3344,24 +2874,19 @@ static int target_set_aux(int y, int 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 */ next_o_idx = o_ptr->next_o_idx; - /* Describe it */ if (o_ptr->marked & OM_FOUND) { - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; /* Not boring */ boring = FALSE; @@ -3369,7 +2894,6 @@ static int target_set_aux(int y, int 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 @@ -3484,11 +3008,7 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) (have_flag(f_ptr->flags, FF_BLDG) && !p_ptr->inside_arena) || have_flag(f_ptr->flags, FF_ENTRANCE)) { -#ifdef JP - s2 = "の入口"; -#else - s3 = ""; -#endif + s2 = _("の入口", ""); } #ifndef JP else if (have_flag(f_ptr->flags, FF_FLOOR) || @@ -3512,9 +3032,9 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) if (c_ptr->mimic) sprintf(f_idx_str, "%d/%d", c_ptr->feat, c_ptr->mimic); else sprintf(f_idx_str, "%d", c_ptr->feat); #ifdef JP - sprintf(out_val, "%s%s%s%s[%s] %x %s %d %d %d (%d,%d) %d", s1, name, s2, s3, info, c_ptr->info, f_idx_str, c_ptr->dist, c_ptr->cost, c_ptr->when, y, x, travel.cost[y][x]); + sprintf(out_val, "%s%s%s%s[%s] %x %s %d %d %d (%d,%d) %d", s1, name, s2, s3, info, (unsigned int)c_ptr->info, f_idx_str, c_ptr->dist, c_ptr->cost, c_ptr->when, (int)y, (int)x, travel.cost[y][x]); #else - sprintf(out_val, "%s%s%s%s [%s] %x %s %d %d %d (%d,%d)", s1, s2, s3, name, info, c_ptr->info, f_idx_str, c_ptr->dist, c_ptr->cost, c_ptr->when, y, x); + sprintf(out_val, "%s%s%s%s [%s] %x %s %d %d %d (%d,%d)", s1, s2, s3, name, info, c_ptr->info, f_idx_str, c_ptr->dist, c_ptr->cost, c_ptr->when, (int)y, (int)x); #endif } else @@ -3547,10 +3067,10 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) * * All locations must be on the current panel. Consider the use of * "panel_bounds()" to allow "off-panel" targets, perhaps by using - * some form of "scrolling" the map around the cursor. XXX XXX XXX + * 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 @@ -3583,30 +3103,23 @@ static int target_set_aux(int y, int x, BIT_FLAGS mode, cptr info) */ bool target_set(BIT_FLAGS mode) { - int i, d, m, t, bd; + int i, d, m, t, bd; POSITION y = p_ptr->y; POSITION x = p_ptr->x; - bool done = FALSE; - bool flag = TRUE; - char query; - char info[80]; - char same_key; - - cave_type *c_ptr; - - int wid, hgt; + bool done = FALSE; + bool flag = TRUE; + char query; + char info[80]; + char same_key; + cave_type *c_ptr; + TERM_LEN wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); /* Cancel target */ target_who = 0; - - /* Cancel tracking */ - /* health_track(0); */ - if (rogue_like_commands) { same_key = 'x'; @@ -3650,6 +3163,14 @@ bool target_set(BIT_FLAGS mode) { strcpy(info, _("q止 p自 o現 +次 -前", "q,p,o,+,-,")); } + + if (cheat_sight) + { + char cheatinfo[30]; + sprintf(cheatinfo, " LOS:%d, PROJECTABLE:%d", + los(p_ptr->y, p_ptr->x, y, x), projectable(p_ptr->y, p_ptr->x, y, x)); + strcat(info, cheatinfo); + } /* Describe and Prompt */ while (TRUE){ @@ -3657,9 +3178,6 @@ bool target_set(BIT_FLAGS mode) if(query)break; } - /* Cancel tracking */ - /* health_track(0); */ - /* Assume no "direction" */ d = 0; @@ -3724,17 +3242,9 @@ bool target_set(BIT_FLAGS mode) { /* Recenter the map around the player */ verify_panel(); - - /* Update stuff */ p_ptr->update |= (PU_MONSTERS); - - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); /* Recalculate interesting grids */ @@ -3779,8 +3289,8 @@ bool target_set(BIT_FLAGS mode) if (d) { /* Modified to scroll to monster */ - int y2 = panel_row_min; - int x2 = panel_col_min; + POSITION y2 = panel_row_min; + POSITION x2 = panel_col_min; /* Find a new monster */ i = target_pick(temp_y[m], temp_x[m], ddy[d], ddx[d]); @@ -3810,24 +3320,17 @@ bool target_set(BIT_FLAGS mode) /* Nothing interesting */ else { - int dx = ddx[d]; - int dy = ddy[d]; + POSITION dx = ddx[d]; + POSITION dy = ddy[d]; /* Restore previous position */ panel_row_min = y2; panel_col_min = x2; panel_bounds_center(); - /* Update stuff */ p_ptr->update |= (PU_MONSTERS); - - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); /* Recalculate interesting grids */ @@ -3889,12 +3392,18 @@ bool target_set(BIT_FLAGS mode) /* Default prompt */ strcpy(info, _("q止 t決 p自 m近 +次 -前", "q,t,p,m,+,-,")); + if (cheat_sight) + { + char cheatinfo[30]; + sprintf(cheatinfo, " LOS:%d, PROJECTABLE:%d", + los(p_ptr->y, p_ptr->x, y, x), + projectable(p_ptr->y, p_ptr->x, y, x)); + strcat(info, cheatinfo); + } + /* Describe and Prompt (enable "TARGET_LOOK") */ while ((query = target_set_aux(y, x, mode | TARGET_LOOK, info)) == 0); - /* Cancel tracking */ - /* health_track(0); */ - /* Assume no direction */ d = 0; @@ -3929,17 +3438,9 @@ bool target_set(BIT_FLAGS mode) { /* Recenter the map around the player */ verify_panel(); - - /* Update stuff */ p_ptr->update |= (PU_MONSTERS); - - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); /* Recalculate interesting grids */ @@ -4000,8 +3501,8 @@ bool target_set(BIT_FLAGS mode) /* Handle "direction" */ if (d) { - int dx = ddx[d]; - int dy = ddy[d]; + POSITION dx = ddx[d]; + POSITION dy = ddy[d]; /* XTRA HACK MOVEFAST */ if (move_fast) @@ -4056,17 +3557,9 @@ bool target_set(BIT_FLAGS mode) /* Recenter the map around the player */ verify_panel(); - - /* Update stuff */ p_ptr->update |= (PU_MONSTERS); - - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); /* Failure to set target */ @@ -4093,8 +3586,8 @@ bool get_aim_dir(DIRECTION *dp) DIRECTION dir; char command; cptr p; + COMMAND_CODE code; - /* Initialize */ (*dp) = 0; /* Global direction */ @@ -4103,21 +3596,18 @@ 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(dp)) + if (repeat_pull(&code)) { /* Confusion? */ /* Verify */ - if (!(*dp == 5 && !target_okay())) + if (!(code == 5 && !target_okay())) { /* return (TRUE); */ - dir = *dp; + dir = (DIRECTION)code; } } - -#endif /* ALLOW_REPEAT -- TNB */ + *dp = (DIRECTION)code; /* Ask until satisfied */ while (!dir) @@ -4192,7 +3682,6 @@ bool get_aim_dir(DIRECTION *dp) /* Check for confusion */ if (p_ptr->confused) { - /* XXX XXX XXX */ /* Random direction */ dir = ddd[randint0(8)]; } @@ -4207,57 +3696,33 @@ bool get_aim_dir(DIRECTION *dp) /* Save direction */ (*dp) = dir; -#ifdef ALLOW_REPEAT /* TNB */ - /* repeat_push(dir); */ - repeat_push(command_dir); - -#endif /* ALLOW_REPEAT -- TNB */ + repeat_push((COMMAND_CODE)command_dir); /* 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(dp)) + if (repeat_pull(&code)) { - dir = *dp; -/* return (TRUE); */ + dir = (DIRECTION)code; + /* return (TRUE); */ } + *dp = (DIRECTION)code; -#endif /* ALLOW_REPEAT -- TNB */ - - if (under) + if (allow_under) { prompt = _("方向 ('.'足元, ESCで中断)? ", "Direction ('.' at feet, Escape to cancel)? "); } @@ -4265,7 +3730,7 @@ bool get_rep_dir(DIRECTION *dp, bool under) { prompt = _("方向 (ESCで中断)? ", "Direction (Escape to cancel)? "); } - + /* Get a direction */ while (!dir) { @@ -4275,7 +3740,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; } @@ -4284,13 +3749,12 @@ bool get_rep_dir(DIRECTION *dp, bool under) /* Look up the direction */ dir = get_keymap_dir(ch); - /* Oops */ if (!dir) bell(); } } /* Prevent weirdness */ - if ((dir == 5) && (!under)) dir = 0; + if ((dir == 5) && (!allow_under)) dir = 0; /* Aborted */ if (!dir) return (FALSE); @@ -4308,7 +3772,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]; @@ -4344,7 +3808,7 @@ bool get_rep_dir(DIRECTION *dp, bool under) } else { - char m_name[80]; + GAME_TEXT m_name[MAX_NLEN]; monster_type *m_ptr = &m_list[p_ptr->riding]; monster_desc(m_name, m_ptr, 0); @@ -4362,55 +3826,80 @@ bool get_rep_dir(DIRECTION *dp, bool under) /* Save direction */ (*dp) = dir; -#ifdef ALLOW_REPEAT /* TNB */ - -/* repeat_push(dir); */ - repeat_push(command_dir); - -#endif /* ALLOW_REPEAT -- TNB */ + /* repeat_push(dir); */ + repeat_push((COMMAND_CODE)command_dir); /* 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(dp)) + if (repeat_pull(&code)) { - dir = *dp; + dir = (DIRECTION)code; /* return (TRUE); */ } + *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); - /* Oops */ - if (!dir) bell(); + if (!dir) bell(); + } } /* Prevent weirdness */ - if (dir == 5) dir = 0; + if ((dir == 5) && (!under)) dir = 0; /* Aborted */ if (!dir) return (FALSE); @@ -4428,23 +3917,62 @@ 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 + { + GAME_TEXT m_name[MAX_NLEN]; + 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_dir); - -#endif /* ALLOW_REPEAT -- TNB */ + repeat_push((COMMAND_CODE)command_dir); /* Success */ return (TRUE); @@ -4460,7 +3988,7 @@ void gain_level_reward(int chosen_reward) OBJECT_SUBTYPE_VALUE dummy2 = 0; int type, effect; cptr reward = NULL; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; int count = 0; @@ -4485,27 +4013,13 @@ void gain_level_reward(int chosen_reward) type--; -#ifdef JP -sprintf(wrath_reason, "%sの怒り", - chaos_patrons[p_ptr->chaos_patron]); -#else - sprintf(wrath_reason, "the Wrath of %s", - chaos_patrons[p_ptr->chaos_patron]); -#endif - + sprintf(wrath_reason, _("%sの怒り", "the Wrath of %s"), chaos_patrons[p_ptr->chaos_patron]); effect = chaos_rewards[p_ptr->chaos_patron][type]; if (one_in_(6) && !chosen_reward) { -#ifdef JP -msg_format("%^sは褒美としてあなたを突然変異させた。", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("%^s rewards you with a mutation!", - chaos_patrons[p_ptr->chaos_patron]); -#endif - + msg_format(_("%^sは褒美としてあなたを突然変異させた。", "%^s rewards you with a mutation!"), chaos_patrons[p_ptr->chaos_patron]); (void)gain_random_mutation(0); reward = _("変異した。", "mutation"); } @@ -4513,29 +4027,19 @@ msg_format("%^sは褒美としてあなたを突然変異させた。", { switch (chosen_reward ? chosen_reward : effect) { + case REW_POLY_SLF: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「汝、新たなる姿を必要とせり!」", "'Thou needst a new form, mortal!'")); do_poly_self(); reward = _("変異した。", "polymorphing"); break; + case REW_GAIN_EXP: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「汝は良く行いたり!続けよ!」", "'Well done, mortal! Lead on!'")); if (p_ptr->prace == RACE_ANDROID) @@ -4552,15 +4056,10 @@ msg_format("%sの声が響き渡った:", reward = _("経験値を得た", "experience"); } break; + case REW_LOSE_EXP: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「下僕よ、汝それに値せず。」", "'Thou didst not deserve that, slave.'")); if (p_ptr->prace == RACE_ANDROID) @@ -4573,9 +4072,10 @@ msg_format("%sの声が響き渡った:", reward = _("経験値を失った。", "losing experience"); } break; + case REW_GOOD_OBJ: #ifdef JP -msg_format("%sの声がささやいた:", + msg_format("%sの声がささやいた:", chaos_patrons[p_ptr->chaos_patron]); #else msg_format("The voice of %s whispers:", @@ -4587,32 +4087,20 @@ msg_format("%sの声がささやいた:", acquirement(p_ptr->y, p_ptr->x, 1, FALSE, FALSE, FALSE); reward = _("上質なアイテムを手に入れた。", "a good item"); break; + case REW_GREA_OBJ: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「我が与えし物を賢明に使うべし。」", "'Use my gift wisely.'")); acquirement(p_ptr->y, p_ptr->x, 1, TRUE, FALSE, FALSE); reward = _("高級品のアイテムを手に入れた。", "an excellent item"); break; + case REW_CHAOS_WP: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + 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)) @@ -4707,46 +4195,33 @@ msg_format("%sの声が響き渡った:", q_ptr->to_d = 3 + randint1(dun_level) % 10; one_resistance(q_ptr); q_ptr->name2 = EGO_CHAOTIC; - - /* Drop it in the dungeon */ (void)drop_near(q_ptr, -1, p_ptr->y, p_ptr->x); reward = _("(混沌)の武器を手に入れた。", "chaos weapon"); break; + case REW_GOOD_OBS: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「汝の行いは貴き報いに値せり。」", "'Thy deed hath earned thee a worthy reward.'")); acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, FALSE, FALSE, FALSE); reward = _("上質なアイテムを手に入れた。", "good items"); break; + case REW_GREA_OBS: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「下僕よ、汝の献身への我が惜しみ無き報いを見るがよい。」", "'Behold, mortal, how generously I reward thy loyalty.'")); acquirement(p_ptr->y, p_ptr->x, randint1(2) + 1, TRUE, FALSE, FALSE); reward = _("高級品のアイテムを手に入れた。", "excellent items"); break; + case REW_TY_CURSE: #ifdef JP -msg_format("%sの声が轟き渡った:", - chaos_patrons[p_ptr->chaos_patron]); + msg_format("%sの声が轟き渡った:", chaos_patrons[p_ptr->chaos_patron]); #else - msg_format("The voice of %s thunders:", - chaos_patrons[p_ptr->chaos_patron]); + msg_format("The voice of %s thunders:", chaos_patrons[p_ptr->chaos_patron]); #endif msg_print(_("「下僕よ、汝傲慢なり。」", "'Thou art growing arrogant, mortal.'")); @@ -4754,40 +4229,33 @@ msg_format("%sの声が轟き渡った:", (void)activate_ty_curse(FALSE, &count); reward = _("禍々しい呪いをかけられた。", "cursing"); break; + case REW_SUMMON_M: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「我が下僕たちよ、かの傲慢なる者を倒すべし!」", "'My pets, destroy the arrogant mortal!'")); for (dummy = 0; dummy < randint1(5) + 1; dummy++) { - (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET)); + (void)summon_specific(0, p_ptr->y, p_ptr->x, dun_level, 0, (PM_ALLOW_GROUP | PM_ALLOW_UNIQUE | PM_NO_PET), '\0'); } reward = _("モンスターを召喚された。", "summoning hostile monsters"); break; + + case REW_H_SUMMON: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「汝、より強き敵を必要とせり!」", "'Thou needst worthier opponents!'")); activate_hi_summon(p_ptr->y, p_ptr->x, FALSE); reward = _("モンスターを召喚された。", "summoning many hostile monsters"); break; + + case REW_DO_HAVOC: #ifdef JP -msg_format("%sの声が響き渡った:", + msg_format("%sの声が響き渡った:", chaos_patrons[p_ptr->chaos_patron]); #else msg_format("The voice of %s booms out:", @@ -4799,9 +4267,11 @@ msg_format("%sの声が響き渡った:", call_chaos(); reward = _("カオスの力が渦巻いた。", "calling chaos"); break; + + case REW_GAIN_ABL: #ifdef JP -msg_format("%sの声が鳴り響いた:", + msg_format("%sの声が鳴り響いた:", chaos_patrons[p_ptr->chaos_patron]); #else msg_format("The voice of %s rings out:", @@ -4816,9 +4286,11 @@ msg_format("%sの声が鳴り響いた:", do_inc_stat(randint0(6)); reward = _("能力値が上がった。", "increasing a stat"); break; + + case REW_LOSE_ABL: #ifdef JP -msg_format("%sの声が響き渡った:", + msg_format("%sの声が響き渡った:", chaos_patrons[p_ptr->chaos_patron]); #else msg_format("The voice of %s booms out:", @@ -4833,9 +4305,12 @@ msg_format("%sの声が響き渡った:", (void)do_dec_stat(randint0(6)); reward = _("能力値が下がった。", "decreasing a stat"); break; + + case REW_RUIN_ABL: + #ifdef JP -msg_format("%sの声が轟き渡った:", + msg_format("%sの声が轟き渡った:", chaos_patrons[p_ptr->chaos_patron]); #else msg_format("The voice of %s thunders:", @@ -4845,86 +4320,57 @@ msg_format("%sの声が轟き渡った:", msg_print(_("「汝、謙虚たることを学ぶべし!」", "'Thou needst a lesson in humility, mortal!'")); msg_print(_("あなたは以前より弱くなった!", "You feel less powerful!")); - for (dummy = 0; dummy < 6; dummy++) + for (dummy = 0; dummy < A_MAX; dummy++) { (void)dec_stat(dummy, 10 + randint1(15), TRUE); } reward = _("全能力値が下がった。", "decreasing all stats"); break; + case REW_POLY_WND: - msg_format(_("%sの力が触れるのを感じた。", "You feel the power of %s touch you."), + msg_format(_("%sの力が触れるのを感じた。", "You feel the power of %s touch you."), chaos_patrons[p_ptr->chaos_patron]); do_poly_wounds(); reward = _("傷が変化した。", "polymorphing wounds"); break; + case REW_AUGM_ABL: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「我がささやかなる賜物を受けとるがよい!」", "'Receive this modest gift from me!'")); - for (dummy = 0; dummy < 6; dummy++) + for (dummy = 0; dummy < A_MAX; dummy++) { (void)do_inc_stat(dummy); } reward = _("全能力値が上がった。", "increasing all stats"); break; + case REW_HURT_LOT: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「苦しむがよい、無能な愚か者よ!」", "'Suffer, pathetic fool!'")); fire_ball(GF_DISINTEGRATE, 0, p_ptr->lev * 4, 4); take_hit(DAMAGE_NOESCAPE, p_ptr->lev * 4, wrath_reason, -1); reward = _("分解の球が発生した。", "generating disintegration ball"); break; - case REW_HEAL_FUL: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif - msg_print(_("「甦るがよい、我が下僕よ!」", "'Rise, my servant!'")); - - restore_level(); - (void)set_poisoned(0); - (void)set_blind(0); - (void)set_confused(0); - (void)set_image(0); - (void)set_stun(0); - (void)set_cut(0); - hp_player(5000); - for (dummy = 0; dummy < 6; dummy++) - { - (void)do_res_stat(dummy); - } + case REW_HEAL_FUL: + + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); + (void)restore_level(); + (void)restore_all_status(); + (void)true_healing(5000); reward = _("体力が回復した。", "healing"); break; + case REW_CURSE_WP: - if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM)) break; -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + if (!buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM)) break; + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「汝、武器に頼ることなかれ。」", "'Thou reliest too much on thy weapon.'")); dummy = INVEN_RARM; @@ -4937,16 +4383,11 @@ msg_format("%sの声が響き渡った:", (void)curse_weapon(FALSE, dummy); reward = format(_("%sが破壊された。", "destroying %s"), o_name); break; + case REW_CURSE_AR: - if (!inventory[INVEN_BODY].k_idx) break; -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + if (!inventory[INVEN_BODY].k_idx) break; + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「汝、防具に頼ることなかれ。」", "'Thou reliest too much on thine equipment.'")); object_desc(o_name, &inventory[INVEN_BODY], OD_NAME_ONLY); @@ -4954,14 +4395,8 @@ msg_format("%sの声が響き渡った:", reward = format(_("%sが破壊された。", "destroying %s"), o_name); break; case REW_PISS_OFF: -#ifdef JP -msg_format("%sの声がささやいた:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s whispers:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声がささやいた:", "The voice of %s whispers:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「我を怒りしめた罪を償うべし。」", "'Now thou shalt pay for annoying me.'")); switch (randint1(4)) @@ -4997,7 +4432,7 @@ msg_format("%sの声がささやいた:", } break; default: - for (dummy = 0; dummy < 6; dummy++) + for (dummy = 0; dummy < A_MAX; dummy++) { (void)dec_stat(dummy, 10 + randint1(15), TRUE); } @@ -5005,14 +4440,14 @@ msg_format("%sの声がささやいた:", break; } break; + case REW_WRATH: - msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), - chaos_patrons[p_ptr->chaos_patron]); + msg_format(_("%sの声が轟き渡った:", "The voice of %s thunders:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「死ぬがよい、下僕よ!」", "'Die, mortal!'")); take_hit(DAMAGE_LOSELIFE, p_ptr->lev * 4, wrath_reason, -1); - for (dummy = 0; dummy < 6; dummy++) + for (dummy = 0; dummy < A_MAX; dummy++) { (void)dec_stat(dummy, 10 + randint1(15), FALSE); } @@ -5033,96 +4468,75 @@ msg_format("%sの声がささやいた:", } if (one_in_(2)) (void)curse_armor(); break; + case REW_DESTRUCT: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「死と破壊こそ我が喜びなり!」", "'Death and destruction! This pleaseth me!'")); (void)destroy_area(p_ptr->y, p_ptr->x, 25, FALSE); reward = _("ダンジョンが*破壊*された。", "*destruct*ing dungeon"); break; + case REW_GENOCIDE: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'")); - (void)symbol_genocide(0, FALSE); reward = _("モンスターが抹殺された。", "genociding monsters"); break; + case REW_MASS_GEN: -#ifdef JP -msg_format("%sの声が響き渡った:", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("The voice of %s booms out:", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの声が響き渡った:", "The voice of %s booms out:"), chaos_patrons[p_ptr->chaos_patron]); msg_print(_("「我、汝の敵を抹殺せん!」", "'Let me relieve thee of thine oppressors!'")); (void)mass_genocide(0, FALSE); reward = _("モンスターが抹殺された。", "genociding nearby monsters"); break; + case REW_DISPEL_C: -#ifdef JP -msg_format("%sの力が敵を攻撃するのを感じた!", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("You can feel the power of %s assault your enemies!", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sの力が敵を攻撃するのを感じた!", "You can feel the power of %s assault your enemies!"), chaos_patrons[p_ptr->chaos_patron]); (void)dispel_monsters(p_ptr->lev * 4); break; + case REW_IGNORE: -#ifdef JP -msg_format("%sはあなたを無視した。", - chaos_patrons[p_ptr->chaos_patron]); -#else - msg_format("%s ignores you.", - chaos_patrons[p_ptr->chaos_patron]); -#endif + msg_format(_("%sはあなたを無視した。", "%s ignores you."), chaos_patrons[p_ptr->chaos_patron]); break; + case REW_SER_DEMO: + msg_format(_("%sは褒美として悪魔の使いをよこした!", "%s rewards you with a demonic servant!"),chaos_patrons[p_ptr->chaos_patron]); - if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET)) + if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_DEMON, PM_FORCE_PET, '\0')) msg_print(_("何も現れなかった...", "Nobody ever turns up...")); else reward = _("悪魔がペットになった。", "a demonic servant"); break; + case REW_SER_MONS: msg_format(_("%sは褒美として使いをよこした!", "%s rewards you with a servant!"),chaos_patrons[p_ptr->chaos_patron]); - if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET)) + if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, 0, PM_FORCE_PET, '\0')) msg_print(_("何も現れなかった...", "Nobody ever turns up...")); else reward = _("モンスターがペットになった。", "a servant"); break; + case REW_SER_UNDE: msg_format(_("%sは褒美としてアンデッドの使いをよこした。", "%s rewards you with an undead servant!"),chaos_patrons[p_ptr->chaos_patron]); - if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET)) + if (!summon_specific(-1, p_ptr->y, p_ptr->x, dun_level, SUMMON_UNDEAD, PM_FORCE_PET, '\0')) msg_print(_("何も現れなかった...", "Nobody ever turns up...")); else reward = _("アンデッドがペットになった。", "an undead servant"); break; + default: msg_format(_("%sの声がどもった:", "The voice of %s stammers:"), @@ -5170,7 +4584,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); } @@ -5221,9 +4634,8 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr) POSITION x, y; bool success = FALSE; - int wid, hgt; + TERM_LEN wid, hgt; - /* Get size */ get_screen_size(&wid, &hgt); x = p_ptr->x; @@ -5291,16 +4703,11 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr) x = p_ptr->x; verify_panel(); /* Move cursor to player */ - /* Update stuff */ p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); } else /* move cursor to next stair and change panel */ @@ -5382,16 +4789,11 @@ bool tgt_pt(POSITION *x_ptr, POSITION *y_ptr) /* Recenter the map around the player */ verify_panel(); - /* Update stuff */ p_ptr->update |= (PU_MONSTERS); - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD); - - /* Handle stuff */ handle_stuff(); *x_ptr = x; @@ -5406,7 +4808,6 @@ bool get_hack_dir(DIRECTION *dp) cptr p; char command; - /* Initialize */ (*dp) = 0; /* Global direction */ @@ -5483,7 +4884,6 @@ bool get_hack_dir(DIRECTION *dp) /* Check for confusion */ if (p_ptr->confused) { - /* XXX XXX XXX */ /* Random direction */ dir = ddd[randint0(8)]; } @@ -5503,35 +4903,14 @@ bool get_hack_dir(DIRECTION *dp) } -/* - * エネルギーの増加量10d5を速く計算するための関数 - */ - -#define Go_no_JuuJou 5*5*5*5*5*5*5*5*5*5 - -s16b gain_energy(void) -{ - int i; - s32b energy_result = 10; - s32b tmp; - - tmp = randint0(Go_no_JuuJou); - - for (i = 0; i < 9; i ++){ - energy_result += tmp % 5; - tmp /= 5; - } - - return (s16b)(energy_result + tmp); -} - - -/* - * Return bow energy +/*! + * @brief 射撃武器の攻撃に必要な基本消費エネルギーを返す/Return bow energy + * @param sval 射撃武器のアイテム副分類ID + * @return 消費する基本エネルギー */ -s16b bow_energy(OBJECT_SUBTYPE_VALUE sval) +ENERGY bow_energy(OBJECT_SUBTYPE_VALUE sval) { - int energy = 100; + ENERGY energy = 10000; /* Analyze the launcher */ switch (sval) @@ -5639,69 +5018,6 @@ int bow_tmul(OBJECT_SUBTYPE_VALUE sval) return (tmul); } -/* - * Return alignment title - */ -cptr your_alignment(void) -{ -#ifdef JP - if (p_ptr->align > 150) return "大善"; - else if (p_ptr->align > 50) return "中善"; - else if (p_ptr->align > 10) return "小善"; - else if (p_ptr->align > -11) return "中立"; - else if (p_ptr->align > -51) return "小悪"; - else if (p_ptr->align > -151) return "中悪"; - else return "大悪"; -#else - if (p_ptr->align > 150) return "Lawful"; - else if (p_ptr->align > 50) return "Good"; - else if (p_ptr->align > 10) return "Neutral Good"; - else if (p_ptr->align > -11) return "Neutral"; - else if (p_ptr->align > -51) return "Neutral Evil"; - else if (p_ptr->align > -151) return "Evil"; - else return "Chaotic"; -#endif -} - - -/* - * Return proficiency level of weapons and misc. skills (except riding) - */ -int weapon_exp_level(int weapon_exp) -{ - if (weapon_exp < WEAPON_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED; - else if (weapon_exp < WEAPON_EXP_SKILLED) return EXP_LEVEL_BEGINNER; - else if (weapon_exp < WEAPON_EXP_EXPERT) return EXP_LEVEL_SKILLED; - else if (weapon_exp < WEAPON_EXP_MASTER) return EXP_LEVEL_EXPERT; - else return EXP_LEVEL_MASTER; -} - - -/* - * Return proficiency level of riding - */ -int riding_exp_level(int riding_exp) -{ - if (riding_exp < RIDING_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED; - else if (riding_exp < RIDING_EXP_SKILLED) return EXP_LEVEL_BEGINNER; - else if (riding_exp < RIDING_EXP_EXPERT) return EXP_LEVEL_SKILLED; - else if (riding_exp < RIDING_EXP_MASTER) return EXP_LEVEL_EXPERT; - else return EXP_LEVEL_MASTER; -} - - -/* - * Return proficiency level of spells - */ -int spell_exp_level(int spell_exp) -{ - if (spell_exp < SPELL_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED; - else if (spell_exp < SPELL_EXP_SKILLED) return EXP_LEVEL_BEGINNER; - else if (spell_exp < SPELL_EXP_EXPERT) return EXP_LEVEL_SKILLED; - else if (spell_exp < SPELL_EXP_MASTER) return EXP_LEVEL_EXPERT; - else return EXP_LEVEL_MASTER; -} - /* * Display a rumor and apply its effects @@ -5798,9 +5114,9 @@ void display_rumor(bool ex) r_ptr->r_sights++; } } - else if (strcmp(zz[0], "DUNGEON") == 0) + else if (strcmp(zz[0], "DUNGEON") == 0) { - int d_idx; + DUNGEON_IDX d_idx; dungeon_info_type *d_ptr; while (1)