From 5e88c1987f1fca7b605e011887d9f91bb4c365a8 Mon Sep 17 00:00:00 2001 From: iks Date: Mon, 29 Mar 2021 00:55:42 +0900 Subject: [PATCH] =?utf8?q?[Fix]=20=E5=A4=A9=E7=84=B6=E7=94=9F=E6=88=90?= =?utf8?q?=E3=81=AE=E3=82=A2=E3=83=BC=E3=83=86=E3=82=A3=E3=83=95=E3=82=A1?= =?utf8?q?=E3=82=AF=E3=83=88=E3=81=A7XTRA=5FDICE=E3=81=8C=E7=84=A1?= =?utf8?q?=E5=8A=B9=E3=81=AB=E3=81=AA=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/artifact/fixed-art-generator.cpp | 46 +++++++++++++++++++++++++++++++++++- src/artifact/fixed-art-generator.h | 2 ++ src/object-enchant/apply-magic.cpp | 34 +------------------------- 3 files changed, 48 insertions(+), 34 deletions(-) diff --git a/src/artifact/fixed-art-generator.cpp b/src/artifact/fixed-art-generator.cpp index 708f5ae42..b52385bf4 100644 --- a/src/artifact/fixed-art-generator.cpp +++ b/src/artifact/fixed-art-generator.cpp @@ -15,6 +15,7 @@ #include "floor/floor-object.h" #include "object-enchant/object-boost.h" #include "object-enchant/object-curse.h" +#include "object-enchant/special-object-flags.h" #include "object-enchant/tr-types.h" #include "object-enchant/trc-types.h" #include "object-enchant/trg-types.h" @@ -254,7 +255,6 @@ bool make_artifact(player_type *player_ptr, object_type *o_ptr) continue; o_ptr->name1 = i; - random_artifact_resistance(player_ptr, o_ptr, a_ptr); return TRUE; } @@ -262,6 +262,50 @@ bool make_artifact(player_type *player_ptr, object_type *o_ptr) } /*! + * @brief make_artifact()で選択した固定アーティファクトをオブジェクトに割り当てる。 + * @param player_ptr プレーヤーへの参照ポインタ + * @param o_ptr 生成に割り当てたいオブジェクトの構造体参照ポインタ + * @return 適用したアーティファクト情報への参照ポインタ + */ +artifact_type *apply_artifact(player_type *player_ptr, object_type *o_ptr) +{ + artifact_type *a_ptr = &a_info[o_ptr->name1]; + o_ptr->pval = a_ptr->pval; + o_ptr->ac = a_ptr->ac; + o_ptr->dd = a_ptr->dd; + o_ptr->ds = a_ptr->ds; + o_ptr->to_a = a_ptr->to_a; + o_ptr->to_h = a_ptr->to_h; + o_ptr->to_d = a_ptr->to_d; + o_ptr->weight = a_ptr->weight; + o_ptr->xtra2 = a_ptr->act_idx; + random_artifact_resistance(player_ptr, o_ptr, a_ptr); + + if (o_ptr->name1 == ART_MILIM) { + if (player_ptr->pseikaku == PERSONALITY_SEXY) { + o_ptr->pval = 3; + } + } + + if (!a_ptr->cost) + o_ptr->ident |= (IDENT_BROKEN); + if (a_ptr->gen_flags.has(TRG::CURSED)) + o_ptr->curse_flags |= (TRC_CURSED); + if (a_ptr->gen_flags.has(TRG::HEAVY_CURSE)) + o_ptr->curse_flags |= (TRC_HEAVY_CURSE); + if (a_ptr->gen_flags.has(TRG::PERMA_CURSE)) + o_ptr->curse_flags |= (TRC_PERMA_CURSE); + if (a_ptr->gen_flags.has(TRG::RANDOM_CURSE0)) + o_ptr->curse_flags |= get_curse(player_ptr, 0, o_ptr); + if (a_ptr->gen_flags.has(TRG::RANDOM_CURSE1)) + o_ptr->curse_flags |= get_curse(player_ptr, 1, o_ptr); + if (a_ptr->gen_flags.has(TRG::RANDOM_CURSE2)) + o_ptr->curse_flags |= get_curse(player_ptr, 2, o_ptr); + + return a_ptr; +} + +/*! * @brief INSTA_ART型の固定アーティファクトの生成を確率に応じて試行する。 * Mega-Hack -- Attempt to create one of the "Special Objects" * @param player_ptr プレーヤーへの参照ポインタ diff --git a/src/artifact/fixed-art-generator.h b/src/artifact/fixed-art-generator.h index b439d3dd2..829ef6e87 100644 --- a/src/artifact/fixed-art-generator.h +++ b/src/artifact/fixed-art-generator.h @@ -2,6 +2,8 @@ #include "system/angband.h" +struct artifact_type; bool create_named_art(player_type *player_ptr, ARTIFACT_IDX a_idx, POSITION y, POSITION x); bool make_artifact(player_type *player_ptr, object_type *o_ptr); +artifact_type *apply_artifact(player_type *player_ptr, object_type *o_ptr); bool make_artifact_special(player_type *player_ptr, object_type *o_ptr); diff --git a/src/object-enchant/apply-magic.cpp b/src/object-enchant/apply-magic.cpp index 9ae0e7ccb..ce46e0204 100644 --- a/src/object-enchant/apply-magic.cpp +++ b/src/object-enchant/apply-magic.cpp @@ -124,42 +124,10 @@ void apply_magic(player_type *owner_ptr, object_type *o_ptr, DEPTH lev, BIT_FLAG } if (object_is_fixed_artifact(o_ptr)) { - artifact_type *a_ptr = &a_info[o_ptr->name1]; + artifact_type *a_ptr = apply_artifact(owner_ptr, o_ptr); a_ptr->cur_num = 1; if (current_world_ptr->character_dungeon) a_ptr->floor_id = owner_ptr->floor_id; - - o_ptr->pval = a_ptr->pval; - o_ptr->ac = a_ptr->ac; - o_ptr->dd = a_ptr->dd; - o_ptr->ds = a_ptr->ds; - o_ptr->to_a = a_ptr->to_a; - o_ptr->to_h = a_ptr->to_h; - o_ptr->to_d = a_ptr->to_d; - o_ptr->weight = a_ptr->weight; - o_ptr->xtra2 = a_ptr->act_idx; - - if (o_ptr->name1 == ART_MILIM) { - if (owner_ptr->pseikaku == PERSONALITY_SEXY) { - o_ptr->pval = 3; - } - } - - if (!a_ptr->cost) - o_ptr->ident |= (IDENT_BROKEN); - if (a_ptr->gen_flags.has(TRG::CURSED)) - o_ptr->curse_flags |= (TRC_CURSED); - if (a_ptr->gen_flags.has(TRG::HEAVY_CURSE)) - o_ptr->curse_flags |= (TRC_HEAVY_CURSE); - if (a_ptr->gen_flags.has(TRG::PERMA_CURSE)) - o_ptr->curse_flags |= (TRC_PERMA_CURSE); - if (a_ptr->gen_flags.has(TRG::RANDOM_CURSE0)) - o_ptr->curse_flags |= get_curse(owner_ptr, 0, o_ptr); - if (a_ptr->gen_flags.has(TRG::RANDOM_CURSE1)) - o_ptr->curse_flags |= get_curse(owner_ptr, 1, o_ptr); - if (a_ptr->gen_flags.has(TRG::RANDOM_CURSE2)) - o_ptr->curse_flags |= get_curse(owner_ptr, 2, o_ptr); - return; } -- 2.11.0