From d4f653c8ea7f1c478fa315d545d6dbf15eac86d8 Mon Sep 17 00:00:00 2001 From: Hourier Date: Fri, 21 Aug 2020 14:21:28 +0900 Subject: [PATCH] [Refactor] #40653 Moved pulish_shield() from spells-object.c to spells-craft.c --- src/realm/realm-craft.c | 1040 +++++++++++++++++++++------------------- src/spell-realm/spells-craft.c | 58 +++ src/spell-realm/spells-craft.h | 1 + src/spell/spells-object.c | 48 -- src/spell/spells-object.h | 1 - 5 files changed, 609 insertions(+), 539 deletions(-) diff --git a/src/realm/realm-craft.c b/src/realm/realm-craft.c index 6f003a669..f753303e4 100644 --- a/src/realm/realm-craft.c +++ b/src/realm/realm-craft.c @@ -20,496 +20,556 @@ #include "view/display-messages.h" /*! -* @brief 匠領域魔法の各処理を行う -* @param spell 魔法ID -* @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST) -* @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。 -*/ + * @brief 匠領域魔法の各処理を行う + * @param spell 魔法ID + * @param mode 処理内容 (SPELL_NAME / SPELL_DESC / SPELL_INFO / SPELL_CAST) + * @return SPELL_NAME / SPELL_DESC / SPELL_INFO 時には文字列ポインタを返す。SPELL_CAST時はNULL文字列を返す。 + */ concptr do_craft_spell(player_type *caster_ptr, SPELL_IDX spell, spell_type mode) { - bool name = (mode == SPELL_NAME) ? TRUE : FALSE; - bool desc = (mode == SPELL_DESC) ? TRUE : FALSE; - bool info = (mode == SPELL_INFO) ? TRUE : FALSE; - bool cast = (mode == SPELL_CAST) ? TRUE : FALSE; - - PLAYER_LEVEL plev = caster_ptr->lev; - - switch (spell) - { - case 0: - if (name) return _("赤外線視力", "Infravision"); - if (desc) return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while."); - - { - int base = 100; - - if (info) return info_duration(base, base); - - if (cast) - { - set_tim_infra(caster_ptr, base + randint1(base), FALSE); - } - } - break; - - case 1: - if (name) return _("回復力強化", "Regeneration"); - if (desc) return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while."); - - { - int base = 80; - - if (info) return info_duration(base, base); - - if (cast) - { - set_tim_regen(caster_ptr, base + randint1(base), FALSE); - } - } - break; - - case 2: - if (name) return _("空腹充足", "Satisfy Hunger"); - if (desc) return _("満腹になる。", "Satisfies hunger."); - - { - if (cast) - { - set_food(caster_ptr, PY_FOOD_MAX - 1); - } - } - break; - - case 3: - if (name) return _("耐冷気", "Resist Cold"); - if (desc) return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。", - "Gives resistance to cold. This resistance can be added to that from equipment for more powerful resistance."); - - { - int base = 20; - - if (info) return info_duration(base, base); - - if (cast) - { - set_oppose_cold(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 4: - if (name) return _("耐火炎", "Resist Fire"); - if (desc) return _("一定時間、炎への耐性を得る。装備による耐性に累積する。", - "Gives resistance to fire. This resistance can be added to that from equipment for more powerful resistance."); - - { - int base = 20; - - if (info) return info_duration(base, base); - - if (cast) - { - set_oppose_fire(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 5: - if (name) return _("士気高揚", "Heroism"); - if (desc) return _("一定時間、ヒーロー気分になる。", "Removes fear. Gives a bonus to hit for a while. Heals you for 10 HP."); - - { - int base = 25; - - if (info) return info_duration(base, base); - - if (cast) - { - (void)heroism(caster_ptr, base); - } - } - break; - - case 6: - if (name) return _("耐電撃", "Resist Lightning"); - if (desc) return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。", - "Gives resistance to electricity. This resistance can be added to that from equipment for more powerful resistance."); - - { - int base = 20; - - if (info) return info_duration(base, base); - - if (cast) - { - set_oppose_elec(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 7: - if (name) return _("耐酸", "Resist Acid"); - if (desc) return _("一定時間、酸への耐性を得る。装備による耐性に累積する。", - "Gives resistance to acid. This resistance can be added to that from equipment for more powerful resistance."); - - { - int base = 20; - - if (info) return info_duration(base, base); - - if (cast) - { - set_oppose_acid(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 8: - if (name) return _("透明視認", "See Invisibility"); - if (desc) return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while."); - - { - int base = 24; - - if (info) return info_duration(base, base); - - if (cast) - { - set_tim_invis(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 9: - if (name) return _("解呪", "Remove Curse"); - if (desc) return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items."); - - { - if (cast) (void)remove_curse(caster_ptr); - } - break; - - case 10: - if (name) return _("耐毒", "Resist Poison"); - if (desc) return _("一定時間、毒への耐性を得る。装備による耐性に累積する。", - "Gives resistance to poison. This resistance can be added to that from equipment for more powerful resistance."); - - { - int base = 20; - - if (info) return info_duration(base, base); - - if (cast) - { - set_oppose_pois(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 11: - if (name) return _("狂戦士化", "Berserk"); - if (desc) return _("狂戦士化し、恐怖を除去する。", "Gives a bonus to hit and HP, immunity to fear for a while. But decreases AC."); - - { - int base = 25; - - if (info) return info_duration(base, base); - - if (cast) - { - (void)berserk(caster_ptr, base + randint1(base)); - } - } - break; - - case 12: - if (name) return _("自己分析", "Self Knowledge"); - if (desc) return _("現在の自分の状態を完全に知る。", - "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats."); - - { - if (cast) - { - self_knowledge(caster_ptr); - } - } - break; - - case 13: - if (name) return _("対邪悪結界", "Protection from Evil"); - if (desc) return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack."); - - { - int base = 3 * plev; - DICE_SID sides = 25; - - if (info) return info_duration(base, sides); - - if (cast) - { - set_protevil(caster_ptr, randint1(sides) + base, FALSE); - } - } - break; - - case 14: - if (name) return _("癒し", "Cure"); - if (desc) return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Completely heals poisons, cuts, hallucination and being stunned."); - - { - if (cast) - { - (void)true_healing(caster_ptr, 0); - } - } - break; - - case 15: - if (name) return _("魔法剣", "Mana Branding"); - if (desc) return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。", - "Causes current weapon to temporarily do additional damage from cold, fire, lightning, acid or poison. You must be wielding one or more weapons."); - - { - int base = plev / 2; - - if (info) return info_duration(base, base); - - if (cast) - { - if (!choose_ele_attack(caster_ptr)) return NULL; - } - } - break; - - case 16: - if (name) return _("テレパシー", "Telepathy"); - if (desc) return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while."); - - { - int base = 25; - DICE_SID sides = 30; - - if (info) return info_duration(base, sides); - - if (cast) - { - set_tim_esp(caster_ptr, randint1(sides) + base, FALSE); - } - } - break; - - case 17: - if (name) return _("肌石化", "Stone Skin"); - if (desc) return _("一定時間、ACを上昇させる。", "Gives a bonus to AC for a while."); - - { - int base = 30; - DICE_SID sides = 20; - - if (info) return info_duration(base, sides); - - if (cast) - { - set_shield(caster_ptr, randint1(sides) + base, FALSE); - } - } - break; - - case 18: - if (name) return _("全耐性", "Resistance"); - if (desc) return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。", - "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to those from equipment for more powerful resistances."); - - { - int base = 20; - - if (info) return info_duration(base, base); - - if (cast) - { - set_oppose_acid(caster_ptr, randint1(base) + base, FALSE); - set_oppose_elec(caster_ptr, randint1(base) + base, FALSE); - set_oppose_fire(caster_ptr, randint1(base) + base, FALSE); - set_oppose_cold(caster_ptr, randint1(base) + base, FALSE); - set_oppose_pois(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 19: - if (name) return _("スピード", "Haste Self"); - if (desc) return _("一定時間、加速する。", "Hastes you for a while."); - - { - int base = plev; - DICE_SID sides = 20 + plev; - - if (info) return info_duration(base, sides); - - if (cast) - { - set_fast(caster_ptr, randint1(sides) + base, FALSE); - } - } - break; - - case 20: - if (name) return _("壁抜け", "Walk through Wall"); - if (desc) return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while."); - - { - int base = plev / 2; - - if (info) return info_duration(base, base); - - if (cast) - { - set_pass_wall(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 21: - if (name) return _("盾磨き", "Polish Shield"); - if (desc) return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection."); - - { - if (cast) - { - pulish_shield(caster_ptr); - } - } - break; - - case 22: - if (name) return _("ゴーレム製造", "Create Golem"); - if (desc) return _("1体のゴーレムを製造する。", "Creates a golem."); - - { - if (cast) - { - if (summon_specific(caster_ptr, -1, caster_ptr->y, caster_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET)) - { - msg_print(_("ゴーレムを作った。", "You make a golem.")); - } - else - { - msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive.")); - } - } - } - break; - - case 23: - if (name) return _("魔法の鎧", "Magical armor"); - if (desc) return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。", - "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while."); - - { - int base = 20; - - if (info) return info_duration(base, base); - - if (cast) - { - set_magicdef(caster_ptr, randint1(base) + base, FALSE); - } - } - break; - - case 24: - if (name) return _("装備無力化", "Remove Enchantment"); - if (desc) return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor."); - - { - if (cast) - { - if (!mundane_spell(caster_ptr, TRUE)) return NULL; - } - } - break; - - case 25: - if (name) return _("呪い粉砕", "Remove All Curse"); - if (desc) return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items."); - - { - if (cast) (void)remove_all_curse(caster_ptr); - } - break; - - case 26: - if (name) return _("完全なる知識", "Knowledge True"); - if (desc) return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item."); - - { - if (cast) - { - if (!identify_fully(caster_ptr, FALSE, 0)) return NULL; - } - } - break; - - case 27: - if (name) return _("武器強化", "Enchant Weapon"); - if (desc) return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon."); - - { - if (cast) - { - if (!enchant_spell(caster_ptr, randint0(4) + 1, randint0(4) + 1, 0)) return NULL; - } - } - break; - - case 28: - if (name) return _("防具強化", "Enchant Armor"); - if (desc) return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor."); - - { - if (cast) - { - if (!enchant_spell(caster_ptr, 0, 0, randint0(3) + 2)) return NULL; - } - } - break; - - case 29: - if (name) return _("武器属性付与", "Brand Weapon"); - if (desc) return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon."); - - { - if (cast) - { - brand_weapon(caster_ptr, randint0(18)); - } - } - break; - - case 30: - if (name) return _("人間トランプ", "Living Trump"); - if (desc) return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。", - "Gives mutation which makes you teleport randomly or makes you able to teleport at will."); - if (cast) become_living_trump(caster_ptr); - break; - - case 31: - if (name) return _("属性への免疫", "Immunity"); - if (desc) return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。", - "Gives an immunity to fire, cold, electricity or acid for a while."); - - { - int base = 13; - - if (info) return info_duration(base, base); - - if (cast) - { - if (!choose_ele_immune(caster_ptr, base + randint1(base))) return NULL; - } - } - break; - } - - return ""; + bool name = (mode == SPELL_NAME) ? TRUE : FALSE; + bool desc = (mode == SPELL_DESC) ? TRUE : FALSE; + bool info = (mode == SPELL_INFO) ? TRUE : FALSE; + bool cast = (mode == SPELL_CAST) ? TRUE : FALSE; + + PLAYER_LEVEL plev = caster_ptr->lev; + + switch (spell) { + case 0: + if (name) + return _("赤外線視力", "Infravision"); + if (desc) + return _("一定時間、赤外線視力が増強される。", "Gives infravision for a while."); + + { + int base = 100; + + if (info) + return info_duration(base, base); + + if (cast) { + set_tim_infra(caster_ptr, base + randint1(base), FALSE); + } + } + break; + + case 1: + if (name) + return _("回復力強化", "Regeneration"); + if (desc) + return _("一定時間、回復力が増強される。", "Gives regeneration ability for a while."); + + { + int base = 80; + + if (info) + return info_duration(base, base); + + if (cast) { + set_tim_regen(caster_ptr, base + randint1(base), FALSE); + } + } + break; + + case 2: + if (name) + return _("空腹充足", "Satisfy Hunger"); + if (desc) + return _("満腹になる。", "Satisfies hunger."); + + { + if (cast) { + set_food(caster_ptr, PY_FOOD_MAX - 1); + } + } + break; + + case 3: + if (name) + return _("耐冷気", "Resist Cold"); + if (desc) + return _("一定時間、冷気への耐性を得る。装備による耐性に累積する。", + "Gives resistance to cold. This resistance can be added to that from equipment for more powerful resistance."); + + { + int base = 20; + + if (info) + return info_duration(base, base); + + if (cast) { + set_oppose_cold(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 4: + if (name) + return _("耐火炎", "Resist Fire"); + if (desc) + return _("一定時間、炎への耐性を得る。装備による耐性に累積する。", + "Gives resistance to fire. This resistance can be added to that from equipment for more powerful resistance."); + + { + int base = 20; + + if (info) + return info_duration(base, base); + + if (cast) { + set_oppose_fire(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 5: + if (name) + return _("士気高揚", "Heroism"); + if (desc) + return _("一定時間、ヒーロー気分になる。", "Removes fear. Gives a bonus to hit for a while. Heals you for 10 HP."); + + { + int base = 25; + + if (info) + return info_duration(base, base); + + if (cast) { + (void)heroism(caster_ptr, base); + } + } + break; + + case 6: + if (name) + return _("耐電撃", "Resist Lightning"); + if (desc) + return _("一定時間、電撃への耐性を得る。装備による耐性に累積する。", + "Gives resistance to electricity. This resistance can be added to that from equipment for more powerful resistance."); + + { + int base = 20; + + if (info) + return info_duration(base, base); + + if (cast) { + set_oppose_elec(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 7: + if (name) + return _("耐酸", "Resist Acid"); + if (desc) + return _("一定時間、酸への耐性を得る。装備による耐性に累積する。", + "Gives resistance to acid. This resistance can be added to that from equipment for more powerful resistance."); + + { + int base = 20; + + if (info) + return info_duration(base, base); + + if (cast) { + set_oppose_acid(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 8: + if (name) + return _("透明視認", "See Invisibility"); + if (desc) + return _("一定時間、透明なものが見えるようになる。", "Gives see invisible for a while."); + + { + int base = 24; + + if (info) + return info_duration(base, base); + + if (cast) { + set_tim_invis(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 9: + if (name) + return _("解呪", "Remove Curse"); + if (desc) + return _("アイテムにかかった弱い呪いを解除する。", "Removes normal curses from equipped items."); + + { + if (cast) + (void)remove_curse(caster_ptr); + } + break; + + case 10: + if (name) + return _("耐毒", "Resist Poison"); + if (desc) + return _("一定時間、毒への耐性を得る。装備による耐性に累積する。", + "Gives resistance to poison. This resistance can be added to that from equipment for more powerful resistance."); + + { + int base = 20; + + if (info) + return info_duration(base, base); + + if (cast) { + set_oppose_pois(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 11: + if (name) + return _("狂戦士化", "Berserk"); + if (desc) + return _("狂戦士化し、恐怖を除去する。", "Gives a bonus to hit and HP, immunity to fear for a while. But decreases AC."); + + { + int base = 25; + + if (info) + return info_duration(base, base); + + if (cast) { + (void)berserk(caster_ptr, base + randint1(base)); + } + } + break; + + case 12: + if (name) + return _("自己分析", "Self Knowledge"); + if (desc) + return _("現在の自分の状態を完全に知る。", + "Gives you useful info regarding your current resistances, the powers of your weapon and maximum limits of your stats."); + + { + if (cast) { + self_knowledge(caster_ptr); + } + } + break; + + case 13: + if (name) + return _("対邪悪結界", "Protection from Evil"); + if (desc) + return _("邪悪なモンスターの攻撃を防ぐバリアを張る。", "Gives aura which protect you from evil monster's physical attack."); + + { + int base = 3 * plev; + DICE_SID sides = 25; + + if (info) + return info_duration(base, sides); + + if (cast) { + set_protevil(caster_ptr, randint1(sides) + base, FALSE); + } + } + break; + + case 14: + if (name) + return _("癒し", "Cure"); + if (desc) + return _("毒、朦朧状態、負傷を全快させ、幻覚を直す。", "Completely heals poisons, cuts, hallucination and being stunned."); + + { + if (cast) { + (void)true_healing(caster_ptr, 0); + } + } + break; + + case 15: + if (name) + return _("魔法剣", "Mana Branding"); + if (desc) + return _("一定時間、武器に冷気、炎、電撃、酸、毒のいずれかの属性をつける。武器を持たないと使えない。", + "Causes current weapon to temporarily do additional damage from cold, fire, lightning, acid or poison. You must be wielding one or more " + "weapons."); + + { + int base = plev / 2; + + if (info) + return info_duration(base, base); + + if (cast) { + if (!choose_ele_attack(caster_ptr)) + return NULL; + } + } + break; + + case 16: + if (name) + return _("テレパシー", "Telepathy"); + if (desc) + return _("一定時間、テレパシー能力を得る。", "Gives telepathy for a while."); + + { + int base = 25; + DICE_SID sides = 30; + + if (info) + return info_duration(base, sides); + + if (cast) { + set_tim_esp(caster_ptr, randint1(sides) + base, FALSE); + } + } + break; + + case 17: + if (name) + return _("肌石化", "Stone Skin"); + if (desc) + return _("一定時間、ACを上昇させる。", "Gives a bonus to AC for a while."); + + { + int base = 30; + DICE_SID sides = 20; + + if (info) + return info_duration(base, sides); + + if (cast) { + set_shield(caster_ptr, randint1(sides) + base, FALSE); + } + } + break; + + case 18: + if (name) + return _("全耐性", "Resistance"); + if (desc) + return _("一定時間、酸、電撃、炎、冷気、毒に対する耐性を得る。装備による耐性に累積する。", + "Gives resistance to fire, cold, electricity, acid and poison for a while. These resistances can be added to those from equipment for more " + "powerful resistances."); + + { + int base = 20; + + if (info) + return info_duration(base, base); + + if (cast) { + set_oppose_acid(caster_ptr, randint1(base) + base, FALSE); + set_oppose_elec(caster_ptr, randint1(base) + base, FALSE); + set_oppose_fire(caster_ptr, randint1(base) + base, FALSE); + set_oppose_cold(caster_ptr, randint1(base) + base, FALSE); + set_oppose_pois(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 19: + if (name) + return _("スピード", "Haste Self"); + if (desc) + return _("一定時間、加速する。", "Hastes you for a while."); + + { + int base = plev; + DICE_SID sides = 20 + plev; + + if (info) + return info_duration(base, sides); + + if (cast) { + set_fast(caster_ptr, randint1(sides) + base, FALSE); + } + } + break; + + case 20: + if (name) + return _("壁抜け", "Walk through Wall"); + if (desc) + return _("一定時間、半物質化し壁を通り抜けられるようになる。", "Gives ability to pass walls for a while."); + + { + int base = plev / 2; + + if (info) + return info_duration(base, base); + + if (cast) { + set_pass_wall(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 21: + if (name) + return _("盾磨き", "Polish Shield"); + if (desc) + return _("盾に反射の属性をつける。", "Makes a shield a shield of reflection."); + + { + if (cast) { + pulish_shield(caster_ptr); + } + } + break; + + case 22: + if (name) + return _("ゴーレム製造", "Create Golem"); + if (desc) + return _("1体のゴーレムを製造する。", "Creates a golem."); + + { + if (cast) { + if (summon_specific(caster_ptr, -1, caster_ptr->y, caster_ptr->x, plev, SUMMON_GOLEM, PM_FORCE_PET)) { + msg_print(_("ゴーレムを作った。", "You make a golem.")); + } else { + msg_print(_("うまくゴーレムを作れなかった。", "No Golems arrive.")); + } + } + } + break; + + case 23: + if (name) + return _("魔法の鎧", "Magical armor"); + if (desc) + return _("一定時間、魔法防御力とACが上がり、混乱と盲目の耐性、反射能力、麻痺知らず、浮遊を得る。", + "Gives resistance to magic, bonus to AC, resistance to confusion, blindness, reflection, free action and levitation for a while."); + + { + int base = 20; + + if (info) + return info_duration(base, base); + + if (cast) { + set_magicdef(caster_ptr, randint1(base) + base, FALSE); + } + } + break; + + case 24: + if (name) + return _("装備無力化", "Remove Enchantment"); + if (desc) + return _("武器・防具にかけられたあらゆる魔力を完全に解除する。", "Removes all magics completely from any weapon or armor."); + + { + if (cast) { + if (!mundane_spell(caster_ptr, TRUE)) + return NULL; + } + } + break; + + case 25: + if (name) + return _("呪い粉砕", "Remove All Curse"); + if (desc) + return _("アイテムにかかった強力な呪いを解除する。", "Removes normal and heavy curse from equipped items."); + + { + if (cast) + (void)remove_all_curse(caster_ptr); + } + break; + + case 26: + if (name) + return _("完全なる知識", "Knowledge True"); + if (desc) + return _("アイテムの持つ能力を完全に知る。", "*Identifies* an item."); + + { + if (cast) { + if (!identify_fully(caster_ptr, FALSE, 0)) + return NULL; + } + } + break; + + case 27: + if (name) + return _("武器強化", "Enchant Weapon"); + if (desc) + return _("武器の命中率修正とダメージ修正を強化する。", "Attempts to increase +to-hit, +to-dam of a weapon."); + + { + if (cast) { + if (!enchant_spell(caster_ptr, randint0(4) + 1, randint0(4) + 1, 0)) + return NULL; + } + } + break; + + case 28: + if (name) + return _("防具強化", "Enchant Armor"); + if (desc) + return _("鎧の防御修正を強化する。", "Attempts to increase +AC of an armor."); + + { + if (cast) { + if (!enchant_spell(caster_ptr, 0, 0, randint0(3) + 2)) + return NULL; + } + } + break; + + case 29: + if (name) + return _("武器属性付与", "Brand Weapon"); + if (desc) + return _("武器にランダムに属性をつける。", "Makes current weapon a random ego weapon."); + + { + if (cast) { + brand_weapon(caster_ptr, randint0(18)); + } + } + break; + + case 30: + if (name) + return _("人間トランプ", "Living Trump"); + if (desc) + return _("ランダムにテレポートする突然変異か、自分の意思でテレポートする突然変異が身につく。", + "Gives mutation which makes you teleport randomly or makes you able to teleport at will."); + if (cast) + become_living_trump(caster_ptr); + break; + + case 31: + if (name) + return _("属性への免疫", "Immunity"); + if (desc) + return _("一定時間、冷気、炎、電撃、酸のいずれかに対する免疫を得る。", "Gives an immunity to fire, cold, electricity or acid for a while."); + + { + int base = 13; + + if (info) + return info_duration(base, base); + + if (cast) { + if (!choose_ele_immune(caster_ptr, base + randint1(base))) + return NULL; + } + } + break; + } + + return ""; } diff --git a/src/spell-realm/spells-craft.c b/src/spell-realm/spells-craft.c index a57f496e7..0036063e0 100644 --- a/src/spell-realm/spells-craft.c +++ b/src/spell-realm/spells-craft.c @@ -3,11 +3,24 @@ #include "core/player-redraw-types.h" #include "core/player-update-types.h" #include "core/stuff-handler.h" +#include "flavor/flavor-describer.h" +#include "flavor/object-flavor-types.h" +#include "floor/floor-object.h" #include "game-option/disturbance-options.h" #include "inventory/inventory-slot-types.h" #include "io/input-key-acceptor.h" +#include "object-enchant/object-ego.h" +#include "object-hook/hook-checker.h" +#include "object-hook/hook-enchant.h" +#include "object/item-use-flags.h" +#include "object/object-flags.h" #include "player/attack-defense-types.h" +#include "player-info/avatar.h" #include "player/special-defense-types.h" +#include "racial/racial-android.h" +#include "spell/spells-object.h" +#include "sv-definition/sv-protector-types.h" +#include "system/object-type-definition.h" #include "term/screen-processor.h" #include "term/term-color-types.h" #include "view/display-messages.h" @@ -240,3 +253,48 @@ bool choose_ele_immune(player_type *creature_ptr, TIME_EFFECT immune_turn) screen_load(); return TRUE; } + +/*! + * @brief 盾磨き処理 / + * pulish shield + * @return ターン消費を要する処理を行ったならばTRUEを返す + */ +bool pulish_shield(player_type *caster_ptr) +{ + concptr q = _("どの盾を磨きますか?", "Pulish which weapon? "); + concptr s = _("磨く盾がありません。", "You have weapon to pulish."); + + OBJECT_IDX item; + object_type *o_ptr = choose_object(caster_ptr, &item, q, s, USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT, TV_SHIELD); + if (o_ptr == NULL) + return FALSE; + + GAME_TEXT o_name[MAX_NLEN]; + describe_flavor(caster_ptr, o_name, o_ptr, OD_OMIT_PREFIX | OD_NAME_ONLY); + BIT_FLAGS flgs[TR_FLAG_SIZE]; + object_flags(caster_ptr, o_ptr, flgs); + + bool is_pulish_successful = o_ptr->k_idx && !object_is_artifact(o_ptr) && !object_is_ego(o_ptr); + is_pulish_successful &= !object_is_cursed(o_ptr); + is_pulish_successful &= (o_ptr->sval != SV_MIRROR_SHIELD); + if (is_pulish_successful) { +#ifdef JP + msg_format("%sは輝いた!", o_name); +#else + msg_format("%s %s shine%s!", ((item >= 0) ? "Your" : "The"), o_name, ((o_ptr->number > 1) ? "" : "s")); +#endif + o_ptr->name2 = EGO_REFLECTION; + enchant(caster_ptr, o_ptr, randint0(3) + 4, ENCH_TOAC); + o_ptr->discount = 99; + chg_virtue(caster_ptr, V_ENCHANT, 2); + return TRUE; + } + + if (flush_failure) + flush(); + + msg_print(_("失敗した。", "Failed.")); + chg_virtue(caster_ptr, V_ENCHANT, -2); + calc_android_exp(caster_ptr); + return FALSE; +} diff --git a/src/spell-realm/spells-craft.h b/src/spell-realm/spells-craft.h index e3a107125..8cedb7415 100644 --- a/src/spell-realm/spells-craft.h +++ b/src/spell-realm/spells-craft.h @@ -6,3 +6,4 @@ bool set_ele_attack(player_type *creature_ptr, u32b attack_type, TIME_EFFECT v); bool set_ele_immune(player_type *creature_ptr, u32b immune_type, TIME_EFFECT v); bool choose_ele_attack(player_type *creature_ptr); bool choose_ele_immune(player_type *creature_ptr, TIME_EFFECT turn); +bool pulish_shield(player_type *caster_ptr); diff --git a/src/spell/spells-object.c b/src/spell/spells-object.c index 03df0edd7..c31dc34d7 100644 --- a/src/spell/spells-object.c +++ b/src/spell/spells-object.c @@ -423,54 +423,6 @@ bool perilous_secrets(player_type *user_ptr) } /*! - * @brief 盾磨き処理 / - * pulish shield - * @return ターン消費を要する処理を行ったならばTRUEを返す - */ -bool pulish_shield(player_type *caster_ptr) -{ - concptr q = _("どの盾を磨きますか?", "Pulish which weapon? "); - concptr s = _("磨く盾がありません。", "You have weapon to pulish."); - - OBJECT_IDX item; - object_type *o_ptr; - o_ptr = choose_object(caster_ptr, &item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), TV_SHIELD); - if (!o_ptr) - return FALSE; - - GAME_TEXT o_name[MAX_NLEN]; - describe_flavor(caster_ptr, o_name, o_ptr, (OD_OMIT_PREFIX | OD_NAME_ONLY)); - BIT_FLAGS flgs[TR_FLAG_SIZE]; - object_flags(caster_ptr, o_ptr, flgs); - - bool is_pulish_successful = o_ptr->k_idx && !object_is_artifact(o_ptr) && !object_is_ego(o_ptr); - is_pulish_successful &= !object_is_cursed(o_ptr); - is_pulish_successful &= (o_ptr->sval != SV_MIRROR_SHIELD); - if (is_pulish_successful) { -#ifdef JP - msg_format("%sは輝いた!", o_name); -#else - msg_format("%s %s shine%s!", ((item >= 0) ? "Your" : "The"), o_name, ((o_ptr->number > 1) ? "" : "s")); -#endif - o_ptr->name2 = EGO_REFLECTION; - enchant(caster_ptr, o_ptr, randint0(3) + 4, ENCH_TOAC); - - o_ptr->discount = 99; - chg_virtue(caster_ptr, V_ENCHANT, 2); - - return TRUE; - } - - if (flush_failure) - flush(); - - msg_print(_("失敗した。", "Failed.")); - chg_virtue(caster_ptr, V_ENCHANT, -2); - calc_android_exp(caster_ptr); - return FALSE; -} - -/*! * @brief 呪いの打ち破り処理 / * Break the curse of an item * @param o_ptr 呪い装備情報の参照ポインタ diff --git a/src/spell/spells-object.h b/src/spell/spells-object.h index b8c14762b..b3209055f 100644 --- a/src/spell/spells-object.h +++ b/src/spell/spells-object.h @@ -8,7 +8,6 @@ bool curse_armor(player_type *owner_ptr); bool curse_weapon_object(player_type *creature_ptr, bool force, object_type *o_ptr); void brand_bolts(player_type *caster_ptr); bool perilous_secrets(player_type *user_ptr); -bool pulish_shield(player_type *caster_ptr); bool create_ration(player_type *crature_ptr); /* -- 2.11.0