• R/O
  • HTTP
  • SSH
  • HTTPS

hengband: Commit

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


Commit MetaInfo

Revision6dba7831291cab228694c018e39bbe3966db9a08 (tree)
Time2019-07-08 22:40:24
Authordeskull <deskull@user...>
Commiterdeskull

Log Message

[Refactor] #37353 オブジェクトの破損判定関数を player-damage.c/h から object-broken.c/h へ移動.

Change Summary

Incremental Difference

--- a/src/object-broken.c
+++ b/src/object-broken.c
@@ -2,6 +2,242 @@
22 #include "spells.h"
33 #include "objectkind.h"
44
5+
6+/*!
7+* @brief アイテムが酸で破損するかどうかを判定する
8+* @param o_ptr アイテムの情報参照ポインタ
9+* @return 破損するならばTRUEを返す
10+* Note that amulets, rods, and high-level spell books are immune
11+* to "p_ptr->inventory_list damage" of any kind. Also sling ammo and shovels.
12+* Does a given class of objects (usually) hate acid?
13+* Note that acid can either melt or corrode something.
14+*/
15+bool hates_acid(object_type *o_ptr)
16+{
17+ /* Analyze the type */
18+ switch (o_ptr->tval)
19+ {
20+ /* Wearable items */
21+ case TV_ARROW:
22+ case TV_BOLT:
23+ case TV_BOW:
24+ case TV_SWORD:
25+ case TV_HAFTED:
26+ case TV_POLEARM:
27+ case TV_HELM:
28+ case TV_CROWN:
29+ case TV_SHIELD:
30+ case TV_BOOTS:
31+ case TV_GLOVES:
32+ case TV_CLOAK:
33+ case TV_SOFT_ARMOR:
34+ case TV_HARD_ARMOR:
35+ case TV_DRAG_ARMOR:
36+ {
37+ return (TRUE);
38+ }
39+
40+ /* Staffs/Scrolls are wood/paper */
41+ case TV_STAFF:
42+ case TV_SCROLL:
43+ {
44+ return (TRUE);
45+ }
46+
47+ /* Ouch */
48+ case TV_CHEST:
49+ {
50+ return (TRUE);
51+ }
52+
53+ /* Junk is useless */
54+ case TV_SKELETON:
55+ case TV_BOTTLE:
56+ case TV_JUNK:
57+ {
58+ return (TRUE);
59+ }
60+ }
61+
62+ return (FALSE);
63+}
64+
65+
66+/*!
67+* @brief アイテムが電撃で破損するかどうかを判定する /
68+* Does a given object (usually) hate electricity?
69+* @param o_ptr アイテムの情報参照ポインタ
70+* @return 破損するならばTRUEを返す
71+*/
72+bool hates_elec(object_type *o_ptr)
73+{
74+ switch (o_ptr->tval)
75+ {
76+ case TV_RING:
77+ case TV_WAND:
78+ {
79+ return (TRUE);
80+ }
81+ }
82+
83+ return (FALSE);
84+}
85+
86+
87+/*!
88+* @brief アイテムが火炎で破損するかどうかを判定する /
89+* Does a given object (usually) hate fire?
90+* @param o_ptr アイテムの情報参照ポインタ
91+* @return 破損するならばTRUEを返す
92+* @details
93+* Hafted/Polearm weapons have wooden shafts.
94+* Arrows/Bows are mostly wooden.
95+*/
96+bool hates_fire(object_type *o_ptr)
97+{
98+ /* Analyze the type */
99+ switch (o_ptr->tval)
100+ {
101+ /* Wearable */
102+ case TV_LITE:
103+ case TV_ARROW:
104+ case TV_BOW:
105+ case TV_HAFTED:
106+ case TV_POLEARM:
107+ case TV_BOOTS:
108+ case TV_GLOVES:
109+ case TV_CLOAK:
110+ case TV_SOFT_ARMOR:
111+ {
112+ return (TRUE);
113+ }
114+
115+ /* Books */
116+ case TV_LIFE_BOOK:
117+ case TV_SORCERY_BOOK:
118+ case TV_NATURE_BOOK:
119+ case TV_CHAOS_BOOK:
120+ case TV_DEATH_BOOK:
121+ case TV_TRUMP_BOOK:
122+ case TV_ARCANE_BOOK:
123+ case TV_CRAFT_BOOK:
124+ case TV_DAEMON_BOOK:
125+ case TV_CRUSADE_BOOK:
126+ case TV_MUSIC_BOOK:
127+ case TV_HISSATSU_BOOK:
128+ case TV_HEX_BOOK:
129+ {
130+ return (TRUE);
131+ }
132+
133+ /* Chests */
134+ case TV_CHEST:
135+ {
136+ return (TRUE);
137+ }
138+
139+ /* Staffs/Scrolls burn */
140+ case TV_STAFF:
141+ case TV_SCROLL:
142+ {
143+ return (TRUE);
144+ }
145+ }
146+
147+ return (FALSE);
148+}
149+
150+
151+/*!
152+* @brief アイテムが冷気で破損するかどうかを判定する /
153+* Does a given object (usually) hate cold?
154+* @param o_ptr アイテムの情報参照ポインタ
155+* @return 破損するならばTRUEを返す
156+*/
157+bool hates_cold(object_type *o_ptr)
158+{
159+ switch (o_ptr->tval)
160+ {
161+ case TV_POTION:
162+ case TV_FLASK:
163+ case TV_BOTTLE:
164+ {
165+ return (TRUE);
166+ }
167+ }
168+
169+ return (FALSE);
170+}
171+
172+
173+
174+/*!
175+* @brief アイテムが酸で破損するかどうかを判定する(メインルーチン) /
176+* Melt something
177+* @param o_ptr アイテムの情報参照ポインタ
178+* @return 破損するならばTRUEを返す
179+* @todo 統合を検討
180+*/
181+int set_acid_destroy(object_type *o_ptr)
182+{
183+ BIT_FLAGS flgs[TR_FLAG_SIZE];
184+ if (!hates_acid(o_ptr)) return (FALSE);
185+ object_flags(o_ptr, flgs);
186+ if (have_flag(flgs, TR_IGNORE_ACID)) return (FALSE);
187+ return (TRUE);
188+}
189+
190+
191+/*!
192+* @brief アイテムが電撃で破損するかどうかを判定する(メインルーチン) /
193+* Electrical damage
194+* @param o_ptr アイテムの情報参照ポインタ
195+* @return 破損するならばTRUEを返す
196+* @todo 統合を検討
197+*/
198+int set_elec_destroy(object_type *o_ptr)
199+{
200+ BIT_FLAGS flgs[TR_FLAG_SIZE];
201+ if (!hates_elec(o_ptr)) return (FALSE);
202+ object_flags(o_ptr, flgs);
203+ if (have_flag(flgs, TR_IGNORE_ELEC)) return (FALSE);
204+ return (TRUE);
205+}
206+
207+
208+/*!
209+* @brief アイテムが火炎で破損するかどうかを判定する(メインルーチン) /
210+* Burn something
211+* @param o_ptr アイテムの情報参照ポインタ
212+* @return 破損するならばTRUEを返す
213+* @todo 統合を検討
214+*/
215+int set_fire_destroy(object_type *o_ptr)
216+{
217+ BIT_FLAGS flgs[TR_FLAG_SIZE];
218+ if (!hates_fire(o_ptr)) return (FALSE);
219+ object_flags(o_ptr, flgs);
220+ if (have_flag(flgs, TR_IGNORE_FIRE)) return (FALSE);
221+ return (TRUE);
222+}
223+
224+
225+/*!
226+* @brief アイテムが冷気で破損するかどうかを判定する(メインルーチン) /
227+* Freeze things
228+* @param o_ptr アイテムの情報参照ポインタ
229+* @return 破損するならばTRUEを返す
230+* @todo 統合を検討
231+*/
232+int set_cold_destroy(object_type *o_ptr)
233+{
234+ BIT_FLAGS flgs[TR_FLAG_SIZE];
235+ if (!hates_cold(o_ptr)) return (FALSE);
236+ object_flags(o_ptr, flgs);
237+ if (have_flag(flgs, TR_IGNORE_COLD)) return (FALSE);
238+ return (TRUE);
239+}
240+
5241 /*!
6242 * @brief 薬の破損効果処理 /
7243 * Potions "smash open" and cause an area effect when
--- a/src/object-broken.h
+++ b/src/object-broken.h
@@ -1,2 +1,12 @@
11 #pragma once
2+
3+extern bool hates_acid(object_type *o_ptr);
4+extern bool hates_elec(object_type *o_ptr);
5+extern bool hates_fire(object_type *o_ptr);
6+extern bool hates_cold(object_type *o_ptr);
7+extern int set_acid_destroy(object_type *o_ptr);
8+extern int set_elec_destroy(object_type *o_ptr);
9+extern int set_fire_destroy(object_type *o_ptr);
10+extern int set_cold_destroy(object_type *o_ptr);
11+
212 extern bool potion_smash_effect(MONSTER_IDX who, POSITION y, POSITION x, KIND_OBJECT_IDX k_idx);
--- a/src/player-damage.c
+++ b/src/player-damage.c
@@ -27,240 +27,6 @@
2727 #include "files.h"
2828
2929
30-/*!
31-* @brief アイテムが酸で破損するかどうかを判定する
32-* @param o_ptr アイテムの情報参照ポインタ
33-* @return 破損するならばTRUEを返す
34-* Note that amulets, rods, and high-level spell books are immune
35-* to "p_ptr->inventory_list damage" of any kind. Also sling ammo and shovels.
36-* Does a given class of objects (usually) hate acid?
37-* Note that acid can either melt or corrode something.
38-*/
39-bool hates_acid(object_type *o_ptr)
40-{
41- /* Analyze the type */
42- switch (o_ptr->tval)
43- {
44- /* Wearable items */
45- case TV_ARROW:
46- case TV_BOLT:
47- case TV_BOW:
48- case TV_SWORD:
49- case TV_HAFTED:
50- case TV_POLEARM:
51- case TV_HELM:
52- case TV_CROWN:
53- case TV_SHIELD:
54- case TV_BOOTS:
55- case TV_GLOVES:
56- case TV_CLOAK:
57- case TV_SOFT_ARMOR:
58- case TV_HARD_ARMOR:
59- case TV_DRAG_ARMOR:
60- {
61- return (TRUE);
62- }
63-
64- /* Staffs/Scrolls are wood/paper */
65- case TV_STAFF:
66- case TV_SCROLL:
67- {
68- return (TRUE);
69- }
70-
71- /* Ouch */
72- case TV_CHEST:
73- {
74- return (TRUE);
75- }
76-
77- /* Junk is useless */
78- case TV_SKELETON:
79- case TV_BOTTLE:
80- case TV_JUNK:
81- {
82- return (TRUE);
83- }
84- }
85-
86- return (FALSE);
87-}
88-
89-
90-/*!
91-* @brief アイテムが電撃で破損するかどうかを判定する /
92-* Does a given object (usually) hate electricity?
93-* @param o_ptr アイテムの情報参照ポインタ
94-* @return 破損するならばTRUEを返す
95-*/
96-bool hates_elec(object_type *o_ptr)
97-{
98- switch (o_ptr->tval)
99- {
100- case TV_RING:
101- case TV_WAND:
102- {
103- return (TRUE);
104- }
105- }
106-
107- return (FALSE);
108-}
109-
110-
111-/*!
112-* @brief アイテムが火炎で破損するかどうかを判定する /
113-* Does a given object (usually) hate fire?
114-* @param o_ptr アイテムの情報参照ポインタ
115-* @return 破損するならばTRUEを返す
116-* @details
117-* Hafted/Polearm weapons have wooden shafts.
118-* Arrows/Bows are mostly wooden.
119-*/
120-bool hates_fire(object_type *o_ptr)
121-{
122- /* Analyze the type */
123- switch (o_ptr->tval)
124- {
125- /* Wearable */
126- case TV_LITE:
127- case TV_ARROW:
128- case TV_BOW:
129- case TV_HAFTED:
130- case TV_POLEARM:
131- case TV_BOOTS:
132- case TV_GLOVES:
133- case TV_CLOAK:
134- case TV_SOFT_ARMOR:
135- {
136- return (TRUE);
137- }
138-
139- /* Books */
140- case TV_LIFE_BOOK:
141- case TV_SORCERY_BOOK:
142- case TV_NATURE_BOOK:
143- case TV_CHAOS_BOOK:
144- case TV_DEATH_BOOK:
145- case TV_TRUMP_BOOK:
146- case TV_ARCANE_BOOK:
147- case TV_CRAFT_BOOK:
148- case TV_DAEMON_BOOK:
149- case TV_CRUSADE_BOOK:
150- case TV_MUSIC_BOOK:
151- case TV_HISSATSU_BOOK:
152- case TV_HEX_BOOK:
153- {
154- return (TRUE);
155- }
156-
157- /* Chests */
158- case TV_CHEST:
159- {
160- return (TRUE);
161- }
162-
163- /* Staffs/Scrolls burn */
164- case TV_STAFF:
165- case TV_SCROLL:
166- {
167- return (TRUE);
168- }
169- }
170-
171- return (FALSE);
172-}
173-
174-
175-/*!
176-* @brief アイテムが冷気で破損するかどうかを判定する /
177-* Does a given object (usually) hate cold?
178-* @param o_ptr アイテムの情報参照ポインタ
179-* @return 破損するならばTRUEを返す
180-*/
181-bool hates_cold(object_type *o_ptr)
182-{
183- switch (o_ptr->tval)
184- {
185- case TV_POTION:
186- case TV_FLASK:
187- case TV_BOTTLE:
188- {
189- return (TRUE);
190- }
191- }
192-
193- return (FALSE);
194-}
195-
196-
197-/*!
198-* @brief アイテムが酸で破損するかどうかを判定する(メインルーチン) /
199-* Melt something
200-* @param o_ptr アイテムの情報参照ポインタ
201-* @return 破損するならばTRUEを返す
202-* @todo 統合を検討
203-*/
204-int set_acid_destroy(object_type *o_ptr)
205-{
206- BIT_FLAGS flgs[TR_FLAG_SIZE];
207- if (!hates_acid(o_ptr)) return (FALSE);
208- object_flags(o_ptr, flgs);
209- if (have_flag(flgs, TR_IGNORE_ACID)) return (FALSE);
210- return (TRUE);
211-}
212-
213-
214-/*!
215-* @brief アイテムが電撃で破損するかどうかを判定する(メインルーチン) /
216-* Electrical damage
217-* @param o_ptr アイテムの情報参照ポインタ
218-* @return 破損するならばTRUEを返す
219-* @todo 統合を検討
220-*/
221-int set_elec_destroy(object_type *o_ptr)
222-{
223- BIT_FLAGS flgs[TR_FLAG_SIZE];
224- if (!hates_elec(o_ptr)) return (FALSE);
225- object_flags(o_ptr, flgs);
226- if (have_flag(flgs, TR_IGNORE_ELEC)) return (FALSE);
227- return (TRUE);
228-}
229-
230-
231-/*!
232-* @brief アイテムが火炎で破損するかどうかを判定する(メインルーチン) /
233-* Burn something
234-* @param o_ptr アイテムの情報参照ポインタ
235-* @return 破損するならばTRUEを返す
236-* @todo 統合を検討
237-*/
238-int set_fire_destroy(object_type *o_ptr)
239-{
240- BIT_FLAGS flgs[TR_FLAG_SIZE];
241- if (!hates_fire(o_ptr)) return (FALSE);
242- object_flags(o_ptr, flgs);
243- if (have_flag(flgs, TR_IGNORE_FIRE)) return (FALSE);
244- return (TRUE);
245-}
246-
247-
248-/*!
249-* @brief アイテムが冷気で破損するかどうかを判定する(メインルーチン) /
250-* Freeze things
251-* @param o_ptr アイテムの情報参照ポインタ
252-* @return 破損するならばTRUEを返す
253-* @todo 統合を検討
254-*/
255-int set_cold_destroy(object_type *o_ptr)
256-{
257- BIT_FLAGS flgs[TR_FLAG_SIZE];
258- if (!hates_cold(o_ptr)) return (FALSE);
259- object_flags(o_ptr, flgs);
260- if (have_flag(flgs, TR_IGNORE_COLD)) return (FALSE);
261- return (TRUE);
262-}
263-
26430
26531 /*!
26632 * @brief アイテムが指定確率で破損するかどうかを判定する /
--- a/src/player-damage.h
+++ b/src/player-damage.h
@@ -16,14 +16,6 @@ extern int take_hit(int damage_type, HIT_POINT damage, concptr kb_str, int monsp
1616 */
1717 typedef int(*inven_func)(object_type *);
1818
19-extern bool hates_acid(object_type *o_ptr);
20-extern bool hates_elec(object_type *o_ptr);
21-extern bool hates_fire(object_type *o_ptr);
22-extern bool hates_cold(object_type *o_ptr);
23-extern int set_acid_destroy(object_type *o_ptr);
24-extern int set_elec_destroy(object_type *o_ptr);
25-extern int set_fire_destroy(object_type *o_ptr);
26-extern int set_cold_destroy(object_type *o_ptr);
2719 extern int inven_damage(inven_func typ, int perc);
2820 extern HIT_POINT acid_dam(HIT_POINT dam, concptr kb_str, int monspell, bool aura);
2921 extern HIT_POINT elec_dam(HIT_POINT dam, concptr kb_str, int monspell, bool aura);
Show on old repository browser