From 1e2fa9ae4630dbd291c6442e49937088280d3479 Mon Sep 17 00:00:00 2001 From: Hourier Date: Sun, 7 Jun 2020 12:45:07 +0900 Subject: [PATCH] [Refactor] #40399 Reshaped object1.c --- src/object/object1.c | 397 +++++++++++++++++++++++---------------------------- 1 file changed, 177 insertions(+), 220 deletions(-) diff --git a/src/object/object1.c b/src/object/object1.c index 4de7b497a..5e4205814 100644 --- a/src/object/object1.c +++ b/src/object/object1.c @@ -13,35 +13,14 @@ #include "object/object1.h" #include "art-definition/art-weapon-types.h" #include "cmd-item/cmd-activate.h" -#include "cmd-item/cmd-smith.h" -#include "combat/snipe.h" #include "floor/floor.h" -#include "inventory/player-inventory.h" -#include "io/files-util.h" -#include "io/read-pref-file.h" -#include "monster/monster.h" #include "object-enchant/artifact.h" -#include "object-enchant/item-apply-magic.h" -#include "perception/object-perception.h" #include "object-enchant/object-ego.h" #include "object/object-flags.h" -#include "object/object-flavor.h" -#include "object/object-hook.h" #include "object/object-kind.h" -#include "object-enchant/special-object-flags.h" -#include "sv-definition/sv-amulet-types.h" -#include "sv-definition/sv-lite-types.h" #include "sv-definition/sv-other-types.h" #include "sv-definition/sv-ring-types.h" -#include "sv-definition/sv-weapon-types.h" -#include "object-enchant/tr-types.h" -#include "object-enchant/trc-types.h" -#include "player/player-class.h" -#include "player/player-move.h" -#include "system/system-variables.h" #include "term/term-color-types.h" -#include "util/util.h" -#include "view/display-main-window.h" /*! * @brief オブジェクトの発動効果名称を返す(サブルーチン/ブレス) @@ -50,29 +29,27 @@ */ static concptr item_activation_dragon_breath(object_type *o_ptr) { - static char desc[256]; - BIT_FLAGS flgs[TR_FLAG_SIZE]; /* for resistance flags */ - int n = 0; + static char desc[256]; + BIT_FLAGS flgs[TR_FLAG_SIZE]; /* for resistance flags */ + int n = 0; - object_flags(o_ptr, flgs); - strcpy(desc, _("", "breath ")); + object_flags(o_ptr, flgs); + strcpy(desc, _("", "breath ")); - for (int i = 0; dragonbreath_info[i].flag != 0; i++) - { - if (have_flag(flgs, dragonbreath_info[i].flag)) - { - if (n > 0) strcat(desc, _("、", ", ")); + for (int i = 0; dragonbreath_info[i].flag != 0; i++) { + if (have_flag(flgs, dragonbreath_info[i].flag)) { + if (n > 0) + strcat(desc, _("、", ", ")); - strcat(desc, dragonbreath_info[i].name); - n++; - } - } + strcat(desc, dragonbreath_info[i].name); + n++; + } + } - strcat(desc, _("のブレス(250)", "")); - return (desc); + strcat(desc, _("のブレス(250)", "")); + return (desc); } - /*! * @brief オブジェクトの発動効果名称を返す(サブルーチン/汎用) * @param o_ptr 名称を取得する元のオブジェクト構造体参照ポインタ @@ -80,93 +57,89 @@ static concptr item_activation_dragon_breath(object_type *o_ptr) */ static concptr item_activation_aux(object_type *o_ptr) { - static char activation_detail[256]; - char timeout[32]; - const activation_type* const act_ptr = find_activation_info(o_ptr); + static char activation_detail[256]; + char timeout[32]; + const activation_type *const act_ptr = find_activation_info(o_ptr); - if (!act_ptr) return _("未定義", "something undefined"); + if (!act_ptr) + return _("未定義", "something undefined"); - concptr desc = act_ptr->desc; - switch (act_ptr->index) { - case ACT_BR_FIRE: - if ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES)) - desc = _("火炎のブレス (200) と火への耐性", "breath of fire (200) and resist fire"); - break; - case ACT_BR_COLD: - if ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE)) - desc = _("冷気のブレス (200) と冷気への耐性", "breath of cold (200) and resist cold"); - break; - case ACT_BR_DRAGON: - desc = item_activation_dragon_breath(o_ptr); - break; - case ACT_AGGRAVATE: - if (o_ptr->name1 == ART_HYOUSIGI) - desc = _("拍子木を打ちならす", "beat wooden clappers"); - break; - case ACT_RESIST_ACID: - if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ACID)) || (o_ptr->name2 == EGO_BRAND_ACID)) - desc = _("アシッド・ボール (100) と酸への耐性", "ball of acid (100) and resist acid"); - break; - case ACT_RESIST_FIRE: - if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES)) || (o_ptr->name2 == EGO_BRAND_FIRE)) - desc = _("ファイア・ボール (100) と火への耐性", "ball of fire (100) and resist fire"); - break; - case ACT_RESIST_COLD: - if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE)) || (o_ptr->name2 == EGO_BRAND_COLD)) - desc = _("アイス・ボール (100) と冷気への耐性", "ball of cold (100) and resist cold"); - break; - case ACT_RESIST_ELEC: - if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ELEC)) || (o_ptr->name2 == EGO_BRAND_ELEC)) - desc = _("サンダー・ボール (100) と電撃への耐性", "ball of elec (100) and resist elec"); - break; - case ACT_RESIST_POIS: - if (o_ptr->name2 == EGO_BRAND_POIS) - desc = _("悪臭雲 (100) と毒への耐性", "ball of poison (100) and resist elec"); - break; - } + concptr desc = act_ptr->desc; + switch (act_ptr->index) { + case ACT_BR_FIRE: + if ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES)) + desc = _("火炎のブレス (200) と火への耐性", "breath of fire (200) and resist fire"); + break; + case ACT_BR_COLD: + if ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE)) + desc = _("冷気のブレス (200) と冷気への耐性", "breath of cold (200) and resist cold"); + break; + case ACT_BR_DRAGON: + desc = item_activation_dragon_breath(o_ptr); + break; + case ACT_AGGRAVATE: + if (o_ptr->name1 == ART_HYOUSIGI) + desc = _("拍子木を打ちならす", "beat wooden clappers"); + break; + case ACT_RESIST_ACID: + if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ACID)) || (o_ptr->name2 == EGO_BRAND_ACID)) + desc = _("アシッド・ボール (100) と酸への耐性", "ball of acid (100) and resist acid"); + break; + case ACT_RESIST_FIRE: + if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES)) || (o_ptr->name2 == EGO_BRAND_FIRE)) + desc = _("ファイア・ボール (100) と火への耐性", "ball of fire (100) and resist fire"); + break; + case ACT_RESIST_COLD: + if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE)) || (o_ptr->name2 == EGO_BRAND_COLD)) + desc = _("アイス・ボール (100) と冷気への耐性", "ball of cold (100) and resist cold"); + break; + case ACT_RESIST_ELEC: + if (((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ELEC)) || (o_ptr->name2 == EGO_BRAND_ELEC)) + desc = _("サンダー・ボール (100) と電撃への耐性", "ball of elec (100) and resist elec"); + break; + case ACT_RESIST_POIS: + if (o_ptr->name2 == EGO_BRAND_POIS) + desc = _("悪臭雲 (100) と毒への耐性", "ball of poison (100) and resist elec"); + break; + } - /* Timeout description */ - int constant = act_ptr->timeout.constant; - int dice = act_ptr->timeout.dice; - if (constant == 0 && dice == 0) { - /* We can activate it every turn */ - strcpy(timeout, _("いつでも", "every turn")); - } else if (constant < 0) { - /* Activations that have special timeout */ - switch (act_ptr->index) { - case ACT_BR_FIRE: - sprintf(timeout, _("%d ターン毎", "every %d turns"), - ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES)) ? 200 : 250); - break; - case ACT_BR_COLD: - sprintf(timeout, _("%d ターン毎", "every %d turns"), - ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE)) ? 200 : 250); - break; - case ACT_TERROR: - strcpy(timeout, _("3*(レベル+10) ターン毎", "every 3 * (level+10) turns")); - break; - case ACT_MURAMASA: - strcpy(timeout, _("確率50%で壊れる", "(destroyed 50%)")); - break; - default: - strcpy(timeout, "undefined"); - break; - } - } else { - char constant_str[16], dice_str[16]; - sprintf(constant_str, "%d", constant); - sprintf(dice_str, "d%d", dice); - sprintf(timeout, _("%s%s%s ターン毎", "every %s%s%s turns"), - (constant > 0) ? constant_str : "", - (constant > 0 && dice > 0) ? "+" : "", - (dice > 0) ? dice_str : ""); - } + /* Timeout description */ + int constant = act_ptr->timeout.constant; + int dice = act_ptr->timeout.dice; + if (constant == 0 && dice == 0) { + /* We can activate it every turn */ + strcpy(timeout, _("いつでも", "every turn")); + } else if (constant < 0) { + /* Activations that have special timeout */ + switch (act_ptr->index) { + case ACT_BR_FIRE: + sprintf(timeout, _("%d ターン毎", "every %d turns"), ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_FLAMES)) ? 200 : 250); + break; + case ACT_BR_COLD: + sprintf(timeout, _("%d ターン毎", "every %d turns"), ((o_ptr->tval == TV_RING) && (o_ptr->sval == SV_RING_ICE)) ? 200 : 250); + break; + case ACT_TERROR: + strcpy(timeout, _("3*(レベル+10) ターン毎", "every 3 * (level+10) turns")); + break; + case ACT_MURAMASA: + strcpy(timeout, _("確率50%で壊れる", "(destroyed 50%)")); + break; + default: + strcpy(timeout, "undefined"); + break; + } + } else { + char constant_str[16], dice_str[16]; + sprintf(constant_str, "%d", constant); + sprintf(dice_str, "d%d", dice); + sprintf(timeout, _("%s%s%s ターン毎", "every %s%s%s turns"), (constant > 0) ? constant_str : "", (constant > 0 && dice > 0) ? "+" : "", + (dice > 0) ? dice_str : ""); + } - sprintf(activation_detail, _("%s : %s", "%s %s"), desc, timeout); - return activation_detail; + sprintf(activation_detail, _("%s : %s", "%s %s"), desc, timeout); + return activation_detail; } - /*! * @brief オブジェクトの発動効果名称を返す(メインルーチン) / * Determine the "Activation" (if any) for an artifact Return a string, or NULL for "no activation" @@ -175,29 +148,26 @@ static concptr item_activation_aux(object_type *o_ptr) */ concptr item_activation(object_type *o_ptr) { - BIT_FLAGS flgs[TR_FLAG_SIZE]; - object_flags(o_ptr, flgs); - if (!(have_flag(flgs, TR_ACTIVATE))) return (_("なし", "nothing")); + BIT_FLAGS flgs[TR_FLAG_SIZE]; + object_flags(o_ptr, flgs); + if (!(have_flag(flgs, TR_ACTIVATE))) + return (_("なし", "nothing")); - if (activation_index(o_ptr)) - { - return item_activation_aux(o_ptr); - } + if (activation_index(o_ptr)) { + return item_activation_aux(o_ptr); + } - if (o_ptr->tval == TV_WHISTLE) - { - return _("ペット呼び寄せ : 100+d100ターン毎", "call pet every 100+d100 turns"); - } + if (o_ptr->tval == TV_WHISTLE) { + return _("ペット呼び寄せ : 100+d100ターン毎", "call pet every 100+d100 turns"); + } - if (o_ptr->tval == TV_CAPTURE) - { - return _("モンスターを捕える、又は解放する。", "captures or releases a monster."); - } + if (o_ptr->tval == TV_CAPTURE) { + return _("モンスターを捕える、又は解放する。", "captures or releases a monster."); + } - return _("何も起きない", "Nothing"); + return _("何も起きない", "Nothing"); } - /*! * @brief オブジェクト選択時の選択アルファベットラベルを返す / * Convert an inventory index into a one character label @@ -205,11 +175,7 @@ concptr item_activation(object_type *o_ptr) * @return 対応するアルファベット * @details Note that the label does NOT distinguish inven/equip. */ -char index_to_label(int i) -{ - return (i < INVEN_RARM) ? (I2A(i)) : (I2A(i - INVEN_RARM)); -} - +char index_to_label(int i) { return (i < INVEN_RARM) ? (I2A(i)) : (I2A(i - INVEN_RARM)); } /*! * @brief オブジェクトの該当装備部位IDを返す / @@ -219,73 +185,65 @@ char index_to_label(int i) */ s16b wield_slot(player_type *owner_ptr, object_type *o_ptr) { - switch (o_ptr->tval) - { - case TV_DIGGING: - case TV_HAFTED: - case TV_POLEARM: - case TV_SWORD: - { - if (!owner_ptr->inventory_list[INVEN_RARM].k_idx) return (INVEN_RARM); - if (owner_ptr->inventory_list[INVEN_LARM].k_idx) return (INVEN_RARM); - return (INVEN_LARM); - } - case TV_CAPTURE: - case TV_CARD: - case TV_SHIELD: - { - if (!owner_ptr->inventory_list[INVEN_LARM].k_idx) return (INVEN_LARM); - if (owner_ptr->inventory_list[INVEN_RARM].k_idx) return (INVEN_LARM); - return (INVEN_RARM); - } - case TV_BOW: - { - return (INVEN_BOW); - } - case TV_RING: - { - if (!owner_ptr->inventory_list[INVEN_RIGHT].k_idx) return (INVEN_RIGHT); + switch (o_ptr->tval) { + case TV_DIGGING: + case TV_HAFTED: + case TV_POLEARM: + case TV_SWORD: { + if (!owner_ptr->inventory_list[INVEN_RARM].k_idx) + return (INVEN_RARM); + if (owner_ptr->inventory_list[INVEN_LARM].k_idx) + return (INVEN_RARM); + return (INVEN_LARM); + } + case TV_CAPTURE: + case TV_CARD: + case TV_SHIELD: { + if (!owner_ptr->inventory_list[INVEN_LARM].k_idx) + return (INVEN_LARM); + if (owner_ptr->inventory_list[INVEN_RARM].k_idx) + return (INVEN_LARM); + return (INVEN_RARM); + } + case TV_BOW: { + return (INVEN_BOW); + } + case TV_RING: { + if (!owner_ptr->inventory_list[INVEN_RIGHT].k_idx) + return (INVEN_RIGHT); - return (INVEN_LEFT); - } - case TV_AMULET: - case TV_WHISTLE: - { - return (INVEN_NECK); - } - case TV_LITE: - { - return (INVEN_LITE); - } - case TV_DRAG_ARMOR: - case TV_HARD_ARMOR: - case TV_SOFT_ARMOR: - { - return (INVEN_BODY); - } - case TV_CLOAK: - { - return (INVEN_OUTER); - } - case TV_CROWN: - case TV_HELM: - { - return (INVEN_HEAD); - } - case TV_GLOVES: - { - return (INVEN_HANDS); - } - case TV_BOOTS: - { - return (INVEN_FEET); - } - } + return (INVEN_LEFT); + } + case TV_AMULET: + case TV_WHISTLE: { + return (INVEN_NECK); + } + case TV_LITE: { + return (INVEN_LITE); + } + case TV_DRAG_ARMOR: + case TV_HARD_ARMOR: + case TV_SOFT_ARMOR: { + return (INVEN_BODY); + } + case TV_CLOAK: { + return (INVEN_OUTER); + } + case TV_CROWN: + case TV_HELM: { + return (INVEN_HEAD); + } + case TV_GLOVES: { + return (INVEN_HANDS); + } + case TV_BOOTS: { + return (INVEN_FEET); + } + } - return -1; + return -1; } - /*! * @brief tval/sval指定のベースアイテムがプレイヤーの使用可能な魔法書かどうかを返す / * Hack: Check if a spellbook is one of the realms we can use. -- TY @@ -295,24 +253,22 @@ s16b wield_slot(player_type *owner_ptr, object_type *o_ptr) */ bool check_book_realm(player_type *owner_ptr, const tval_type book_tval, const OBJECT_SUBTYPE_VALUE book_sval) { - if (book_tval < TV_LIFE_BOOK) return FALSE; - if (owner_ptr->pclass == CLASS_SORCERER) - { - return is_magic(tval2realm(book_tval)); - } - else if (owner_ptr->pclass == CLASS_RED_MAGE) - { - if (is_magic(tval2realm(book_tval))) - return ((book_tval == TV_ARCANE_BOOK) || (book_sval < 2)); - } + if (book_tval < TV_LIFE_BOOK) + return FALSE; + if (owner_ptr->pclass == CLASS_SORCERER) { + return is_magic(tval2realm(book_tval)); + } else if (owner_ptr->pclass == CLASS_RED_MAGE) { + if (is_magic(tval2realm(book_tval))) + return ((book_tval == TV_ARCANE_BOOK) || (book_sval < 2)); + } - return (REALM1_BOOK == book_tval || REALM2_BOOK == book_tval); + return (REALM1_BOOK == book_tval || REALM2_BOOK == book_tval); } object_type *ref_item(player_type *owner_ptr, INVENTORY_IDX item) { floor_type *floor_ptr = owner_ptr->current_floor_ptr; - return item >= 0 ? &owner_ptr->inventory_list[item] : &(floor_ptr->o_list[0 - item]); + return item >= 0 ? &owner_ptr->inventory_list[item] : &(floor_ptr->o_list[0 - item]); } /* @@ -322,8 +278,9 @@ object_type *ref_item(player_type *owner_ptr, INVENTORY_IDX item) */ TERM_COLOR object_attr(object_type *o_ptr) { - return((k_info[o_ptr->k_idx].flavor) ? (k_info[k_info[o_ptr->k_idx].flavor].x_attr) - : ((!o_ptr->k_idx || (o_ptr->tval != TV_CORPSE) || (o_ptr->sval != SV_CORPSE) || (k_info[o_ptr->k_idx].x_attr != TERM_DARK)) - ? (k_info[o_ptr->k_idx].x_attr) - : (r_info[o_ptr->pval].x_attr))); + return ((k_info[o_ptr->k_idx].flavor) + ? (k_info[k_info[o_ptr->k_idx].flavor].x_attr) + : ((!o_ptr->k_idx || (o_ptr->tval != TV_CORPSE) || (o_ptr->sval != SV_CORPSE) || (k_info[o_ptr->k_idx].x_attr != TERM_DARK)) + ? (k_info[o_ptr->k_idx].x_attr) + : (r_info[o_ptr->pval].x_attr))); } -- 2.11.0