• R/O
  • HTTP
  • SSH
  • HTTPS

hengband: Commit

変愚蛮怒のメインリポジトリです


Commit MetaInfo

Revision1bf8e4c553525f164eb21fe651bea5c372d6621e (tree)
Time2019-02-14 18:37:25
AuthorDeskull <deskull@user...>
CommiterDeskull

Log Message

[Refactor] #37353 make_artifact() と make_artifact_special() を artifact.c/h に移動。 / Move make_artifact() and make_artifact_special() to artifact.c/h.

Change Summary

Incremental Difference

--- a/src/artifact.c
+++ b/src/artifact.c
@@ -2465,4 +2465,139 @@ static bool weakening_artifact(object_type *o_ptr)
24652465 return TRUE;
24662466 }
24672467 return FALSE;
2468-}
\ No newline at end of file
2468+}
2469+
2470+/*!
2471+ * @brief 非INSTA_ART型の固定アーティファクトの生成を確率に応じて試行する。
2472+ * Mega-Hack -- Attempt to create one of the "Special Objects"
2473+ * @param o_ptr 生成に割り当てたいオブジェクトの構造体参照ポインタ
2474+ * @return 生成に成功したらTRUEを返す。
2475+ * @details
2476+ * Attempt to change an object into an artifact\n
2477+ * This routine should only be called by "apply_magic()"\n
2478+ * Note -- see "make_artifact_special()" and "apply_magic()"\n
2479+ */
2480+bool make_artifact(object_type *o_ptr)
2481+{
2482+ ARTIFACT_IDX i;
2483+
2484+ /* No artifacts in the town */
2485+ if (!dun_level) return (FALSE);
2486+
2487+ /* Paranoia -- no "plural" artifacts */
2488+ if (o_ptr->number != 1) return (FALSE);
2489+
2490+ /* Check the artifact list (skip the "specials") */
2491+ for (i = 0; i < max_a_idx; i++)
2492+ {
2493+ artifact_type *a_ptr = &a_info[i];
2494+
2495+ /* Skip "empty" items */
2496+ if (!a_ptr->name) continue;
2497+
2498+ /* Cannot make an artifact twice */
2499+ if (a_ptr->cur_num) continue;
2500+
2501+ if (a_ptr->gen_flags & TRG_QUESTITEM) continue;
2502+
2503+ if (a_ptr->gen_flags & TRG_INSTA_ART) continue;
2504+
2505+ /* Must have the correct fields */
2506+ if (a_ptr->tval != o_ptr->tval) continue;
2507+ if (a_ptr->sval != o_ptr->sval) continue;
2508+
2509+ /* XXX XXX Enforce minimum "depth" (loosely) */
2510+ if (a_ptr->level > dun_level)
2511+ {
2512+ /* Acquire the "out-of-depth factor" */
2513+ int d = (a_ptr->level - dun_level) * 2;
2514+
2515+ /* Roll for out-of-depth creation */
2516+ if (!one_in_(d)) continue;
2517+ }
2518+
2519+ /* We must make the "rarity roll" */
2520+ if (!one_in_(a_ptr->rarity)) continue;
2521+
2522+ /* Hack -- mark the item as an artifact */
2523+ o_ptr->name1 = i;
2524+
2525+ /* Hack: Some artifacts get random extra powers */
2526+ random_artifact_resistance(o_ptr, a_ptr);
2527+
2528+ /* Success */
2529+ return (TRUE);
2530+ }
2531+
2532+ /* Failure */
2533+ return (FALSE);
2534+}
2535+
2536+/*!
2537+ * @brief INSTA_ART型の固定アーティファクトの生成を確率に応じて試行する。
2538+ * Mega-Hack -- Attempt to create one of the "Special Objects"
2539+ * @param o_ptr 生成に割り当てたいオブジェクトの構造体参照ポインタ
2540+ * @return 生成に成功したらTRUEを返す。
2541+ * @details
2542+ * We are only called from "make_object()", and we assume that\n
2543+ * "apply_magic()" is called immediately after we return.\n
2544+ *\n
2545+ * Note -- see "make_artifact()" and "apply_magic()"\n
2546+ */
2547+bool make_artifact_special(object_type *o_ptr)
2548+{
2549+ IDX i;
2550+ KIND_OBJECT_IDX k_idx = 0;
2551+
2552+ /*! @note 地上ではキャンセルする / No artifacts in the town */
2553+ if (!dun_level) return (FALSE);
2554+
2555+ /*! @note get_obj_num_hookによる指定がある場合は生成をキャンセルする / Themed object */
2556+ if (get_obj_num_hook) return (FALSE);
2557+
2558+ /*! @note 全固定アーティファクト中からIDの若い順に生成対象とその確率を走査する / Check the artifact list (just the "specials") */
2559+ for (i = 0; i < max_a_idx; i++)
2560+ {
2561+ artifact_type *a_ptr = &a_info[i];
2562+
2563+ /*! @note アーティファクト名が空の不正なデータは除外する / Skip "empty" artifacts */
2564+ if (!a_ptr->name) continue;
2565+
2566+ /*! @note 既に生成回数がカウントされたアーティファクト、QUESTITEMと非INSTA_ARTは除外 / Cannot make an artifact twice */
2567+ if (a_ptr->cur_num) continue;
2568+ if (a_ptr->gen_flags & TRG_QUESTITEM) continue;
2569+ if (!(a_ptr->gen_flags & TRG_INSTA_ART)) continue;
2570+
2571+ /*! @note アーティファクト生成階が現在に対して足りない場合は高確率で1/(不足階層*2)を満たさないと生成リストに加えられない /
2572+ * XXX XXX Enforce minimum "depth" (loosely) */
2573+ if (a_ptr->level > object_level)
2574+ {
2575+ /* @note / Acquire the "out-of-depth factor". Roll for out-of-depth creation. */
2576+ int d = (a_ptr->level - object_level) * 2;
2577+ if (!one_in_(d)) continue;
2578+ }
2579+
2580+ /*! @note 1/(レア度)の確率を満たさないと除外される / Artifact "rarity roll" */
2581+ if (!one_in_(a_ptr->rarity)) continue;
2582+
2583+ /*! @note INSTA_ART型固定アーティファクトのベースアイテムもチェック対象とする。ベースアイテムの生成階層が足りない場合1/(不足階層*5) を満たさないと除外される。 /
2584+ * Find the base object. XXX XXX Enforce minimum "object" level (loosely). Acquire the "out-of-depth factor". Roll for out-of-depth creation. */
2585+ k_idx = lookup_kind(a_ptr->tval, a_ptr->sval);
2586+ if (k_info[k_idx].level > object_level)
2587+ {
2588+ int d = (k_info[k_idx].level - object_level) * 5;
2589+ if (!one_in_(d)) continue;
2590+ }
2591+
2592+ /*! @note 前述の条件を満たしたら、後のIDのアーティファクトはチェックせずすぐ確定し生成処理に移す /
2593+ * Assign the template. Mega-Hack -- mark the item as an artifact. Hack: Some artifacts get random extra powers. Success. */
2594+ object_prep(o_ptr, k_idx);
2595+
2596+ o_ptr->name1 = i;
2597+ random_artifact_resistance(o_ptr, a_ptr);
2598+ return (TRUE);
2599+ }
2600+
2601+ /*! @note 全INSTA_ART固定アーティファクトを試行しても決まらなかった場合 FALSEを返す / Failure */
2602+ return (FALSE);
2603+}
--- a/src/artifact.h
+++ b/src/artifact.h
@@ -12,6 +12,8 @@ extern int activation_index(object_type *o_ptr);
1212 extern const activation_type* find_activation_info(object_type *o_ptr);
1313 extern void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr);
1414 extern bool create_named_art(ARTIFACT_IDX a_idx, POSITION y, POSITION x);
15+extern bool make_artifact(object_type *o_ptr);
16+extern bool make_artifact_special(object_type *o_ptr);
1517
1618 /*** Artifact indexes (see "lib/edit/a_info.txt") ***/
1719
--- a/src/object2.c
+++ b/src/object2.c
@@ -2124,142 +2124,6 @@ static void object_mention(object_type *o_ptr)
21242124 msg_format_wizard(CHEAT_OBJECT, _("%sを生成しました。", "%s was generated."), o_name);
21252125 }
21262126
2127-/*!
2128- * @brief INSTA_ART型の固定アーティファクトの生成を確率に応じて試行する。
2129- * Mega-Hack -- Attempt to create one of the "Special Objects"
2130- * @param o_ptr 生成に割り当てたいオブジェクトの構造体参照ポインタ
2131- * @return 生成に成功したらTRUEを返す。
2132- * @details
2133- * We are only called from "make_object()", and we assume that\n
2134- * "apply_magic()" is called immediately after we return.\n
2135- *\n
2136- * Note -- see "make_artifact()" and "apply_magic()"\n
2137- */
2138-static bool make_artifact_special(object_type *o_ptr)
2139-{
2140- IDX i;
2141- KIND_OBJECT_IDX k_idx = 0;
2142-
2143- /*! @note 地上ではキャンセルする / No artifacts in the town */
2144- if (!dun_level) return (FALSE);
2145-
2146- /*! @note get_obj_num_hookによる指定がある場合は生成をキャンセルする / Themed object */
2147- if (get_obj_num_hook) return (FALSE);
2148-
2149- /*! @note 全固定アーティファクト中からIDの若い順に生成対象とその確率を走査する / Check the artifact list (just the "specials") */
2150- for (i = 0; i < max_a_idx; i++)
2151- {
2152- artifact_type *a_ptr = &a_info[i];
2153-
2154- /*! @note アーティファクト名が空の不正なデータは除外する / Skip "empty" artifacts */
2155- if (!a_ptr->name) continue;
2156-
2157- /*! @note 既に生成回数がカウントされたアーティファクト、QUESTITEMと非INSTA_ARTは除外 / Cannot make an artifact twice */
2158- if (a_ptr->cur_num) continue;
2159- if (a_ptr->gen_flags & TRG_QUESTITEM) continue;
2160- if (!(a_ptr->gen_flags & TRG_INSTA_ART)) continue;
2161-
2162- /*! @note アーティファクト生成階が現在に対して足りない場合は高確率で1/(不足階層*2)を満たさないと生成リストに加えられない /
2163- * XXX XXX Enforce minimum "depth" (loosely) */
2164- if (a_ptr->level > object_level)
2165- {
2166- /* @note / Acquire the "out-of-depth factor". Roll for out-of-depth creation. */
2167- int d = (a_ptr->level - object_level) * 2;
2168- if (!one_in_(d)) continue;
2169- }
2170-
2171- /*! @note 1/(レア度)の確率を満たさないと除外される / Artifact "rarity roll" */
2172- if (!one_in_(a_ptr->rarity)) continue;
2173-
2174- /*! @note INSTA_ART型固定アーティファクトのベースアイテムもチェック対象とする。ベースアイテムの生成階層が足りない場合1/(不足階層*5) を満たさないと除外される。 /
2175- * Find the base object. XXX XXX Enforce minimum "object" level (loosely). Acquire the "out-of-depth factor". Roll for out-of-depth creation. */
2176- k_idx = lookup_kind(a_ptr->tval, a_ptr->sval);
2177- if (k_info[k_idx].level > object_level)
2178- {
2179- int d = (k_info[k_idx].level - object_level) * 5;
2180- if (!one_in_(d)) continue;
2181- }
2182-
2183- /*! @note 前述の条件を満たしたら、後のIDのアーティファクトはチェックせずすぐ確定し生成処理に移す /
2184- * Assign the template. Mega-Hack -- mark the item as an artifact. Hack: Some artifacts get random extra powers. Success. */
2185- object_prep(o_ptr, k_idx);
2186-
2187- o_ptr->name1 = i;
2188- random_artifact_resistance(o_ptr, a_ptr);
2189- return (TRUE);
2190- }
2191-
2192- /*! @note 全INSTA_ART固定アーティファクトを試行しても決まらなかった場合 FALSEを返す / Failure */
2193- return (FALSE);
2194-}
2195-
2196-
2197-/*!
2198- * @brief 非INSTA_ART型の固定アーティファクトの生成を確率に応じて試行する。
2199- * Mega-Hack -- Attempt to create one of the "Special Objects"
2200- * @param o_ptr 生成に割り当てたいオブジェクトの構造体参照ポインタ
2201- * @return 生成に成功したらTRUEを返す。
2202- * @details
2203- * Attempt to change an object into an artifact\n
2204- * This routine should only be called by "apply_magic()"\n
2205- * Note -- see "make_artifact_special()" and "apply_magic()"\n
2206- */
2207-static bool make_artifact(object_type *o_ptr)
2208-{
2209- ARTIFACT_IDX i;
2210-
2211- /* No artifacts in the town */
2212- if (!dun_level) return (FALSE);
2213-
2214- /* Paranoia -- no "plural" artifacts */
2215- if (o_ptr->number != 1) return (FALSE);
2216-
2217- /* Check the artifact list (skip the "specials") */
2218- for (i = 0; i < max_a_idx; i++)
2219- {
2220- artifact_type *a_ptr = &a_info[i];
2221-
2222- /* Skip "empty" items */
2223- if (!a_ptr->name) continue;
2224-
2225- /* Cannot make an artifact twice */
2226- if (a_ptr->cur_num) continue;
2227-
2228- if (a_ptr->gen_flags & TRG_QUESTITEM) continue;
2229-
2230- if (a_ptr->gen_flags & TRG_INSTA_ART) continue;
2231-
2232- /* Must have the correct fields */
2233- if (a_ptr->tval != o_ptr->tval) continue;
2234- if (a_ptr->sval != o_ptr->sval) continue;
2235-
2236- /* XXX XXX Enforce minimum "depth" (loosely) */
2237- if (a_ptr->level > dun_level)
2238- {
2239- /* Acquire the "out-of-depth factor" */
2240- int d = (a_ptr->level - dun_level) * 2;
2241-
2242- /* Roll for out-of-depth creation */
2243- if (!one_in_(d)) continue;
2244- }
2245-
2246- /* We must make the "rarity roll" */
2247- if (!one_in_(a_ptr->rarity)) continue;
2248-
2249- /* Hack -- mark the item as an artifact */
2250- o_ptr->name1 = i;
2251-
2252- /* Hack: Some artifacts get random extra powers */
2253- random_artifact_resistance(o_ptr, a_ptr);
2254-
2255- /* Success */
2256- return (TRUE);
2257- }
2258-
2259- /* Failure */
2260- return (FALSE);
2261-}
2262-
22632127
22642128 /*!
22652129 * @brief アイテムのエゴをレア度の重みに合わせてランダムに選択する
--- a/src/spells1.c
+++ b/src/spells1.c
@@ -79,7 +79,7 @@ static void next_mirror(POSITION* next_y, POSITION* next_x, POSITION cury, POSIT
7979 *next_x = curx + randint0(5) - 2;
8080 return;
8181 }
82-
82+
8383 /*!
8484 * @brief 万色表現用にランダムな色を選択する関数 /
8585 * Get a legal "multi-hued" color for drawing "spells"
Show on old repository browser