• R/O
  • HTTP
  • SSH
  • HTTPS

hengbandosx: Commit

The master and develop branches track hengband.

OS X development happens on the macos-1-6-2, macos-2-2-1, and macos-develop branches.


Commit MetaInfo

Revisionad0a8705fabe657e50496c5345b64f3933cbb386 (tree)
Time2021-04-30 22:31:04
AuthorHourier <66951241+Hourier@user...>
CommiterGitHub

Log Message

Merge pull request #986 from Hourier/feature/Adjust-Items-Alpha21

確認ありがとうございました!

Change Summary

Incremental Difference

--- a/lib/edit/k_info.txt
+++ b/lib/edit/k_info.txt
@@ -3432,7 +3432,7 @@ E:Dispel Evil:Rosewood
34323432 G:_:r
34333433 I:55:24:8
34343434 W:50:0:50:1200
3435-A:50/1
3435+A:35/1:50/1
34363436 P:0:1d2:0:0:0
34373437 D:$It does 80 damage to all evil monsters in sight when you use it.
34383438 D:それは使うと視界内の邪悪なモンスターに80のダメージを与える。
@@ -3476,7 +3476,7 @@ E:Power:Walnut
34763476 G:_:u
34773477 I:55:25:5
34783478 W:70:0:50:4000
3479-A:70/2
3479+A:50/4:60:4:70/2
34803480 P:0:1d2:0:0:0
34813481 D:$It does 150 damage to all monsters in sight when you use it.
34823482 D:それは使うと視界内のモンスターに150のダメージを与える。
@@ -6427,3 +6427,15 @@ F:RES_CURSE
64276427 D:$A faded cloak carved with magical runes.
64286428 D:魔術的なルーンの刻まれた陰気な外套だ。
64296429
6430+N:673:自己変容:虹色に輝く
6431+E:Self-Polymorph:Rainbow colored
6432+G:!:B
6433+I:75:54:0
6434+W:50:0:4:5000
6435+A:50/4
6436+P:0:1d1:0:0:0
6437+D:$Twice the calories, twice the carbs, twice the caffeine,
6438+D:$ and twice the delicious!
6439+D:$ It causes polymorph when drunk.
6440+D:二倍のカロリー、二倍の炭水化物、二倍のカフェイン、そして二倍おいしい!
6441+D:それは飲むと自己変容を起こす。
--- a/lib/edit/misc.txt
+++ b/lib/edit/misc.txt
@@ -16,7 +16,7 @@ M:WY:66
1616 M:R:1298
1717
1818 # Maximum number of items in k_info.txt
19-M:K:673
19+M:K:674
2020
2121 # Maximum number of vaults in v_info.txt
2222 M:V:173
--- a/src/object-use/quaff-execution.cpp
+++ b/src/object-use/quaff-execution.cpp
@@ -58,14 +58,14 @@
5858 */
5959 static bool booze(player_type *creature_ptr)
6060 {
61- bool ident = FALSE;
61+ bool ident = false;
6262 if (creature_ptr->pclass != CLASS_MONK)
6363 chg_virtue(creature_ptr, V_HARMONY, -1);
6464 else if (!has_resist_conf(creature_ptr))
6565 creature_ptr->special_attack |= ATTACK_SUIKEN;
6666
6767 if (!has_resist_conf(creature_ptr) && set_confused(creature_ptr, randint0(20) + 15)) {
68- ident = TRUE;
68+ ident = true;
6969 }
7070
7171 if (has_resist_chaos(creature_ptr)) {
@@ -73,17 +73,17 @@ static bool booze(player_type *creature_ptr)
7373 }
7474
7575 if (one_in_(2) && set_image(creature_ptr, creature_ptr->image + randint0(150) + 150)) {
76- ident = TRUE;
76+ ident = true;
7777 }
7878
7979 if (one_in_(13) && (creature_ptr->pclass != CLASS_MONK)) {
80- ident = TRUE;
80+ ident = true;
8181 if (one_in_(3))
8282 lose_all_info(creature_ptr);
8383 else
8484 wiz_dark(creature_ptr);
8585
86- (void)teleport_player_aux(creature_ptr, 100, FALSE, static_cast<teleport_flags>(TELEPORT_NONMAGICAL | TELEPORT_PASSIVE));
86+ (void)teleport_player_aux(creature_ptr, 100, false, static_cast<teleport_flags>(TELEPORT_NONMAGICAL | TELEPORT_PASSIVE));
8787 wiz_dark(creature_ptr);
8888 msg_print(_("知らない場所で目が醒めた。頭痛がする。", "You wake up somewhere with a sore head..."));
8989 msg_print(_("何も思い出せない。どうやってここへ来たのかも分からない!", "You can't remember a thing or how you got here!"));
@@ -142,7 +142,7 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
142142 q_ptr->number = 1;
143143 vary_item(creature_ptr, item, -1);
144144 sound(SOUND_QUAFF);
145- bool ident = FALSE;
145+ bool ident = false;
146146 DEPTH lev = k_info[q_ptr->k_idx].level;
147147 if (q_ptr->tval == TV_POTION) {
148148 switch (q_ptr->sval) {
@@ -150,24 +150,24 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
150150 case SV_POTION_WATER:
151151 msg_print(_("口の中がさっぱりした。", "That was refreshing."));
152152 msg_print(_("のどの渇きが少しおさまった。", "You feel less thirsty."));
153- ident = TRUE;
153+ ident = true;
154154 break;
155155
156156 case SV_POTION_APPLE_JUICE:
157157 msg_print(_("甘くてサッパリとしていて、とてもおいしい。", "It's sweet, refreshing and very tasty."));
158158 msg_print(_("のどの渇きが少しおさまった。", "You feel less thirsty."));
159- ident = TRUE;
159+ ident = true;
160160 break;
161161
162162 case SV_POTION_SLIME_MOLD:
163163 msg_print(_("なんとも不気味な味だ。", "That was strange."));
164164 msg_print(_("のどの渇きが少しおさまった。", "You feel less thirsty."));
165- ident = TRUE;
165+ ident = true;
166166 break;
167167
168168 case SV_POTION_SLOWNESS:
169- if (set_slow(creature_ptr, randint1(25) + 15, FALSE))
170- ident = TRUE;
169+ if (set_slow(creature_ptr, randint1(25) + 15, false))
170+ ident = true;
171171 break;
172172
173173 case SV_POTION_SALT_WATER:
@@ -182,13 +182,13 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
182182
183183 (void)set_poisoned(creature_ptr, 0);
184184 (void)set_paralyzed(creature_ptr, creature_ptr->paralyzed + 4);
185- ident = TRUE;
185+ ident = true;
186186 break;
187187
188188 case SV_POTION_POISON:
189189 if (!(has_resist_pois(creature_ptr) || is_oppose_pois(creature_ptr))) {
190190 if (set_poisoned(creature_ptr, creature_ptr->poisoned + randint0(15) + 10)) {
191- ident = TRUE;
191+ ident = true;
192192 }
193193 }
194194 break;
@@ -196,7 +196,7 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
196196 case SV_POTION_BLINDNESS:
197197 if (!has_resist_blind(creature_ptr)) {
198198 if (set_blind(creature_ptr, creature_ptr->blind + randint0(100) + 100)) {
199- ident = TRUE;
199+ ident = true;
200200 }
201201 }
202202 break;
@@ -213,10 +213,10 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
213213 msg_print(_("恐ろしい光景が頭に浮かんできた。", "A horrible vision enters your mind."));
214214
215215 /* Have some nightmares */
216- sanity_blast(creature_ptr, NULL, FALSE);
216+ sanity_blast(creature_ptr, NULL, false);
217217 }
218218 if (set_paralyzed(creature_ptr, creature_ptr->paralyzed + randint0(4) + 4)) {
219- ident = TRUE;
219+ ident = true;
220220 }
221221 }
222222 break;
@@ -227,7 +227,7 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
227227 chg_virtue(creature_ptr, V_KNOWLEDGE, -5);
228228
229229 lose_exp(creature_ptr, creature_ptr->exp / 4);
230- ident = TRUE;
230+ ident = true;
231231 }
232232 break;
233233
@@ -241,37 +241,37 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
241241 (void)dec_stat(creature_ptr, A_STR, 25, TRUE);
242242 (void)dec_stat(creature_ptr, A_CHR, 25, TRUE);
243243 (void)dec_stat(creature_ptr, A_INT, 25, TRUE);
244- ident = TRUE;
244+ ident = true;
245245 break;
246246
247247 case SV_POTION_DEC_STR:
248248 if (do_dec_stat(creature_ptr, A_STR))
249- ident = TRUE;
249+ ident = true;
250250 break;
251251
252252 case SV_POTION_DEC_INT:
253253 if (do_dec_stat(creature_ptr, A_INT))
254- ident = TRUE;
254+ ident = true;
255255 break;
256256
257257 case SV_POTION_DEC_WIS:
258258 if (do_dec_stat(creature_ptr, A_WIS))
259- ident = TRUE;
259+ ident = true;
260260 break;
261261
262262 case SV_POTION_DEC_DEX:
263263 if (do_dec_stat(creature_ptr, A_DEX))
264- ident = TRUE;
264+ ident = true;
265265 break;
266266
267267 case SV_POTION_DEC_CON:
268268 if (do_dec_stat(creature_ptr, A_CON))
269- ident = TRUE;
269+ ident = true;
270270 break;
271271
272272 case SV_POTION_DEC_CHR:
273273 if (do_dec_stat(creature_ptr, A_CHR))
274- ident = TRUE;
274+ ident = true;
275275 break;
276276
277277 case SV_POTION_DETONATIONS:
@@ -283,54 +283,54 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
283283 chg_virtue(creature_ptr, V_UNLIFE, 5);
284284 msg_print(_("死の予感が体中を駆けめぐった。", "A feeling of Death flows through your body."));
285285 take_hit(creature_ptr, DAMAGE_LOSELIFE, 5000, _("死の薬", "a potion of Death"));
286- ident = TRUE;
286+ ident = true;
287287 break;
288288
289289 case SV_POTION_INFRAVISION:
290- if (set_tim_infra(creature_ptr, creature_ptr->tim_infra + 100 + randint1(100), FALSE)) {
291- ident = TRUE;
290+ if (set_tim_infra(creature_ptr, creature_ptr->tim_infra + 100 + randint1(100), false)) {
291+ ident = true;
292292 }
293293 break;
294294
295295 case SV_POTION_DETECT_INVIS:
296- if (set_tim_invis(creature_ptr, creature_ptr->tim_invis + 12 + randint1(12), FALSE)) {
297- ident = TRUE;
296+ if (set_tim_invis(creature_ptr, creature_ptr->tim_invis + 12 + randint1(12), false)) {
297+ ident = true;
298298 }
299299 break;
300300
301301 case SV_POTION_SLOW_POISON:
302302 if (set_poisoned(creature_ptr, creature_ptr->poisoned / 2))
303- ident = TRUE;
303+ ident = true;
304304 break;
305305
306306 case SV_POTION_CURE_POISON:
307307 if (set_poisoned(creature_ptr, 0))
308- ident = TRUE;
308+ ident = true;
309309 break;
310310
311311 case SV_POTION_BOLDNESS:
312312 if (set_afraid(creature_ptr, 0))
313- ident = TRUE;
313+ ident = true;
314314 break;
315315
316316 case SV_POTION_SPEED:
317317 if (!creature_ptr->fast) {
318- if (set_fast(creature_ptr, randint1(25) + 15, FALSE))
319- ident = TRUE;
318+ if (set_fast(creature_ptr, randint1(25) + 15, false))
319+ ident = true;
320320 } else {
321- (void)set_fast(creature_ptr, creature_ptr->fast + 5, FALSE);
321+ (void)set_fast(creature_ptr, creature_ptr->fast + 5, false);
322322 }
323323 break;
324324
325325 case SV_POTION_RESIST_HEAT:
326- if (set_oppose_fire(creature_ptr, creature_ptr->oppose_fire + randint1(10) + 10, FALSE)) {
327- ident = TRUE;
326+ if (set_oppose_fire(creature_ptr, creature_ptr->oppose_fire + randint1(10) + 10, false)) {
327+ ident = true;
328328 }
329329 break;
330330
331331 case SV_POTION_RESIST_COLD:
332- if (set_oppose_cold(creature_ptr, creature_ptr->oppose_cold + randint1(10) + 10, FALSE)) {
333- ident = TRUE;
332+ if (set_oppose_cold(creature_ptr, creature_ptr->oppose_cold + randint1(10) + 10, false)) {
333+ ident = true;
334334 }
335335 break;
336336
@@ -372,90 +372,95 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
372372
373373 case SV_POTION_RESTORE_EXP:
374374 if (restore_level(creature_ptr))
375- ident = TRUE;
375+ ident = true;
376376 break;
377377
378378 case SV_POTION_RES_STR:
379379 if (do_res_stat(creature_ptr, A_STR))
380- ident = TRUE;
380+ ident = true;
381381 break;
382382
383383 case SV_POTION_RES_INT:
384384 if (do_res_stat(creature_ptr, A_INT))
385- ident = TRUE;
385+ ident = true;
386386 break;
387387
388388 case SV_POTION_RES_WIS:
389389 if (do_res_stat(creature_ptr, A_WIS))
390- ident = TRUE;
390+ ident = true;
391391 break;
392392
393393 case SV_POTION_RES_DEX:
394394 if (do_res_stat(creature_ptr, A_DEX))
395- ident = TRUE;
395+ ident = true;
396396 break;
397397
398398 case SV_POTION_RES_CON:
399399 if (do_res_stat(creature_ptr, A_CON))
400- ident = TRUE;
400+ ident = true;
401401 break;
402402
403403 case SV_POTION_RES_CHR:
404404 if (do_res_stat(creature_ptr, A_CHR))
405- ident = TRUE;
405+ ident = true;
406406 break;
407407
408408 case SV_POTION_INC_STR:
409409 if (do_inc_stat(creature_ptr, A_STR))
410- ident = TRUE;
410+ ident = true;
411411 break;
412412
413413 case SV_POTION_INC_INT:
414414 if (do_inc_stat(creature_ptr, A_INT))
415- ident = TRUE;
415+ ident = true;
416416 break;
417417
418418 case SV_POTION_INC_WIS:
419419 if (do_inc_stat(creature_ptr, A_WIS))
420- ident = TRUE;
420+ ident = true;
421421 break;
422422
423423 case SV_POTION_INC_DEX:
424424 if (do_inc_stat(creature_ptr, A_DEX))
425- ident = TRUE;
425+ ident = true;
426426 break;
427427
428428 case SV_POTION_INC_CON:
429429 if (do_inc_stat(creature_ptr, A_CON))
430- ident = TRUE;
430+ ident = true;
431431 break;
432432
433433 case SV_POTION_INC_CHR:
434434 if (do_inc_stat(creature_ptr, A_CHR))
435- ident = TRUE;
435+ ident = true;
436+ break;
437+
438+ case SV_POTION_POLY_SELF:
439+ do_poly_self(creature_ptr);
440+ ident = true;
436441 break;
437442
438443 case SV_POTION_AUGMENTATION:
439444 if (do_inc_stat(creature_ptr, A_STR))
440- ident = TRUE;
445+ ident = true;
441446 if (do_inc_stat(creature_ptr, A_INT))
442- ident = TRUE;
447+ ident = true;
443448 if (do_inc_stat(creature_ptr, A_WIS))
444- ident = TRUE;
449+ ident = true;
445450 if (do_inc_stat(creature_ptr, A_DEX))
446- ident = TRUE;
451+ ident = true;
447452 if (do_inc_stat(creature_ptr, A_CON))
448- ident = TRUE;
453+ ident = true;
449454 if (do_inc_stat(creature_ptr, A_CHR))
450- ident = TRUE;
455+ ident = true;
451456 break;
452457
453458 case SV_POTION_ENLIGHTENMENT:
454459 msg_print(_("自分の置かれている状況が脳裏に浮かんできた...", "An image of your surroundings forms in your mind..."));
455460 chg_virtue(creature_ptr, V_KNOWLEDGE, 1);
456461 chg_virtue(creature_ptr, V_ENLIGHTEN, 1);
457- wiz_lite(creature_ptr, FALSE);
458- ident = TRUE;
462+ wiz_lite(creature_ptr, false);
463+ ident = true;
459464 break;
460465
461466 case SV_POTION_STAR_ENLIGHTENMENT:
@@ -463,7 +468,7 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
463468 chg_virtue(creature_ptr, V_KNOWLEDGE, 1);
464469 chg_virtue(creature_ptr, V_ENLIGHTEN, 2);
465470 msg_print(NULL);
466- wiz_lite(creature_ptr, FALSE);
471+ wiz_lite(creature_ptr, false);
467472 (void)do_inc_stat(creature_ptr, A_INT);
468473 (void)do_inc_stat(creature_ptr, A_WIS);
469474 (void)detect_traps(creature_ptr, DETECT_RAD_DEFAULT, TRUE);
@@ -474,14 +479,14 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
474479 (void)detect_objects_normal(creature_ptr, DETECT_RAD_DEFAULT);
475480 identify_pack(creature_ptr);
476481 self_knowledge(creature_ptr);
477- ident = TRUE;
482+ ident = true;
478483 break;
479484
480485 case SV_POTION_SELF_KNOWLEDGE:
481486 msg_print(_("自分自身のことが少しは分かった気がする...", "You begin to know yourself a little better..."));
482487 msg_print(NULL);
483488 self_knowledge(creature_ptr);
484- ident = TRUE;
489+ ident = true;
485490 break;
486491
487492 case SV_POTION_EXPERIENCE:
@@ -494,27 +499,27 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
494499 ee = 100000L;
495500 msg_print(_("更に経験を積んだような気がする。", "You feel more experienced."));
496501 gain_exp(creature_ptr, ee);
497- ident = TRUE;
502+ ident = true;
498503 }
499504 break;
500505
501506 case SV_POTION_RESISTANCE:
502- (void)set_oppose_acid(creature_ptr, creature_ptr->oppose_acid + randint1(20) + 20, FALSE);
503- (void)set_oppose_elec(creature_ptr, creature_ptr->oppose_elec + randint1(20) + 20, FALSE);
504- (void)set_oppose_fire(creature_ptr, creature_ptr->oppose_fire + randint1(20) + 20, FALSE);
505- (void)set_oppose_cold(creature_ptr, creature_ptr->oppose_cold + randint1(20) + 20, FALSE);
506- (void)set_oppose_pois(creature_ptr, creature_ptr->oppose_pois + randint1(20) + 20, FALSE);
507- ident = TRUE;
507+ (void)set_oppose_acid(creature_ptr, creature_ptr->oppose_acid + randint1(20) + 20, false);
508+ (void)set_oppose_elec(creature_ptr, creature_ptr->oppose_elec + randint1(20) + 20, false);
509+ (void)set_oppose_fire(creature_ptr, creature_ptr->oppose_fire + randint1(20) + 20, false);
510+ (void)set_oppose_cold(creature_ptr, creature_ptr->oppose_cold + randint1(20) + 20, false);
511+ (void)set_oppose_pois(creature_ptr, creature_ptr->oppose_pois + randint1(20) + 20, false);
512+ ident = true;
508513 break;
509514
510515 case SV_POTION_CURING:
511516 if (true_healing(creature_ptr, 50))
512- ident = TRUE;
517+ ident = true;
513518 break;
514519
515520 case SV_POTION_INVULNERABILITY:
516- (void)set_invuln(creature_ptr, creature_ptr->invuln + randint1(4) + 4, FALSE);
517- ident = TRUE;
521+ (void)set_invuln(creature_ptr, creature_ptr->invuln + randint1(4) + 4, false);
522+ ident = true;
518523 break;
519524
520525 case SV_POTION_NEW_LIFE:
@@ -522,13 +527,13 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
522527 get_max_stats(creature_ptr);
523528 creature_ptr->update |= PU_BONUS;
524529 lose_all_mutations(creature_ptr);
525- ident = TRUE;
530+ ident = true;
526531 break;
527532
528533 case SV_POTION_NEO_TSUYOSHI:
529534 (void)set_image(creature_ptr, 0);
530- (void)set_tsuyoshi(creature_ptr, creature_ptr->tsuyoshi + randint1(100) + 100, FALSE);
531- ident = TRUE;
535+ (void)set_tsuyoshi(creature_ptr, creature_ptr->tsuyoshi + randint1(100) + 100, false);
536+ ident = true;
532537 break;
533538
534539 case SV_POTION_TSUYOSHI:
@@ -539,7 +544,7 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
539544 if (!has_resist_chaos(creature_ptr)) {
540545 (void)set_image(creature_ptr, 50 + randint1(50));
541546 }
542- ident = TRUE;
547+ ident = true;
543548 break;
544549
545550 case SV_POTION_POLYMORPH:
@@ -549,9 +554,9 @@ void exe_quaff_potion(player_type *creature_ptr, INVENTORY_IDX item)
549554 do {
550555 if (one_in_(2)) {
551556 if (gain_mutation(creature_ptr, 0))
552- ident = TRUE;
557+ ident = true;
553558 } else if (lose_mutation(creature_ptr, 0))
554- ident = TRUE;
559+ ident = true;
555560 } while (!ident || one_in_(2));
556561 }
557562 break;
--- a/src/object/object-broken.cpp
+++ b/src/object/object-broken.cpp
@@ -5,11 +5,11 @@
55 */
66 #include "object/object-broken.h"
77 #include "effect/effect-characteristics.h"
8+#include "effect/effect-processor.h"
89 #include "mind/snipe-types.h"
910 #include "object-enchant/tr-types.h"
1011 #include "object/object-flags.h"
1112 #include "object/object-kind.h"
12-#include "effect/effect-processor.h"
1313 #include "spell/spell-types.h"
1414 #include "sv-definition/sv-potion-types.h"
1515 #include "system/object-type-definition.h"
@@ -17,252 +17,238 @@
1717 #include "util/bit-flags-calculator.h"
1818
1919 /*!
20-* @brief アイテムが酸で破損するかどうかを判定する
21-* @param o_ptr アイテムの情報参照ポインタ
22-* @return 破損するならばTRUEを返す
23-* Note that amulets, rods, and high-level spell books are immune
24-* to "inventory damage" of any kind. Also sling ammo and shovels.
25-* Does a given class of objects (usually) hate acid?
26-* Note that acid can either melt or corrode something.
27-*/
20+ * @brief アイテムが酸で破損するかどうかを判定する
21+ * @param o_ptr アイテムの情報参照ポインタ
22+ * @return 破損するならばTRUEを返す
23+ * Note that amulets, rods, and high-level spell books are immune
24+ * to "inventory damage" of any kind. Also sling ammo and shovels.
25+ * Does a given class of objects (usually) hate acid?
26+ * Note that acid can either melt or corrode something.
27+ */
2828 bool hates_acid(object_type *o_ptr)
2929 {
30- /* Analyze the type */
31- switch (o_ptr->tval)
32- {
33- /* Wearable items */
34- case TV_ARROW:
35- case TV_BOLT:
36- case TV_BOW:
37- case TV_SWORD:
38- case TV_HAFTED:
39- case TV_POLEARM:
40- case TV_HELM:
41- case TV_CROWN:
42- case TV_SHIELD:
43- case TV_BOOTS:
44- case TV_GLOVES:
45- case TV_CLOAK:
46- case TV_SOFT_ARMOR:
47- case TV_HARD_ARMOR:
48- case TV_DRAG_ARMOR:
49- {
50- return TRUE;
51- }
52-
53- /* Staffs/Scrolls are wood/paper */
54- case TV_STAFF:
55- case TV_SCROLL:
56- {
57- return TRUE;
58- }
59-
60- /* Ouch */
61- case TV_CHEST:
62- {
63- return TRUE;
64- }
65-
66- /* Junk is useless */
67- case TV_SKELETON:
68- case TV_BOTTLE:
69- case TV_JUNK:
70- {
71- return TRUE;
72- }
73-
74- default:
75- break;
76- }
77-
78- return FALSE;
30+ /* Analyze the type */
31+ switch (o_ptr->tval) {
32+ /* Wearable items */
33+ case TV_ARROW:
34+ case TV_BOLT:
35+ case TV_BOW:
36+ case TV_SWORD:
37+ case TV_HAFTED:
38+ case TV_POLEARM:
39+ case TV_HELM:
40+ case TV_CROWN:
41+ case TV_SHIELD:
42+ case TV_BOOTS:
43+ case TV_GLOVES:
44+ case TV_CLOAK:
45+ case TV_SOFT_ARMOR:
46+ case TV_HARD_ARMOR:
47+ case TV_DRAG_ARMOR: {
48+ return TRUE;
49+ }
50+
51+ /* Staffs/Scrolls are wood/paper */
52+ case TV_STAFF:
53+ case TV_SCROLL: {
54+ return TRUE;
55+ }
56+
57+ /* Ouch */
58+ case TV_CHEST: {
59+ return TRUE;
60+ }
61+
62+ /* Junk is useless */
63+ case TV_SKELETON:
64+ case TV_BOTTLE:
65+ case TV_JUNK: {
66+ return TRUE;
67+ }
68+
69+ default:
70+ break;
71+ }
72+
73+ return FALSE;
7974 }
8075
81-
8276 /*!
83-* @brief アイテムが電撃で破損するかどうかを判定する /
84-* Does a given object (usually) hate electricity?
85-* @param o_ptr アイテムの情報参照ポインタ
86-* @return 破損するならばTRUEを返す
87-*/
77+ * @brief アイテムが電撃で破損するかどうかを判定する /
78+ * Does a given object (usually) hate electricity?
79+ * @param o_ptr アイテムの情報参照ポインタ
80+ * @return 破損するならばTRUEを返す
81+ */
8882 bool hates_elec(object_type *o_ptr)
8983 {
90- switch (o_ptr->tval)
91- {
92- case TV_RING:
93- case TV_WAND:
94- {
95- return TRUE;
96- }
84+ switch (o_ptr->tval) {
85+ case TV_RING:
86+ case TV_WAND: {
87+ return TRUE;
88+ }
9789
98- default:
99- break;
100- }
90+ default:
91+ break;
92+ }
10193
102- return FALSE;
94+ return FALSE;
10395 }
10496
105-
10697 /*!
107-* @brief アイテムが火炎で破損するかどうかを判定する /
108-* Does a given object (usually) hate fire?
109-* @param o_ptr アイテムの情報参照ポインタ
110-* @return 破損するならばTRUEを返す
111-* @details
112-* Hafted/Polearm weapons have wooden shafts.
113-* Arrows/Bows are mostly wooden.
114-*/
98+ * @brief アイテムが火炎で破損するかどうかを判定する /
99+ * Does a given object (usually) hate fire?
100+ * @param o_ptr アイテムの情報参照ポインタ
101+ * @return 破損するならばTRUEを返す
102+ * @details
103+ * Hafted/Polearm weapons have wooden shafts.
104+ * Arrows/Bows are mostly wooden.
105+ */
115106 bool hates_fire(object_type *o_ptr)
116107 {
117- /* Analyze the type */
118- switch (o_ptr->tval)
119- {
120- /* Wearable */
121- case TV_LITE:
122- case TV_ARROW:
123- case TV_BOW:
124- case TV_HAFTED:
125- case TV_POLEARM:
126- case TV_BOOTS:
127- case TV_GLOVES:
128- case TV_CLOAK:
129- case TV_SOFT_ARMOR:
130- {
131- return TRUE;
132- }
133-
134- /* Books */
135- case TV_LIFE_BOOK:
136- case TV_SORCERY_BOOK:
137- case TV_NATURE_BOOK:
138- case TV_CHAOS_BOOK:
139- case TV_DEATH_BOOK:
140- case TV_TRUMP_BOOK:
141- case TV_ARCANE_BOOK:
142- case TV_CRAFT_BOOK:
143- case TV_DEMON_BOOK:
144- case TV_CRUSADE_BOOK:
145- case TV_MUSIC_BOOK:
146- case TV_HISSATSU_BOOK:
147- case TV_HEX_BOOK:
148- {
149- return TRUE;
150- }
151-
152- /* Chests */
153- case TV_CHEST:
154- {
155- return TRUE;
156- }
157-
158- /* Staffs/Scrolls burn */
159- case TV_STAFF:
160- case TV_SCROLL:
161- {
162- return TRUE;
163- }
164-
165- default:
166- break;
167- }
168-
169- return FALSE;
108+ /* Analyze the type */
109+ switch (o_ptr->tval) {
110+ /* Wearable */
111+ case TV_LITE:
112+ case TV_ARROW:
113+ case TV_BOW:
114+ case TV_HAFTED:
115+ case TV_POLEARM:
116+ case TV_BOOTS:
117+ case TV_GLOVES:
118+ case TV_CLOAK:
119+ case TV_SOFT_ARMOR: {
120+ return TRUE;
121+ }
122+
123+ /* Books */
124+ case TV_LIFE_BOOK:
125+ case TV_SORCERY_BOOK:
126+ case TV_NATURE_BOOK:
127+ case TV_CHAOS_BOOK:
128+ case TV_DEATH_BOOK:
129+ case TV_TRUMP_BOOK:
130+ case TV_ARCANE_BOOK:
131+ case TV_CRAFT_BOOK:
132+ case TV_DEMON_BOOK:
133+ case TV_CRUSADE_BOOK:
134+ case TV_MUSIC_BOOK:
135+ case TV_HISSATSU_BOOK:
136+ case TV_HEX_BOOK: {
137+ return TRUE;
138+ }
139+
140+ /* Chests */
141+ case TV_CHEST: {
142+ return TRUE;
143+ }
144+
145+ /* Staffs/Scrolls burn */
146+ case TV_STAFF:
147+ case TV_SCROLL: {
148+ return TRUE;
149+ }
150+
151+ default:
152+ break;
153+ }
154+
155+ return FALSE;
170156 }
171157
172-
173158 /*!
174-* @brief アイテムが冷気で破損するかどうかを判定する /
175-* Does a given object (usually) hate cold?
176-* @param o_ptr アイテムの情報参照ポインタ
177-* @return 破損するならばTRUEを返す
178-*/
159+ * @brief アイテムが冷気で破損するかどうかを判定する /
160+ * Does a given object (usually) hate cold?
161+ * @param o_ptr アイテムの情報参照ポインタ
162+ * @return 破損するならばTRUEを返す
163+ */
179164 bool hates_cold(object_type *o_ptr)
180165 {
181- switch (o_ptr->tval)
182- {
183- case TV_POTION:
184- case TV_FLASK:
185- case TV_BOTTLE:
186- {
187- return TRUE;
188- }
189-
190- default:
191- break;
192- }
193-
194- return FALSE;
166+ switch (o_ptr->tval) {
167+ case TV_POTION:
168+ case TV_FLASK:
169+ case TV_BOTTLE: {
170+ return TRUE;
171+ }
172+
173+ default:
174+ break;
175+ }
176+
177+ return FALSE;
195178 }
196179
197-
198180 /*!
199-* @brief アイテムが酸で破損するかどうかを判定する(メインルーチン) /
200-* Melt something
201-* @param o_ptr アイテムの情報参照ポインタ
202-* @return 破損するならばTRUEを返す
203-* @todo 統合を検討
204-*/
181+ * @brief アイテムが酸で破損するかどうかを判定する(メインルーチン) /
182+ * Melt something
183+ * @param o_ptr アイテムの情報参照ポインタ
184+ * @return 破損するならばTRUEを返す
185+ * @todo 統合を検討
186+ */
205187 int set_acid_destroy(player_type *owner_ptr, object_type *o_ptr)
206188 {
207- BIT_FLAGS flgs[TR_FLAG_SIZE];
208- if (!hates_acid(o_ptr)) return FALSE;
209- object_flags(owner_ptr, o_ptr, flgs);
210- if (has_flag(flgs, TR_IGNORE_ACID)) return FALSE;
211- return TRUE;
189+ BIT_FLAGS flgs[TR_FLAG_SIZE];
190+ if (!hates_acid(o_ptr))
191+ return FALSE;
192+ object_flags(owner_ptr, o_ptr, flgs);
193+ if (has_flag(flgs, TR_IGNORE_ACID))
194+ return FALSE;
195+ return TRUE;
212196 }
213197
214-
215198 /*!
216-* @brief アイテムが電撃で破損するかどうかを判定する(メインルーチン) /
217-* Electrical damage
218-* @param o_ptr アイテムの情報参照ポインタ
219-* @return 破損するならばTRUEを返す
220-* @todo 統合を検討
221-*/
199+ * @brief アイテムが電撃で破損するかどうかを判定する(メインルーチン) /
200+ * Electrical damage
201+ * @param o_ptr アイテムの情報参照ポインタ
202+ * @return 破損するならばTRUEを返す
203+ * @todo 統合を検討
204+ */
222205 int set_elec_destroy(player_type *owner_ptr, object_type *o_ptr)
223206 {
224- BIT_FLAGS flgs[TR_FLAG_SIZE];
225- if (!hates_elec(o_ptr)) return FALSE;
226- object_flags(owner_ptr, o_ptr, flgs);
227- if (has_flag(flgs, TR_IGNORE_ELEC)) return FALSE;
228- return TRUE;
207+ BIT_FLAGS flgs[TR_FLAG_SIZE];
208+ if (!hates_elec(o_ptr))
209+ return FALSE;
210+ object_flags(owner_ptr, o_ptr, flgs);
211+ if (has_flag(flgs, TR_IGNORE_ELEC))
212+ return FALSE;
213+ return TRUE;
229214 }
230215
231-
232216 /*!
233-* @brief アイテムが火炎で破損するかどうかを判定する(メインルーチン) /
234-* Burn something
235-* @param o_ptr アイテムの情報参照ポインタ
236-* @return 破損するならばTRUEを返す
237-* @todo 統合を検討
238-*/
217+ * @brief アイテムが火炎で破損するかどうかを判定する(メインルーチン) /
218+ * Burn something
219+ * @param o_ptr アイテムの情報参照ポインタ
220+ * @return 破損するならばTRUEを返す
221+ * @todo 統合を検討
222+ */
239223 int set_fire_destroy(player_type *owner_ptr, object_type *o_ptr)
240224 {
241- BIT_FLAGS flgs[TR_FLAG_SIZE];
242- if (!hates_fire(o_ptr)) return FALSE;
243- object_flags(owner_ptr, o_ptr, flgs);
244- if (has_flag(flgs, TR_IGNORE_FIRE)) return FALSE;
245- return TRUE;
225+ BIT_FLAGS flgs[TR_FLAG_SIZE];
226+ if (!hates_fire(o_ptr))
227+ return FALSE;
228+ object_flags(owner_ptr, o_ptr, flgs);
229+ if (has_flag(flgs, TR_IGNORE_FIRE))
230+ return FALSE;
231+ return TRUE;
246232 }
247233
248-
249234 /*!
250-* @brief アイテムが冷気で破損するかどうかを判定する(メインルーチン) /
251-* Freeze things
252-* @param o_ptr アイテムの情報参照ポインタ
253-* @return 破損するならばTRUEを返す
254-* @todo 統合を検討
255-*/
235+ * @brief アイテムが冷気で破損するかどうかを判定する(メインルーチン) /
236+ * Freeze things
237+ * @param o_ptr アイテムの情報参照ポインタ
238+ * @return 破損するならばTRUEを返す
239+ * @todo 統合を検討
240+ */
256241 int set_cold_destroy(player_type *owner_ptr, object_type *o_ptr)
257242 {
258- BIT_FLAGS flgs[TR_FLAG_SIZE];
259- if (!hates_cold(o_ptr)) return FALSE;
260- object_flags(owner_ptr, o_ptr, flgs);
261- if (has_flag(flgs, TR_IGNORE_COLD)) return FALSE;
262- return TRUE;
243+ BIT_FLAGS flgs[TR_FLAG_SIZE];
244+ if (!hates_cold(o_ptr))
245+ return FALSE;
246+ object_flags(owner_ptr, o_ptr, flgs);
247+ if (has_flag(flgs, TR_IGNORE_COLD))
248+ return FALSE;
249+ return TRUE;
263250 }
264251
265-
266252 /*!
267253 * @brief 薬の破損効果処理 /
268254 * Potions "smash open" and cause an area effect when
@@ -292,137 +278,141 @@ int set_cold_destroy(player_type *owner_ptr, object_type *o_ptr)
292278 */
293279 bool potion_smash_effect(player_type *owner_ptr, MONSTER_IDX who, POSITION y, POSITION x, KIND_OBJECT_IDX k_idx)
294280 {
295- int radius = 2;
296- int dt = 0;
297- int dam = 0;
298- bool angry = FALSE;
299- object_kind *k_ptr = &k_info[k_idx];
300- switch (k_ptr->sval)
301- {
302- case SV_POTION_SALT_WATER:
303- case SV_POTION_SLIME_MOLD:
304- case SV_POTION_LOSE_MEMORIES:
305- case SV_POTION_DEC_STR:
306- case SV_POTION_DEC_INT:
307- case SV_POTION_DEC_WIS:
308- case SV_POTION_DEC_DEX:
309- case SV_POTION_DEC_CON:
310- case SV_POTION_DEC_CHR:
311- case SV_POTION_WATER: /* perhaps a 'water' attack? */
312- case SV_POTION_APPLE_JUICE:
313- return TRUE;
314-
315- case SV_POTION_INFRAVISION:
316- case SV_POTION_DETECT_INVIS:
317- case SV_POTION_SLOW_POISON:
318- case SV_POTION_CURE_POISON:
319- case SV_POTION_BOLDNESS:
320- case SV_POTION_RESIST_HEAT:
321- case SV_POTION_RESIST_COLD:
322- case SV_POTION_HEROISM:
323- case SV_POTION_BESERK_STRENGTH:
324- case SV_POTION_RES_STR:
325- case SV_POTION_RES_INT:
326- case SV_POTION_RES_WIS:
327- case SV_POTION_RES_DEX:
328- case SV_POTION_RES_CON:
329- case SV_POTION_RES_CHR:
330- case SV_POTION_INC_STR:
331- case SV_POTION_INC_INT:
332- case SV_POTION_INC_WIS:
333- case SV_POTION_INC_DEX:
334- case SV_POTION_INC_CON:
335- case SV_POTION_INC_CHR:
336- case SV_POTION_AUGMENTATION:
337- case SV_POTION_ENLIGHTENMENT:
338- case SV_POTION_STAR_ENLIGHTENMENT:
339- case SV_POTION_SELF_KNOWLEDGE:
340- case SV_POTION_EXPERIENCE:
341- case SV_POTION_RESISTANCE:
342- case SV_POTION_INVULNERABILITY:
343- case SV_POTION_NEW_LIFE:
344- /* All of the above potions have no effect when shattered */
345- return FALSE;
346- case SV_POTION_SLOWNESS:
347- dt = GF_OLD_SLOW;
348- dam = 5;
349- angry = TRUE;
350- break;
351- case SV_POTION_POISON:
352- dt = GF_POIS;
353- dam = 3;
354- angry = TRUE;
355- break;
356- case SV_POTION_BLINDNESS:
357- dt = GF_DARK;
358- angry = TRUE;
359- break;
360- case SV_POTION_BOOZE:
361- dt = GF_OLD_CONF;
362- angry = TRUE;
363- break;
364- case SV_POTION_SLEEP:
365- dt = GF_OLD_SLEEP;
366- angry = TRUE;
367- break;
368- case SV_POTION_RUINATION:
369- case SV_POTION_DETONATIONS:
370- dt = GF_SHARDS;
371- dam = damroll(25, 25);
372- angry = TRUE;
373- break;
374- case SV_POTION_DEATH:
375- dt = GF_DEATH_RAY;
376- dam = k_ptr->level * 10;
377- angry = TRUE;
378- radius = 1;
379- break;
380- case SV_POTION_SPEED:
381- dt = GF_OLD_SPEED;
382- break;
383- case SV_POTION_CURE_LIGHT:
384- dt = GF_OLD_HEAL;
385- dam = damroll(2, 3);
386- break;
387- case SV_POTION_CURE_SERIOUS:
388- dt = GF_OLD_HEAL;
389- dam = damroll(4, 3);
390- break;
391- case SV_POTION_CURE_CRITICAL:
392- case SV_POTION_CURING:
393- dt = GF_OLD_HEAL;
394- dam = damroll(6, 3);
395- break;
396- case SV_POTION_HEALING:
397- dt = GF_OLD_HEAL;
398- dam = damroll(10, 10);
399- break;
400- case SV_POTION_RESTORE_EXP:
401- dt = GF_STAR_HEAL;
402- dam = 0;
403- radius = 1;
404- break;
405- case SV_POTION_LIFE:
406- dt = GF_STAR_HEAL;
407- dam = damroll(50, 50);
408- radius = 1;
409- break;
410- case SV_POTION_STAR_HEALING:
411- dt = GF_OLD_HEAL;
412- dam = damroll(50, 50);
413- radius = 1;
414- break;
415- case SV_POTION_RESTORE_MANA:
416- dt = GF_MANA;
417- dam = damroll(10, 10);
418- radius = 1;
419- break;
420- default:
421- break;
422- }
423-
424- (void)project(owner_ptr, who, radius, y, x, dam, dt, (PROJECT_JUMP | PROJECT_ITEM | PROJECT_KILL));
425- return angry;
281+ int radius = 2;
282+ int dt = 0;
283+ int dam = 0;
284+ bool angry = FALSE;
285+ object_kind *k_ptr = &k_info[k_idx];
286+ switch (k_ptr->sval) {
287+ case SV_POTION_SALT_WATER:
288+ case SV_POTION_SLIME_MOLD:
289+ case SV_POTION_LOSE_MEMORIES:
290+ case SV_POTION_DEC_STR:
291+ case SV_POTION_DEC_INT:
292+ case SV_POTION_DEC_WIS:
293+ case SV_POTION_DEC_DEX:
294+ case SV_POTION_DEC_CON:
295+ case SV_POTION_DEC_CHR:
296+ case SV_POTION_WATER: /* perhaps a 'water' attack? */
297+ case SV_POTION_APPLE_JUICE:
298+ return TRUE;
299+
300+ case SV_POTION_INFRAVISION:
301+ case SV_POTION_DETECT_INVIS:
302+ case SV_POTION_SLOW_POISON:
303+ case SV_POTION_CURE_POISON:
304+ case SV_POTION_BOLDNESS:
305+ case SV_POTION_RESIST_HEAT:
306+ case SV_POTION_RESIST_COLD:
307+ case SV_POTION_HEROISM:
308+ case SV_POTION_BESERK_STRENGTH:
309+ case SV_POTION_RES_STR:
310+ case SV_POTION_RES_INT:
311+ case SV_POTION_RES_WIS:
312+ case SV_POTION_RES_DEX:
313+ case SV_POTION_RES_CON:
314+ case SV_POTION_RES_CHR:
315+ case SV_POTION_INC_STR:
316+ case SV_POTION_INC_INT:
317+ case SV_POTION_INC_WIS:
318+ case SV_POTION_INC_DEX:
319+ case SV_POTION_INC_CON:
320+ case SV_POTION_INC_CHR:
321+ case SV_POTION_AUGMENTATION:
322+ case SV_POTION_ENLIGHTENMENT:
323+ case SV_POTION_STAR_ENLIGHTENMENT:
324+ case SV_POTION_SELF_KNOWLEDGE:
325+ case SV_POTION_EXPERIENCE:
326+ case SV_POTION_RESISTANCE:
327+ case SV_POTION_INVULNERABILITY:
328+ case SV_POTION_NEW_LIFE:
329+ /* All of the above potions have no effect when shattered */
330+ return FALSE;
331+ case SV_POTION_SLOWNESS:
332+ dt = GF_OLD_SLOW;
333+ dam = 5;
334+ angry = TRUE;
335+ break;
336+ case SV_POTION_POISON:
337+ dt = GF_POIS;
338+ dam = 3;
339+ angry = TRUE;
340+ break;
341+ case SV_POTION_BLINDNESS:
342+ dt = GF_DARK;
343+ angry = TRUE;
344+ break;
345+ case SV_POTION_BOOZE:
346+ dt = GF_OLD_CONF;
347+ angry = TRUE;
348+ break;
349+ case SV_POTION_SLEEP:
350+ dt = GF_OLD_SLEEP;
351+ angry = TRUE;
352+ break;
353+ case SV_POTION_RUINATION:
354+ case SV_POTION_DETONATIONS:
355+ dt = GF_SHARDS;
356+ dam = damroll(25, 25);
357+ angry = TRUE;
358+ break;
359+ case SV_POTION_DEATH:
360+ dt = GF_DEATH_RAY;
361+ dam = k_ptr->level * 10;
362+ angry = TRUE;
363+ radius = 1;
364+ break;
365+ case SV_POTION_SPEED:
366+ dt = GF_OLD_SPEED;
367+ break;
368+ case SV_POTION_CURE_LIGHT:
369+ dt = GF_OLD_HEAL;
370+ dam = damroll(2, 3);
371+ break;
372+ case SV_POTION_CURE_SERIOUS:
373+ dt = GF_OLD_HEAL;
374+ dam = damroll(4, 3);
375+ break;
376+ case SV_POTION_CURE_CRITICAL:
377+ case SV_POTION_CURING:
378+ dt = GF_OLD_HEAL;
379+ dam = damroll(6, 3);
380+ break;
381+ case SV_POTION_HEALING:
382+ dt = GF_OLD_HEAL;
383+ dam = damroll(10, 10);
384+ break;
385+ case SV_POTION_RESTORE_EXP:
386+ dt = GF_STAR_HEAL;
387+ dam = 0;
388+ radius = 1;
389+ break;
390+ case SV_POTION_LIFE:
391+ dt = GF_STAR_HEAL;
392+ dam = damroll(50, 50);
393+ radius = 1;
394+ break;
395+ case SV_POTION_STAR_HEALING:
396+ dt = GF_OLD_HEAL;
397+ dam = damroll(50, 50);
398+ radius = 1;
399+ break;
400+ case SV_POTION_RESTORE_MANA:
401+ dt = GF_MANA;
402+ dam = damroll(10, 10);
403+ radius = 1;
404+ break;
405+ case SV_POTION_POLY_SELF:
406+ dt = GF_NEXUS;
407+ dam = damroll(20, 20);
408+ radius = 1;
409+ break;
410+ default:
411+ break;
412+ }
413+
414+ (void)project(owner_ptr, who, radius, y, x, dam, dt, (PROJECT_JUMP | PROJECT_ITEM | PROJECT_KILL));
415+ return angry;
426416 }
427417
428418 /*!
@@ -435,48 +425,53 @@ bool potion_smash_effect(player_type *owner_ptr, MONSTER_IDX who, POSITION y, PO
435425 */
436426 PERCENTAGE breakage_chance(player_type *owner_ptr, object_type *o_ptr, bool has_archer_bonus, SPELL_IDX snipe_type)
437427 {
438- /* Examine the snipe type */
439- if (snipe_type)
440- {
441- if (snipe_type == SP_KILL_WALL) return 100;
442- if (snipe_type == SP_EXPLODE) return 100;
443- if (snipe_type == SP_PIERCE) return 100;
444- if (snipe_type == SP_FINAL) return 100;
445- if (snipe_type == SP_NEEDLE) return 100;
446- if (snipe_type == SP_EVILNESS) return 40;
447- if (snipe_type == SP_HOLYNESS) return 40;
448- }
449-
450- /* Examine the item type */
451- PERCENTAGE archer_bonus = (has_archer_bonus ? (PERCENTAGE)(owner_ptr->lev - 1) / 7 + 4 : 0);
452- switch (o_ptr->tval)
453- {
454- /* Always break */
455- case TV_FLASK:
456- case TV_POTION:
457- case TV_BOTTLE:
458- case TV_FOOD:
459- case TV_JUNK:
460- return 100;
461-
462- /* Often break */
463- case TV_LITE:
464- case TV_SCROLL:
465- case TV_SKELETON:
466- return 50;
467-
468- /* Sometimes break */
469- case TV_WAND:
470- case TV_SPIKE:
471- return 25;
472- case TV_ARROW:
473- return 20 - archer_bonus * 2;
474-
475- /* Rarely break */
476- case TV_SHOT:
477- case TV_BOLT:
478- return 10 - archer_bonus;
479- default:
480- return 10;
481- }
428+ /* Examine the snipe type */
429+ if (snipe_type) {
430+ if (snipe_type == SP_KILL_WALL)
431+ return 100;
432+ if (snipe_type == SP_EXPLODE)
433+ return 100;
434+ if (snipe_type == SP_PIERCE)
435+ return 100;
436+ if (snipe_type == SP_FINAL)
437+ return 100;
438+ if (snipe_type == SP_NEEDLE)
439+ return 100;
440+ if (snipe_type == SP_EVILNESS)
441+ return 40;
442+ if (snipe_type == SP_HOLYNESS)
443+ return 40;
444+ }
445+
446+ /* Examine the item type */
447+ PERCENTAGE archer_bonus = (has_archer_bonus ? (PERCENTAGE)(owner_ptr->lev - 1) / 7 + 4 : 0);
448+ switch (o_ptr->tval) {
449+ /* Always break */
450+ case TV_FLASK:
451+ case TV_POTION:
452+ case TV_BOTTLE:
453+ case TV_FOOD:
454+ case TV_JUNK:
455+ return 100;
456+
457+ /* Often break */
458+ case TV_LITE:
459+ case TV_SCROLL:
460+ case TV_SKELETON:
461+ return 50;
462+
463+ /* Sometimes break */
464+ case TV_WAND:
465+ case TV_SPIKE:
466+ return 25;
467+ case TV_ARROW:
468+ return 20 - archer_bonus * 2;
469+
470+ /* Rarely break */
471+ case TV_SHOT:
472+ case TV_BOLT:
473+ return 10 - archer_bonus;
474+ default:
475+ return 10;
476+ }
482477 }
--- a/src/sv-definition/sv-potion-types.h
+++ b/src/sv-definition/sv-potion-types.h
@@ -56,7 +56,7 @@ enum sv_potion_type {
5656 SV_POTION_INC_DEX = 51,
5757 SV_POTION_INC_CON = 52,
5858 SV_POTION_INC_CHR = 53,
59- /* xxx */
59+ SV_POTION_POLY_SELF = 54,
6060 SV_POTION_AUGMENTATION = 55,
6161 SV_POTION_ENLIGHTENMENT = 56,
6262 SV_POTION_STAR_ENLIGHTENMENT = 57,
Show on old repository browser