OSDN Git Service

[Refactor] #37353 NIKKI_* をDIARY_* に改名 / Changed NIKKI_* to DIARY_*
[hengband/hengband.git] / src / player-status.c
1 #include "angband.h"
2 #include "core.h"
3 #include "util.h"
4
5 #include "bldg.h"
6 #include "quest.h"
7 #include "player-move.h"
8 #include "player-status.h"
9 #include "player-effects.h"
10 #include "player-skill.h"
11 #include "player-race.h"
12 #include "player-class.h"
13 #include "player-personality.h"
14 #include "player-damage.h"
15 #include "floor.h"
16 #include "floor-events.h"
17 #include "feature.h"
18 #include "artifact.h"
19 #include "avatar.h"
20 #include "spells.h"
21 #include "spells-status.h"
22 #include "object.h"
23 #include "object-hook.h"
24 #include "object-ego.h"
25 #include "monster.h"
26 #include "monster-status.h"
27 #include "monsterrace-hook.h"
28 #include "mutation.h"
29 #include "patron.h"
30 #include "realm-hex.h"
31 #include "realm-song.h"
32 #include "cmd-pet.h"
33 #include "cmd-spell.h"
34 #include "dungeon.h"
35 #include "objectkind.h"
36 #include "monsterrace.h"
37 #include "autopick.h"
38 #include "cmd-dump.h"
39 #include "melee.h"
40 #include "world.h"
41 #include "view-mainwindow.h"
42 #include "files.h"
43 #include "cmd-magiceat.h"
44
45 /*!
46  * @brief 能力値テーブル / Abbreviations of healthy stats
47  */
48 const concptr stat_names[6] =
49 {
50 #ifdef JP
51         "腕力 :", "知能 :", "賢さ :", "器用 :", "耐久 :", "魅力 :"
52 #else
53         "STR : ", "INT : ", "WIS : ", "DEX : ", "CON : ", "CHR : "
54 #endif
55
56 };
57
58 /*!
59  * @brief 能力値テーブル(能力低下時) / Abbreviations of damaged stats
60  */
61 const concptr stat_names_reduced[6] =
62 {
63 #ifdef JP
64         "腕力x:", "知能x:", "賢さx:", "器用x:", "耐久x:", "魅力x:"
65 #else
66         "Str : ", "Int : ", "Wis : ", "Dex : ", "Con : ", "Chr : "
67 #endif
68
69 };
70
71 /* ELDRITCH_HORRORによるsanity blast処理に関するメッセージの最大数 / Number of entries in the sanity-blast descriptions */
72 #define MAX_SAN_HORROR 20 /*!< 恐ろしい対象の形容数(正常時) */
73 #define MAX_SAN_FUNNY 22  /*!< 恐ろしい対象の形容数(幻覚時) */
74 #define MAX_SAN_COMMENT 5 /*!< 恐ろしい対象を見たときの絶叫メッセージ数(幻覚時) */
75
76 /*!
77  * @var horror_desc
78  * @brief ELDRITCH HORROR効果時のモンスターの形容メッセージ(通常時)
79  */
80 static concptr horror_desc[MAX_SAN_HORROR] =
81 {
82 #ifdef JP
83         "忌まわしい",
84         "底知れぬ",
85         "ぞっとする",
86         "破滅的な",
87         "冒涜的な",
88
89         "いやな",
90         "恐ろしい",
91         "不潔な",
92         "容赦のない",
93         "おぞましい",
94
95         "地獄の",
96         "身の毛もよだつ",
97         "地獄の",
98         "忌まわしい",
99         "悪夢のような",
100
101         "嫌悪を感じる",
102         "罰当たりな",
103         "恐い",
104         "不浄な",
105         "言うもおぞましい",
106 #else
107         "abominable",
108         "abysmal",
109         "appalling",
110         "baleful",
111         "blasphemous",
112
113         "disgusting",
114         "dreadful",
115         "filthy",
116         "grisly",
117         "hideous",
118
119         "hellish",
120         "horrible",
121         "infernal",
122         "loathsome",
123         "nightmarish",
124
125         "repulsive",
126         "sacrilegious",
127         "terrible",
128         "unclean",
129         "unspeakable",
130 #endif
131
132 };
133
134 /*!
135  * @var funny_desc
136  * @brief ELDRITCH HORROR効果時のモンスターの形容メッセージ(幻覚状態時)
137  */
138 static concptr funny_desc[MAX_SAN_FUNNY] =
139 {
140 #ifdef JP
141         "間抜けな",
142         "滑稽な",
143         "ばからしい",
144         "無味乾燥な",
145         "馬鹿げた",
146
147         "笑える",
148         "ばかばかしい",
149         "ぶっとんだ",
150         "いかした",
151         "ポストモダンな",
152
153         "ファンタスティックな",
154         "ダダイズム的な",
155         "キュビズム的な",
156         "宇宙的な",
157         "卓越した",
158
159         "理解不能な",
160         "ものすごい",
161         "驚くべき",
162         "信じられない",
163         "カオティックな",
164
165         "野性的な",
166         "非常識な",
167 #else
168         "silly",
169         "hilarious",
170         "absurd",
171         "insipid",
172         "ridiculous",
173
174         "laughable",
175         "ludicrous",
176         "far-out",
177         "groovy",
178         "postmodern",
179
180         "fantastic",
181         "dadaistic",
182         "cubistic",
183         "cosmic",
184         "awesome",
185
186         "incomprehensible",
187         "fabulous",
188         "amazing",
189         "incredible",
190         "chaotic",
191
192         "wild",
193         "preposterous",
194 #endif
195
196 };
197
198 /*!
199  * @var funny_comments
200  * @brief ELDRITCH HORROR効果時の幻覚時間延長を示す錯乱表現
201  */
202 static concptr funny_comments[MAX_SAN_COMMENT] =
203 {
204 #ifdef JP
205         /* nuke me */
206           "最高だぜ!",
207           "うひょー!",
208           "いかすぜ!",
209           "すんばらしい!",
210           "ぶっとびー!"
211   #else
212           "Wow, cosmic, man!",
213           "Rad!",
214           "Groovy!",
215           "Cool!",
216           "Far out!"
217   #endif
218
219 };
220
221
222 /*!
223  * @brief 基本必要経験値テーブル /
224  * Base experience levels, may be adjusted up for race and/or class
225  */
226 const s32b player_exp[PY_MAX_LEVEL] =
227 {
228         10,
229         25,
230         45,
231         70,
232         100,
233         140,
234         200,
235         280,
236         380,/*10*/
237         500,
238         650,
239         850,
240         1100,
241         1400,
242         1800,
243         2300,
244         2900,
245         3600,
246         4400,/*20*/
247         5400,
248         6800,
249         8400,
250         10200,
251         12500,
252         17500,
253         25000,
254         35000L,
255         50000L,
256         75000L,/*30*/
257         100000L,
258         150000L,
259         200000L,
260         275000L,
261         350000L,
262         450000L,
263         550000L,
264         700000L,
265         850000L,
266         1000000L,/*40*/
267         1250000L,
268         1500000L,
269         1800000L,
270         2100000L,
271         2400000L,
272         2700000L,
273         3000000L,
274         3500000L,
275         4000000L,
276         4500000L,/*50*/
277         5000000L
278 };
279
280
281 /*!
282  * @brief 基本必要強化値テーブル(アンドロイド専用)
283  */
284 const s32b player_exp_a[PY_MAX_LEVEL] =
285 {
286         20,
287         50,
288         100,
289         170,
290         280,
291         430,
292         650,
293         950,
294         1400,/*10*/
295         1850,
296         2300,
297         2900,
298         3600,
299         4400,
300         5400,
301         6800,
302         8400,
303         10400,
304         12500,/*20*/
305         17500,
306         25000,
307         35000,
308         50000L,
309         75000L,
310         100000L,
311         150000L,
312         200000L,
313         275000L,
314         350000L,/*30*/
315         450000L,
316         550000L,
317         650000L,
318         800000L,
319         950000L,
320         1100000L,
321         1250000L,
322         1400000L,
323         1550000L,
324         1700000L,/*40*/
325         1900000L,
326         2100000L,
327         2300000L,
328         2550000L,
329         2800000L,
330         3050000L,
331         3300000L,
332         3700000L,
333         4100000L,
334         4500000L,/*50*/
335         5000000L
336 };
337
338
339 /*!
340  * 知力/賢さによるレベル毎の習得可能魔法数テーブル
341  * Stat Table (INT/WIS) -- Number of half-spells per level
342  */
343 const byte adj_mag_study[] =
344 {
345         0       /* 3 */,
346         0       /* 4 */,
347         0       /* 5 */,
348         0       /* 6 */,
349         0       /* 7 */,
350         1       /* 8 */,
351         1       /* 9 */,
352         1       /* 10 */,
353         1       /* 11 */,
354         2       /* 12 */,
355         2       /* 13 */,
356         2       /* 14 */,
357         2       /* 15 */,
358         2       /* 16 */,
359         2       /* 17 */,
360         2       /* 18/00-18/09 */,
361         2       /* 18/10-18/19 */,
362         2       /* 18/20-18/29 */,
363         2       /* 18/30-18/39 */,
364         2       /* 18/40-18/49 */,
365         3       /* 18/50-18/59 */,
366         3       /* 18/60-18/69 */,
367         3       /* 18/70-18/79 */,
368         3       /* 18/80-18/89 */,
369         4       /* 18/90-18/99 */,
370         4       /* 18/100-18/109 */,
371         4       /* 18/110-18/119 */,
372         5       /* 18/120-18/129 */,
373         5       /* 18/130-18/139 */,
374         5       /* 18/140-18/149 */,
375         5       /* 18/150-18/159 */,
376         5       /* 18/160-18/169 */,
377         5       /* 18/170-18/179 */,
378         5       /* 18/180-18/189 */,
379         5       /* 18/190-18/199 */,
380         5       /* 18/200-18/209 */,
381         6       /* 18/210-18/219 */,
382         6       /* 18/220+ */
383 };
384
385
386 /*!
387  * 知力/賢さによるMP修正テーブル
388  * Stat Table (INT/WIS) -- extra 1/4-mana-points per level
389  */
390 const byte adj_mag_mana[] =
391 {
392         0       /* 3 */,
393         0       /* 4 */,
394         0       /* 5 */,
395         0       /* 6 */,
396         0       /* 7 */,
397         1       /* 8 */,
398         2       /* 9 */,
399         3       /* 10 */,
400         4       /* 11 */,
401         5       /* 12 */,
402         5       /* 13 */,
403         6       /* 14 */,
404         7       /* 15 */,
405         8       /* 16 */,
406         9       /* 17 */,
407         10      /* 18/00-18/09 */,
408         11      /* 18/10-18/19 */,
409         11      /* 18/20-18/29 */,
410         12      /* 18/30-18/39 */,
411         12      /* 18/40-18/49 */,
412         13      /* 18/50-18/59 */,
413         14      /* 18/60-18/69 */,
414         15      /* 18/70-18/79 */,
415         16      /* 18/80-18/89 */,
416         17      /* 18/90-18/99 */,
417         18      /* 18/100-18/109 */,
418         19      /* 18/110-18/119 */,
419         20      /* 18/120-18/129 */,
420         21      /* 18/130-18/139 */,
421         22      /* 18/140-18/149 */,
422         23      /* 18/150-18/159 */,
423         24      /* 18/160-18/169 */,
424         25      /* 18/170-18/179 */,
425         26      /* 18/180-18/189 */,
426         27      /* 18/190-18/199 */,
427         28      /* 18/200-18/209 */,
428         29      /* 18/210-18/219 */,
429         30      /* 18/220+ */
430 };
431
432
433 /*!
434  * 知力/賢さによる最低魔法失敗率テーブル
435  * Stat Table (INT/WIS) -- Minimum failure rate (percentage)
436  */
437 const byte adj_mag_fail[] =
438 {
439         99      /* 3 */,
440         99      /* 4 */,
441         99      /* 5 */,
442         99      /* 6 */,
443         99      /* 7 */,
444         50      /* 8 */,
445         30      /* 9 */,
446         20      /* 10 */,
447         15      /* 11 */,
448         12      /* 12 */,
449         11      /* 13 */,
450         10      /* 14 */,
451         9       /* 15 */,
452         8       /* 16 */,
453         7       /* 17 */,
454         6       /* 18/00-18/09 */,
455         6       /* 18/10-18/19 */,
456         5       /* 18/20-18/29 */,
457         5       /* 18/30-18/39 */,
458         5       /* 18/40-18/49 */,
459         4       /* 18/50-18/59 */,
460         4       /* 18/60-18/69 */,
461         4       /* 18/70-18/79 */,
462         4       /* 18/80-18/89 */,
463         3       /* 18/90-18/99 */,
464         3       /* 18/100-18/109 */,
465         2       /* 18/110-18/119 */,
466         2       /* 18/120-18/129 */,
467         2       /* 18/130-18/139 */,
468         2       /* 18/140-18/149 */,
469         1       /* 18/150-18/159 */,
470         1       /* 18/160-18/169 */,
471         1       /* 18/170-18/179 */,
472         1       /* 18/180-18/189 */,
473         1       /* 18/190-18/199 */,
474         0       /* 18/200-18/209 */,
475         0       /* 18/210-18/219 */,
476         0       /* 18/220+ */
477 };
478
479
480 /*!
481  * 知力/賢さによる魔法失敗率修正テーブル
482  * Stat Table (INT/WIS) -- Various things
483  */
484 const byte adj_mag_stat[] =
485 {
486         0       /* 3 */,
487         0       /* 4 */,
488         0       /* 5 */,
489         0       /* 6 */,
490         0       /* 7 */,
491         1       /* 8 */,
492         1       /* 9 */,
493         1       /* 10 */,
494         1       /* 11 */,
495         1       /* 12 */,
496         1       /* 13 */,
497         1       /* 14 */,
498         2       /* 15 */,
499         2       /* 16 */,
500         2       /* 17 */,
501         3       /* 18/00-18/09 */,
502         3       /* 18/10-18/19 */,
503         3       /* 18/20-18/29 */,
504         3       /* 18/30-18/39 */,
505         3       /* 18/40-18/49 */,
506         4       /* 18/50-18/59 */,
507         4       /* 18/60-18/69 */,
508         5       /* 18/70-18/79 */,
509         6       /* 18/80-18/89 */,
510         7       /* 18/90-18/99 */,
511         8       /* 18/100-18/109 */,
512         9       /* 18/110-18/119 */,
513         10      /* 18/120-18/129 */,
514         11      /* 18/130-18/139 */,
515         12      /* 18/140-18/149 */,
516         13      /* 18/150-18/159 */,
517         14      /* 18/160-18/169 */,
518         15      /* 18/170-18/179 */,
519         16      /* 18/180-18/189 */,
520         17      /* 18/190-18/199 */,
521         18      /* 18/200-18/209 */,
522         19      /* 18/210-18/219 */,
523         20      /* 18/220+ */
524 };
525
526
527 /*!
528  * 魅力による店での取引修正テーブル
529  * Stat Table (CHR) -- payment percentages
530  */
531 const byte adj_chr_gold[] =
532 {
533         130     /* 3 */,
534         125     /* 4 */,
535         122     /* 5 */,
536         120     /* 6 */,
537         118     /* 7 */,
538         116     /* 8 */,
539         114     /* 9 */,
540         112     /* 10 */,
541         110     /* 11 */,
542         108     /* 12 */,
543         106     /* 13 */,
544         104     /* 14 */,
545         103     /* 15 */,
546         102     /* 16 */,
547         101     /* 17 */,
548         100     /* 18/00-18/09 */,
549         99      /* 18/10-18/19 */,
550         98      /* 18/20-18/29 */,
551         97      /* 18/30-18/39 */,
552         96      /* 18/40-18/49 */,
553         95      /* 18/50-18/59 */,
554         94      /* 18/60-18/69 */,
555         93      /* 18/70-18/79 */,
556         92      /* 18/80-18/89 */,
557         91      /* 18/90-18/99 */,
558         90      /* 18/100-18/109 */,
559         89      /* 18/110-18/119 */,
560         88      /* 18/120-18/129 */,
561         87      /* 18/130-18/139 */,
562         86      /* 18/140-18/149 */,
563         85      /* 18/150-18/159 */,
564         84      /* 18/160-18/169 */,
565         83      /* 18/170-18/179 */,
566         82      /* 18/180-18/189 */,
567         81      /* 18/190-18/199 */,
568         80      /* 18/200-18/209 */,
569         79      /* 18/210-18/219 */,
570         78      /* 18/220+ */
571 };
572
573
574 /*!
575  * 知力による魔道具使用修正テーブル
576  * Stat Table (INT) -- Magic devices
577  */
578 const byte adj_int_dev[] =
579 {
580         0       /* 3 */,
581         0       /* 4 */,
582         0       /* 5 */,
583         0       /* 6 */,
584         0       /* 7 */,
585         1       /* 8 */,
586         1       /* 9 */,
587         1       /* 10 */,
588         1       /* 11 */,
589         1       /* 12 */,
590         1       /* 13 */,
591         1       /* 14 */,
592         2       /* 15 */,
593         2       /* 16 */,
594         2       /* 17 */,
595         3       /* 18/00-18/09 */,
596         3       /* 18/10-18/19 */,
597         4       /* 18/20-18/29 */,
598         4       /* 18/30-18/39 */,
599         5       /* 18/40-18/49 */,
600         5       /* 18/50-18/59 */,
601         6       /* 18/60-18/69 */,
602         6       /* 18/70-18/79 */,
603         7       /* 18/80-18/89 */,
604         7       /* 18/90-18/99 */,
605         8       /* 18/100-18/109 */,
606         9       /* 18/110-18/119 */,
607         10      /* 18/120-18/129 */,
608         11      /* 18/130-18/139 */,
609         12      /* 18/140-18/149 */,
610         13      /* 18/150-18/159 */,
611         14      /* 18/160-18/169 */,
612         15      /* 18/170-18/179 */,
613         16      /* 18/180-18/189 */,
614         17      /* 18/190-18/199 */,
615         18      /* 18/200-18/209 */,
616         19      /* 18/210-18/219 */,
617         20      /* 18/220+ */
618 };
619
620
621 /*!
622  * 賢さによる魔法防御修正テーブル
623  * Stat Table (WIS) -- Saving throw
624  */
625 const byte adj_wis_sav[] =
626 {
627         0       /* 3 */,
628         0       /* 4 */,
629         0       /* 5 */,
630         0       /* 6 */,
631         0       /* 7 */,
632         1       /* 8 */,
633         1       /* 9 */,
634         1       /* 10 */,
635         1       /* 11 */,
636         1       /* 12 */,
637         1       /* 13 */,
638         1       /* 14 */,
639         2       /* 15 */,
640         2       /* 16 */,
641         2       /* 17 */,
642         3       /* 18/00-18/09 */,
643         3       /* 18/10-18/19 */,
644         3       /* 18/20-18/29 */,
645         3       /* 18/30-18/39 */,
646         3       /* 18/40-18/49 */,
647         4       /* 18/50-18/59 */,
648         4       /* 18/60-18/69 */,
649         5       /* 18/70-18/79 */,
650         5       /* 18/80-18/89 */,
651         6       /* 18/90-18/99 */,
652         7       /* 18/100-18/109 */,
653         8       /* 18/110-18/119 */,
654         9       /* 18/120-18/129 */,
655         10      /* 18/130-18/139 */,
656         11      /* 18/140-18/149 */,
657         12      /* 18/150-18/159 */,
658         13      /* 18/160-18/169 */,
659         14      /* 18/170-18/179 */,
660         15      /* 18/180-18/189 */,
661         16      /* 18/190-18/199 */,
662         17      /* 18/200-18/209 */,
663         18      /* 18/210-18/219 */,
664         19      /* 18/220+ */
665 };
666
667
668 /*!
669  * 器用さによるトラップ解除修正テーブル
670  * Stat Table (DEX) -- disarming
671  */
672 const byte adj_dex_dis[] =
673 {
674         0       /* 3 */,
675         0       /* 4 */,
676         0       /* 5 */,
677         0       /* 6 */,
678         0       /* 7 */,
679         0       /* 8 */,
680         0       /* 9 */,
681         0       /* 10 */,
682         0       /* 11 */,
683         0       /* 12 */,
684         1       /* 13 */,
685         1       /* 14 */,
686         1       /* 15 */,
687         2       /* 16 */,
688         2       /* 17 */,
689         4       /* 18/00-18/09 */,
690         4       /* 18/10-18/19 */,
691         4       /* 18/20-18/29 */,
692         4       /* 18/30-18/39 */,
693         5       /* 18/40-18/49 */,
694         5       /* 18/50-18/59 */,
695         5       /* 18/60-18/69 */,
696         6       /* 18/70-18/79 */,
697         6       /* 18/80-18/89 */,
698         7       /* 18/90-18/99 */,
699         8       /* 18/100-18/109 */,
700         8       /* 18/110-18/119 */,
701         8       /* 18/120-18/129 */,
702         8       /* 18/130-18/139 */,
703         8       /* 18/140-18/149 */,
704         9       /* 18/150-18/159 */,
705         9       /* 18/160-18/169 */,
706         9       /* 18/170-18/179 */,
707         9       /* 18/180-18/189 */,
708         9       /* 18/190-18/199 */,
709         10      /* 18/200-18/209 */,
710         10      /* 18/210-18/219 */,
711         10      /* 18/220+ */
712 };
713
714
715 /*!
716  * 知力によるトラップ解除修正テーブル
717  * Stat Table (INT) -- disarming
718  */
719 const byte adj_int_dis[] =
720 {
721         0       /* 3 */,
722         0       /* 4 */,
723         0       /* 5 */,
724         0       /* 6 */,
725         0       /* 7 */,
726         1       /* 8 */,
727         1       /* 9 */,
728         1       /* 10 */,
729         1       /* 11 */,
730         1       /* 12 */,
731         1       /* 13 */,
732         1       /* 14 */,
733         2       /* 15 */,
734         2       /* 16 */,
735         2       /* 17 */,
736         3       /* 18/00-18/09 */,
737         3       /* 18/10-18/19 */,
738         3       /* 18/20-18/29 */,
739         4       /* 18/30-18/39 */,
740         4       /* 18/40-18/49 */,
741         5       /* 18/50-18/59 */,
742         6       /* 18/60-18/69 */,
743         7       /* 18/70-18/79 */,
744         8       /* 18/80-18/89 */,
745         9       /* 18/90-18/99 */,
746         10      /* 18/100-18/109 */,
747         10      /* 18/110-18/119 */,
748         11      /* 18/120-18/129 */,
749         12      /* 18/130-18/139 */,
750         13      /* 18/140-18/149 */,
751         14      /* 18/150-18/159 */,
752         15      /* 18/160-18/169 */,
753         16      /* 18/170-18/179 */,
754         17      /* 18/180-18/189 */,
755         18      /* 18/190-18/199 */,
756         19      /* 18/200-18/209 */,
757         19      /* 18/210-18/219 */,
758         20      /* 18/220+ */
759 };
760
761
762 /*!
763  * 器用さによるAC修正テーブル
764  * Stat Table (DEX) -- bonus to ac (plus 128)
765  */
766 const byte adj_dex_ta[] =
767 {
768         128 + -4    /*  3 */,
769         128 + -3    /*  4 */,
770         128 + -2    /*  5 */,
771         128 + -1    /*  6 */,
772         128 + 0     /*  7 */,
773         128 + 0     /*  8 */,
774         128 + 0     /*  9 */,
775         128 + 0     /* 10 */,
776         128 + 0     /* 11 */,
777         128 + 0     /* 12 */,
778         128 + 0     /* 13 */,
779         128 + 0     /* 14 */,
780         128 + 1     /* 15 */,
781         128 + 1     /* 16 */,
782         128 + 1     /* 17 */,
783         128 + 2     /* 18/00-18/09 */,
784         128 + 2     /* 18/10-18/19 */,
785         128 + 2     /* 18/20-18/29 */,
786         128 + 2     /* 18/30-18/39 */,
787         128 + 2     /* 18/40-18/49 */,
788         128 + 3     /* 18/50-18/59 */,
789         128 + 3     /* 18/60-18/69 */,
790         128 + 3     /* 18/70-18/79 */,
791         128 + 4     /* 18/80-18/89 */,
792         128 + 5     /* 18/90-18/99 */,
793         128 + 6     /* 18/100-18/109 */,
794         128 + 7     /* 18/110-18/119 */,
795         128 + 8     /* 18/120-18/129 */,
796         128 + 9     /* 18/130-18/139 */,
797         128 + 9     /* 18/140-18/149 */,
798         128 + 10    /* 18/150-18/159 */,
799         128 + 11    /* 18/160-18/169 */,
800         128 + 12    /* 18/170-18/179 */,
801         128 + 13    /* 18/180-18/189 */,
802         128 + 14    /* 18/190-18/199 */,
803         128 + 15    /* 18/200-18/209 */,
804         128 + 15    /* 18/210-18/219 */,
805         128 + 16    /* 18/220+ */
806 };
807
808
809 /*!
810  * 腕力によるダメージ修正テーブル
811  * Stat Table (STR) -- bonus to dam (plus 128)
812  */
813 const byte adj_str_td[] =
814 {
815         128 + -2    /*  3 */,
816         128 + -2    /*  4 */,
817         128 + -1    /*  5 */,
818         128 + -1    /*  6 */,
819         128 + 0     /*  7 */,
820         128 + 0     /*  8 */,
821         128 + 0     /*  9 */,
822         128 + 0     /* 10 */,
823         128 + 0     /* 11 */,
824         128 + 0     /* 12 */,
825         128 + 0     /* 13 */,
826         128 + 0     /* 14 */,
827         128 + 0     /* 15 */,
828         128 + 1     /* 16 */,
829         128 + 2     /* 17 */,
830         128 + 2     /* 18/00-18/09 */,
831         128 + 2     /* 18/10-18/19 */,
832         128 + 3     /* 18/20-18/29 */,
833         128 + 3     /* 18/30-18/39 */,
834         128 + 3     /* 18/40-18/49 */,
835         128 + 3     /* 18/50-18/59 */,
836         128 + 3     /* 18/60-18/69 */,
837         128 + 4     /* 18/70-18/79 */,
838         128 + 5     /* 18/80-18/89 */,
839         128 + 5     /* 18/90-18/99 */,
840         128 + 6     /* 18/100-18/109 */,
841         128 + 7     /* 18/110-18/119 */,
842         128 + 8     /* 18/120-18/129 */,
843         128 + 9     /* 18/130-18/139 */,
844         128 + 10    /* 18/140-18/149 */,
845         128 + 11    /* 18/150-18/159 */,
846         128 + 12    /* 18/160-18/169 */,
847         128 + 13    /* 18/170-18/179 */,
848         128 + 14    /* 18/180-18/189 */,
849         128 + 15    /* 18/190-18/199 */,
850         128 + 16    /* 18/200-18/209 */,
851         128 + 18    /* 18/210-18/219 */,
852         128 + 20    /* 18/220+ */
853 };
854
855
856 /*!
857  * 器用度による命中修正テーブル
858  * Stat Table (DEX) -- bonus to hit (plus 128)
859  */
860 const byte adj_dex_th[] =
861 {
862         128 + -3        /* 3 */,
863         128 + -2        /* 4 */,
864         128 + -2        /* 5 */,
865         128 + -1        /* 6 */,
866         128 + -1        /* 7 */,
867         128 + 0 /* 8 */,
868         128 + 0 /* 9 */,
869         128 + 0 /* 10 */,
870         128 + 0 /* 11 */,
871         128 + 0 /* 12 */,
872         128 + 0 /* 13 */,
873         128 + 0 /* 14 */,
874         128 + 0 /* 15 */,
875         128 + 1 /* 16 */,
876         128 + 2 /* 17 */,
877         128 + 3 /* 18/00-18/09 */,
878         128 + 3 /* 18/10-18/19 */,
879         128 + 3 /* 18/20-18/29 */,
880         128 + 3 /* 18/30-18/39 */,
881         128 + 3 /* 18/40-18/49 */,
882         128 + 4 /* 18/50-18/59 */,
883         128 + 4 /* 18/60-18/69 */,
884         128 + 4 /* 18/70-18/79 */,
885         128 + 4 /* 18/80-18/89 */,
886         128 + 5 /* 18/90-18/99 */,
887         128 + 6 /* 18/100-18/109 */,
888         128 + 7 /* 18/110-18/119 */,
889         128 + 8 /* 18/120-18/129 */,
890         128 + 9 /* 18/130-18/139 */,
891         128 + 9 /* 18/140-18/149 */,
892         128 + 10        /* 18/150-18/159 */,
893         128 + 11        /* 18/160-18/169 */,
894         128 + 12        /* 18/170-18/179 */,
895         128 + 13        /* 18/180-18/189 */,
896         128 + 14        /* 18/190-18/199 */,
897         128 + 15        /* 18/200-18/209 */,
898         128 + 15        /* 18/210-18/219 */,
899         128 + 16        /* 18/220+ */
900 };
901
902
903 /*!
904  * 腕力による命中修正テーブル
905  * Stat Table (STR) -- bonus to hit (plus 128)
906  */
907 const byte adj_str_th[] =
908 {
909         128 + -3        /* 3 */,
910         128 + -2        /* 4 */,
911         128 + -1        /* 5 */,
912         128 + -1        /* 6 */,
913         128 + 0 /* 7 */,
914         128 + 0 /* 8 */,
915         128 + 0 /* 9 */,
916         128 + 0 /* 10 */,
917         128 + 0 /* 11 */,
918         128 + 0 /* 12 */,
919         128 + 0 /* 13 */,
920         128 + 0 /* 14 */,
921         128 + 0 /* 15 */,
922         128 + 0 /* 16 */,
923         128 + 0 /* 17 */,
924         128 + 1 /* 18/00-18/09 */,
925         128 + 1 /* 18/10-18/19 */,
926         128 + 1 /* 18/20-18/29 */,
927         128 + 1 /* 18/30-18/39 */,
928         128 + 1 /* 18/40-18/49 */,
929         128 + 1 /* 18/50-18/59 */,
930         128 + 1 /* 18/60-18/69 */,
931         128 + 2 /* 18/70-18/79 */,
932         128 + 3 /* 18/80-18/89 */,
933         128 + 4 /* 18/90-18/99 */,
934         128 + 5 /* 18/100-18/109 */,
935         128 + 6 /* 18/110-18/119 */,
936         128 + 7 /* 18/120-18/129 */,
937         128 + 8 /* 18/130-18/139 */,
938         128 + 9 /* 18/140-18/149 */,
939         128 + 10        /* 18/150-18/159 */,
940         128 + 11        /* 18/160-18/169 */,
941         128 + 12        /* 18/170-18/179 */,
942         128 + 13        /* 18/180-18/189 */,
943         128 + 14        /* 18/190-18/199 */,
944         128 + 15        /* 18/200-18/209 */,
945         128 + 15        /* 18/210-18/219 */,
946         128 + 16        /* 18/220+ */
947 };
948
949
950 /*!
951  * 腕力による基本所持重量値テーブル
952  * Stat Table (STR) -- weight limit in deca-pounds
953  */
954 const byte adj_str_wgt[] =
955 {
956         10      /* 3 */,
957         11      /* 4 */,
958         12      /* 5 */,
959         13      /* 6 */,
960         14      /* 7 */,
961         15      /* 8 */,
962         16      /* 9 */,
963         17      /* 10 */,
964         18      /* 11 */,
965         19      /* 12 */,
966         20      /* 13 */,
967         21      /* 14 */,
968         22      /* 15 */,
969         23      /* 16 */,
970         24      /* 17 */,
971         25      /* 18/00-18/09 */,
972         26      /* 18/10-18/19 */,
973         27      /* 18/20-18/29 */,
974         28      /* 18/30-18/39 */,
975         29      /* 18/40-18/49 */,
976         30      /* 18/50-18/59 */,
977         31      /* 18/60-18/69 */,
978         31      /* 18/70-18/79 */,
979         32      /* 18/80-18/89 */,
980         32      /* 18/90-18/99 */,
981         33      /* 18/100-18/109 */,
982         33      /* 18/110-18/119 */,
983         34      /* 18/120-18/129 */,
984         34      /* 18/130-18/139 */,
985         35      /* 18/140-18/149 */,
986         35      /* 18/150-18/159 */,
987         36      /* 18/160-18/169 */,
988         36      /* 18/170-18/179 */,
989         37      /* 18/180-18/189 */,
990         37      /* 18/190-18/199 */,
991         38      /* 18/200-18/209 */,
992         38      /* 18/210-18/219 */,
993         39      /* 18/220+ */
994 };
995
996
997 /*!
998  * 腕力による武器重量限界値テーブル
999  * Stat Table (STR) -- weapon weight limit in pounds
1000  */
1001 const byte adj_str_hold[] =
1002 {
1003         4       /* 3 */,
1004         5       /* 4 */,
1005         6       /* 5 */,
1006         7       /* 6 */,
1007         8       /* 7 */,
1008         9       /* 8 */,
1009         10      /* 9 */,
1010         11      /* 10 */,
1011         12      /* 11 */,
1012         13      /* 12 */,
1013         14      /* 13 */,
1014         15      /* 14 */,
1015         16      /* 15 */,
1016         17      /* 16 */,
1017         18      /* 17 */,
1018         19      /* 18/00-18/09 */,
1019         20      /* 18/10-18/19 */,
1020         21      /* 18/20-18/29 */,
1021         22      /* 18/30-18/39 */,
1022         23      /* 18/40-18/49 */,
1023         24      /* 18/50-18/59 */,
1024         25      /* 18/60-18/69 */,
1025         26      /* 18/70-18/79 */,
1026         27      /* 18/80-18/89 */,
1027         28      /* 18/90-18/99 */,
1028         30      /* 18/100-18/109 */,
1029         31      /* 18/110-18/119 */,
1030         32      /* 18/120-18/129 */,
1031         33      /* 18/130-18/139 */,
1032         34      /* 18/140-18/149 */,
1033         35      /* 18/150-18/159 */,
1034         37      /* 18/160-18/169 */,
1035         40      /* 18/170-18/179 */,
1036         44      /* 18/180-18/189 */,
1037         48      /* 18/190-18/199 */,
1038         50     /* 18/200-18/209 */,
1039         50     /* 18/210-18/219 */,
1040         50     /* 18/220+ */
1041 };
1042
1043
1044 /*!
1045  * 腕力による採掘能力修正値テーブル
1046  * Stat Table (STR) -- digging value
1047  */
1048 const byte adj_str_dig[] =
1049 {
1050         0       /* 3 */,
1051         0       /* 4 */,
1052         1       /* 5 */,
1053         2       /* 6 */,
1054         3       /* 7 */,
1055         4       /* 8 */,
1056         4       /* 9 */,
1057         5       /* 10 */,
1058         5       /* 11 */,
1059         6       /* 12 */,
1060         6       /* 13 */,
1061         7       /* 14 */,
1062         7       /* 15 */,
1063         8       /* 16 */,
1064         8       /* 17 */,
1065         9       /* 18/00-18/09 */,
1066         10      /* 18/10-18/19 */,
1067         12      /* 18/20-18/29 */,
1068         15      /* 18/30-18/39 */,
1069         20      /* 18/40-18/49 */,
1070         25      /* 18/50-18/59 */,
1071         30      /* 18/60-18/69 */,
1072         35      /* 18/70-18/79 */,
1073         40      /* 18/80-18/89 */,
1074         45      /* 18/90-18/99 */,
1075         50      /* 18/100-18/109 */,
1076         55      /* 18/110-18/119 */,
1077         60      /* 18/120-18/129 */,
1078         65      /* 18/130-18/139 */,
1079         70      /* 18/140-18/149 */,
1080         75      /* 18/150-18/159 */,
1081         80      /* 18/160-18/169 */,
1082         85      /* 18/170-18/179 */,
1083         90      /* 18/180-18/189 */,
1084         95      /* 18/190-18/199 */,
1085         100     /* 18/200-18/209 */,
1086         100     /* 18/210-18/219 */,
1087         100     /* 18/220+ */
1088 };
1089
1090 /*!
1091  * 器用さによる盗難防止&体当たり成功判定修正テーブル
1092  * Stat Table (DEX) -- chance of avoiding "theft" and "falling"
1093  */
1094 const byte adj_dex_safe[] =
1095 {
1096         0       /* 3 */,
1097         1       /* 4 */,
1098         2       /* 5 */,
1099         3       /* 6 */,
1100         4       /* 7 */,
1101         5       /* 8 */,
1102         5       /* 9 */,
1103         6       /* 10 */,
1104         6       /* 11 */,
1105         7       /* 12 */,
1106         7       /* 13 */,
1107         8       /* 14 */,
1108         8       /* 15 */,
1109         9       /* 16 */,
1110         9       /* 17 */,
1111         10      /* 18/00-18/09 */,
1112         10      /* 18/10-18/19 */,
1113         15      /* 18/20-18/29 */,
1114         15      /* 18/30-18/39 */,
1115         20      /* 18/40-18/49 */,
1116         25      /* 18/50-18/59 */,
1117         30      /* 18/60-18/69 */,
1118         35      /* 18/70-18/79 */,
1119         40      /* 18/80-18/89 */,
1120         45      /* 18/90-18/99 */,
1121         50      /* 18/100-18/109 */,
1122         60      /* 18/110-18/119 */,
1123         70      /* 18/120-18/129 */,
1124         80      /* 18/130-18/139 */,
1125         90      /* 18/140-18/149 */,
1126         100     /* 18/150-18/159 */,
1127         100     /* 18/160-18/169 */,
1128         100     /* 18/170-18/179 */,
1129         100     /* 18/180-18/189 */,
1130         100     /* 18/190-18/199 */,
1131         100     /* 18/200-18/209 */,
1132         100     /* 18/210-18/219 */,
1133         100     /* 18/220+ */
1134 };
1135
1136
1137 /*!
1138  * 耐久による基本HP自然治癒値テーブル /
1139  * Stat Table (CON) -- base regeneration rate
1140  */
1141 const byte adj_con_fix[] =
1142 {
1143         0       /* 3 */,
1144         0       /* 4 */,
1145         0       /* 5 */,
1146         0       /* 6 */,
1147         0       /* 7 */,
1148         0       /* 8 */,
1149         0       /* 9 */,
1150         0       /* 10 */,
1151         0       /* 11 */,
1152         0       /* 12 */,
1153         0       /* 13 */,
1154         1       /* 14 */,
1155         1       /* 15 */,
1156         1       /* 16 */,
1157         1       /* 17 */,
1158         2       /* 18/00-18/09 */,
1159         2       /* 18/10-18/19 */,
1160         2       /* 18/20-18/29 */,
1161         2       /* 18/30-18/39 */,
1162         2       /* 18/40-18/49 */,
1163         3       /* 18/50-18/59 */,
1164         3       /* 18/60-18/69 */,
1165         3       /* 18/70-18/79 */,
1166         3       /* 18/80-18/89 */,
1167         3       /* 18/90-18/99 */,
1168         4       /* 18/100-18/109 */,
1169         4       /* 18/110-18/119 */,
1170         5       /* 18/120-18/129 */,
1171         6       /* 18/130-18/139 */,
1172         6       /* 18/140-18/149 */,
1173         7       /* 18/150-18/159 */,
1174         7       /* 18/160-18/169 */,
1175         8       /* 18/170-18/179 */,
1176         8       /* 18/180-18/189 */,
1177         8       /* 18/190-18/199 */,
1178         9       /* 18/200-18/209 */,
1179         9       /* 18/210-18/219 */,
1180         9       /* 18/220+ */
1181 };
1182
1183
1184 /*!
1185  * 耐久による基本HP自然治癒値テーブル /
1186  * Stat Table (CON) -- extra 1/4-hitpoints per level (plus 128)
1187  */
1188 const byte adj_con_mhp[] =
1189 {
1190         128 + -8        /* 3 */,
1191         128 + -6        /* 4 */,
1192         128 + -4        /* 5 */,
1193         128 + -2        /* 6 */,
1194         128 + -1 /* 7 */,
1195         128 + 0 /* 8 */,
1196         128 + 0 /* 9 */,
1197         128 + 0 /* 10 */,
1198         128 + 0 /* 11 */,
1199         128 + 0 /* 12 */,
1200         128 + 0 /* 13 */,
1201         128 + 1 /* 14 */,
1202         128 + 1 /* 15 */,
1203         128 + 2 /* 16 */,
1204         128 + 3 /* 17 */,
1205         128 + 4 /* 18/00-18/09 */,
1206         128 + 5 /* 18/10-18/19 */,
1207         128 + 6 /* 18/20-18/29 */,
1208         128 + 7 /* 18/30-18/39 */,
1209         128 + 8 /* 18/40-18/49 */,
1210         128 + 9 /* 18/50-18/59 */,
1211         128 + 10  /* 18/60-18/69 */,
1212         128 + 11 /* 18/70-18/79 */,
1213         128 + 12 /* 18/80-18/89 */,
1214         128 + 14 /* 18/90-18/99 */,
1215         128 + 17         /* 18/100-18/109 */,
1216         128 + 20        /* 18/110-18/119 */,
1217         128 + 23        /* 18/120-18/129 */,
1218         128 + 26        /* 18/130-18/139 */,
1219         128 + 29        /* 18/140-18/149 */,
1220         128 + 32        /* 18/150-18/159 */,
1221         128 + 35        /* 18/160-18/169 */,
1222         128 + 38        /* 18/170-18/179 */,
1223         128 + 40        /* 18/180-18/189 */,
1224         128 + 42        /* 18/190-18/199 */,
1225         128 + 44        /* 18/200-18/209 */,
1226         128 + 46        /* 18/210-18/219 */,
1227         128 + 48        /* 18/220+ */
1228 };
1229
1230
1231 /*!
1232  * 魅力による魅了能力修正テーブル /
1233  * Stat Table (CHR) -- charm
1234  */
1235 const byte adj_chr_chm[] =
1236 {
1237         0       /* 3 */,
1238         0       /* 4 */,
1239         1       /* 5 */,
1240         2       /* 6 */,
1241         3       /* 7 */,
1242         4       /* 8 */,
1243         4       /* 9 */,
1244         5       /* 10 */,
1245         5       /* 11 */,
1246         6       /* 12 */,
1247         6       /* 13 */,
1248         7       /* 14 */,
1249         7       /* 15 */,
1250         8       /* 16 */,
1251         8       /* 17 */,
1252         9       /* 18/00-18/09 */,
1253         10      /* 18/10-18/19 */,
1254         12      /* 18/20-18/29 */,
1255         15      /* 18/30-18/39 */,
1256         18      /* 18/40-18/49 */,
1257         21      /* 18/50-18/59 */,
1258         24      /* 18/60-18/69 */,
1259         28      /* 18/70-18/79 */,
1260         32      /* 18/80-18/89 */,
1261         36      /* 18/90-18/99 */,
1262         39      /* 18/100-18/109 */,
1263         42      /* 18/110-18/119 */,
1264         45      /* 18/120-18/129 */,
1265         49      /* 18/130-18/139 */,
1266         53      /* 18/140-18/149 */,
1267         57      /* 18/150-18/159 */,
1268         61      /* 18/160-18/169 */,
1269         65      /* 18/170-18/179 */,
1270         69      /* 18/180-18/189 */,
1271         73      /* 18/190-18/199 */,
1272         77      /* 18/200-18/209 */,
1273         81      /* 18/210-18/219 */,
1274         85      /* 18/220+ */
1275 };
1276
1277
1278 /*** Player information ***/
1279
1280 /*
1281  * Static player info record
1282  */
1283 player_type p_body;
1284
1285 /*
1286  * Pointer to the player info
1287  */
1288 player_type *p_ptr = &p_body;
1289
1290 /*
1291  * Return alignment title
1292  */
1293 concptr your_alignment(player_type *creature_ptr)
1294 {
1295         if (creature_ptr->align > 150) return _("大善", "Lawful");
1296         else if (creature_ptr->align > 50) return _("中善", "Good");
1297         else if (creature_ptr->align > 10) return _("小善", "Neutral Good");
1298         else if (creature_ptr->align > -11) return _("中立", "Neutral");
1299         else if (creature_ptr->align > -51) return _("小悪", "Neutral Evil");
1300         else if (creature_ptr->align > -151) return _("中悪", "Evil");
1301         else return _("大悪", "Chaotic");
1302 }
1303
1304
1305 /*
1306  * Return proficiency level of weapons and misc. skills (except riding)
1307  */
1308 int weapon_exp_level(int weapon_exp)
1309 {
1310         if (weapon_exp < WEAPON_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED;
1311         else if (weapon_exp < WEAPON_EXP_SKILLED) return EXP_LEVEL_BEGINNER;
1312         else if (weapon_exp < WEAPON_EXP_EXPERT) return EXP_LEVEL_SKILLED;
1313         else if (weapon_exp < WEAPON_EXP_MASTER) return EXP_LEVEL_EXPERT;
1314         else return EXP_LEVEL_MASTER;
1315 }
1316
1317
1318 /*
1319  * Return proficiency level of riding
1320  */
1321 int riding_exp_level(int riding_exp)
1322 {
1323         if (riding_exp < RIDING_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED;
1324         else if (riding_exp < RIDING_EXP_SKILLED) return EXP_LEVEL_BEGINNER;
1325         else if (riding_exp < RIDING_EXP_EXPERT) return EXP_LEVEL_SKILLED;
1326         else if (riding_exp < RIDING_EXP_MASTER) return EXP_LEVEL_EXPERT;
1327         else return EXP_LEVEL_MASTER;
1328 }
1329
1330
1331 /*
1332  * Return proficiency level of spells
1333  */
1334 int spell_exp_level(int spell_exp)
1335 {
1336         if (spell_exp < SPELL_EXP_BEGINNER) return EXP_LEVEL_UNSKILLED;
1337         else if (spell_exp < SPELL_EXP_SKILLED) return EXP_LEVEL_BEGINNER;
1338         else if (spell_exp < SPELL_EXP_EXPERT) return EXP_LEVEL_SKILLED;
1339         else if (spell_exp < SPELL_EXP_MASTER) return EXP_LEVEL_EXPERT;
1340         else return EXP_LEVEL_MASTER;
1341 }
1342
1343
1344 /*!
1345  * @brief プレイヤーの全ステータスを更新する /
1346  * Calculate the players current "state", taking into account
1347  * not only race/class intrinsics, but also objects being worn
1348  * and temporary spell effects.
1349  * @return なし
1350  * @details
1351  * <pre>
1352  * See also calc_mana() and calc_hitpoints().
1353  *
1354  * Take note of the new "speed code", in particular, a very strong
1355  * player will start slowing down as soon as he reaches 150 pounds,
1356  * but not until he reaches 450 pounds will he be half as fast as
1357  * a normal kobold.  This both hurts and helps the player, hurts
1358  * because in the old days a player could just avoid 300 pounds,
1359  * and helps because now carrying 300 pounds is not very painful.
1360  *
1361  * The "weapon" and "bow" do *not* add to the bonuses to hit or to
1362  * damage, since that would affect non-combat things.  These values
1363  * are actually added in later, at the appropriate place.
1364  *
1365  * This function induces various "status" messages.
1366  * </pre>
1367  */
1368 void calc_bonuses(player_type *creature_ptr)
1369 {
1370         int i, j, hold;
1371         int new_speed;
1372         int default_hand = 0;
1373         int empty_hands_status = empty_hands(creature_ptr, TRUE);
1374         int extra_blows[2];
1375         object_type *o_ptr;
1376         BIT_FLAGS flgs[TR_FLAG_SIZE];
1377         bool omoi = FALSE;
1378         bool yoiyami = FALSE;
1379         bool down_saving = FALSE;
1380
1381         bool have_sw = FALSE, have_kabe = FALSE;
1382         bool easy_2weapon = FALSE;
1383         bool riding_levitation = FALSE;
1384         OBJECT_IDX this_o_idx, next_o_idx = 0;
1385         const player_race *tmp_rp_ptr;
1386
1387         /* Save the old vision stuff */
1388         bool old_telepathy = creature_ptr->telepathy;
1389         bool old_esp_animal = creature_ptr->esp_animal;
1390         bool old_esp_undead = creature_ptr->esp_undead;
1391         bool old_esp_demon = creature_ptr->esp_demon;
1392         bool old_esp_orc = creature_ptr->esp_orc;
1393         bool old_esp_troll = creature_ptr->esp_troll;
1394         bool old_esp_giant = creature_ptr->esp_giant;
1395         bool old_esp_dragon = creature_ptr->esp_dragon;
1396         bool old_esp_human = creature_ptr->esp_human;
1397         bool old_esp_evil = creature_ptr->esp_evil;
1398         bool old_esp_good = creature_ptr->esp_good;
1399         bool old_esp_nonliving = creature_ptr->esp_nonliving;
1400         bool old_esp_unique = creature_ptr->esp_unique;
1401         bool old_see_inv = creature_ptr->see_inv;
1402         bool old_mighty_throw = creature_ptr->mighty_throw;
1403
1404         /* Current feature under player. */
1405         floor_type *floor_ptr = creature_ptr->current_floor_ptr;
1406         feature_type *f_ptr = &f_info[floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].feat];
1407
1408         /* Save the old armor class */
1409         ARMOUR_CLASS old_dis_ac = creature_ptr->dis_ac;
1410         ARMOUR_CLASS old_dis_to_a = creature_ptr->dis_to_a;
1411
1412         /* Clear extra blows/shots */
1413         extra_blows[0] = extra_blows[1] = 0;
1414
1415         /* Clear the stat modifiers */
1416         for (i = 0; i < A_MAX; i++) creature_ptr->stat_add[i] = 0;
1417
1418
1419         /* Clear the Displayed/Real armor class */
1420         creature_ptr->dis_ac = creature_ptr->ac = 0;
1421
1422         /* Clear the Displayed/Real Bonuses */
1423         creature_ptr->dis_to_h[0] = creature_ptr->to_h[0] = 0;
1424         creature_ptr->dis_to_h[1] = creature_ptr->to_h[1] = 0;
1425         creature_ptr->dis_to_d[0] = creature_ptr->to_d[0] = 0;
1426         creature_ptr->dis_to_d[1] = creature_ptr->to_d[1] = 0;
1427         creature_ptr->dis_to_h_b = creature_ptr->to_h_b = 0;
1428         creature_ptr->dis_to_a = creature_ptr->to_a = 0;
1429         creature_ptr->to_h_m = 0;
1430         creature_ptr->to_d_m = 0;
1431
1432         creature_ptr->to_m_chance = 0;
1433
1434         /* Clear the Extra Dice Bonuses */
1435         creature_ptr->to_dd[0] = creature_ptr->to_ds[0] = 0;
1436         creature_ptr->to_dd[1] = creature_ptr->to_ds[1] = 0;
1437
1438         /* Start with "normal" speed */
1439         new_speed = 110;
1440
1441         /* Start with a single blow per turn */
1442         creature_ptr->num_blow[0] = 1;
1443         creature_ptr->num_blow[1] = 1;
1444
1445         /* Start with a single shot per turn */
1446         creature_ptr->num_fire = 100;
1447
1448         /* Reset the "xtra" tval */
1449         creature_ptr->tval_xtra = 0;
1450
1451         /* Reset the "ammo" tval */
1452         creature_ptr->tval_ammo = 0;
1453
1454         /* Clear all the flags */
1455         creature_ptr->cursed = 0L;
1456         creature_ptr->bless_blade = FALSE;
1457         creature_ptr->xtra_might = FALSE;
1458         creature_ptr->impact[0] = FALSE;
1459         creature_ptr->impact[1] = FALSE;
1460         creature_ptr->pass_wall = FALSE;
1461         creature_ptr->kill_wall = FALSE;
1462         creature_ptr->dec_mana = FALSE;
1463         creature_ptr->easy_spell = FALSE;
1464         creature_ptr->heavy_spell = FALSE;
1465         creature_ptr->see_inv = FALSE;
1466         creature_ptr->free_act = FALSE;
1467         creature_ptr->slow_digest = FALSE;
1468         creature_ptr->regenerate = FALSE;
1469         creature_ptr->can_swim = FALSE;
1470         creature_ptr->levitation = FALSE;
1471         creature_ptr->hold_exp = FALSE;
1472         creature_ptr->telepathy = FALSE;
1473         creature_ptr->esp_animal = FALSE;
1474         creature_ptr->esp_undead = FALSE;
1475         creature_ptr->esp_demon = FALSE;
1476         creature_ptr->esp_orc = FALSE;
1477         creature_ptr->esp_troll = FALSE;
1478         creature_ptr->esp_giant = FALSE;
1479         creature_ptr->esp_dragon = FALSE;
1480         creature_ptr->esp_human = FALSE;
1481         creature_ptr->esp_evil = FALSE;
1482         creature_ptr->esp_good = FALSE;
1483         creature_ptr->esp_nonliving = FALSE;
1484         creature_ptr->esp_unique = FALSE;
1485         creature_ptr->lite = FALSE;
1486         creature_ptr->sustain_str = FALSE;
1487         creature_ptr->sustain_int = FALSE;
1488         creature_ptr->sustain_wis = FALSE;
1489         creature_ptr->sustain_con = FALSE;
1490         creature_ptr->sustain_dex = FALSE;
1491         creature_ptr->sustain_chr = FALSE;
1492         creature_ptr->resist_acid = FALSE;
1493         creature_ptr->resist_elec = FALSE;
1494         creature_ptr->resist_fire = FALSE;
1495         creature_ptr->resist_cold = FALSE;
1496         creature_ptr->resist_pois = FALSE;
1497         creature_ptr->resist_conf = FALSE;
1498         creature_ptr->resist_sound = FALSE;
1499         creature_ptr->resist_lite = FALSE;
1500         creature_ptr->resist_dark = FALSE;
1501         creature_ptr->resist_chaos = FALSE;
1502         creature_ptr->resist_disen = FALSE;
1503         creature_ptr->resist_shard = FALSE;
1504         creature_ptr->resist_nexus = FALSE;
1505         creature_ptr->resist_blind = FALSE;
1506         creature_ptr->resist_neth = FALSE;
1507         creature_ptr->resist_time = FALSE;
1508         creature_ptr->resist_water = FALSE;
1509         creature_ptr->resist_fear = FALSE;
1510         creature_ptr->reflect = FALSE;
1511         creature_ptr->sh_fire = FALSE;
1512         creature_ptr->sh_elec = FALSE;
1513         creature_ptr->sh_cold = FALSE;
1514         creature_ptr->anti_magic = FALSE;
1515         creature_ptr->anti_tele = FALSE;
1516         creature_ptr->warning = FALSE;
1517         creature_ptr->mighty_throw = FALSE;
1518         creature_ptr->see_nocto = FALSE;
1519
1520         creature_ptr->immune_acid = FALSE;
1521         creature_ptr->immune_elec = FALSE;
1522         creature_ptr->immune_fire = FALSE;
1523         creature_ptr->immune_cold = FALSE;
1524
1525         creature_ptr->ryoute = FALSE;
1526         creature_ptr->migite = FALSE;
1527         creature_ptr->hidarite = FALSE;
1528         creature_ptr->no_flowed = FALSE;
1529
1530         if (creature_ptr->mimic_form) tmp_rp_ptr = &mimic_info[creature_ptr->mimic_form];
1531         else tmp_rp_ptr = &race_info[creature_ptr->prace];
1532
1533         /* Base infravision (purely racial) */
1534         creature_ptr->see_infra = tmp_rp_ptr->infra;
1535
1536         /* Base skill -- disarming */
1537         creature_ptr->skill_dis = tmp_rp_ptr->r_dis + cp_ptr->c_dis + ap_ptr->a_dis;
1538
1539         /* Base skill -- magic devices */
1540         creature_ptr->skill_dev = tmp_rp_ptr->r_dev + cp_ptr->c_dev + ap_ptr->a_dev;
1541
1542         /* Base skill -- saving throw */
1543         creature_ptr->skill_sav = tmp_rp_ptr->r_sav + cp_ptr->c_sav + ap_ptr->a_sav;
1544
1545         /* Base skill -- stealth */
1546         creature_ptr->skill_stl = tmp_rp_ptr->r_stl + cp_ptr->c_stl + ap_ptr->a_stl;
1547
1548         /* Base skill -- searching ability */
1549         creature_ptr->skill_srh = tmp_rp_ptr->r_srh + cp_ptr->c_srh + ap_ptr->a_srh;
1550
1551         /* Base skill -- searching frequency */
1552         creature_ptr->skill_fos = tmp_rp_ptr->r_fos + cp_ptr->c_fos + ap_ptr->a_fos;
1553
1554         /* Base skill -- combat (normal) */
1555         creature_ptr->skill_thn = tmp_rp_ptr->r_thn + cp_ptr->c_thn + ap_ptr->a_thn;
1556
1557         /* Base skill -- combat (shooting) */
1558         creature_ptr->skill_thb = tmp_rp_ptr->r_thb + cp_ptr->c_thb + ap_ptr->a_thb;
1559
1560         /* Base skill -- combat (throwing) */
1561         creature_ptr->skill_tht = tmp_rp_ptr->r_thb + cp_ptr->c_thb + ap_ptr->a_thb;
1562
1563         /* Base skill -- digging */
1564         creature_ptr->skill_dig = 0;
1565
1566         if (has_melee_weapon(creature_ptr, INVEN_RARM)) creature_ptr->migite = TRUE;
1567         if (has_melee_weapon(creature_ptr, INVEN_LARM))
1568         {
1569                 creature_ptr->hidarite = TRUE;
1570                 if (!creature_ptr->migite) default_hand = 1;
1571         }
1572
1573         if (can_two_hands_wielding(creature_ptr))
1574         {
1575                 if (creature_ptr->migite && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_LARM) &&
1576                         object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_RARM]))
1577                 {
1578                         creature_ptr->ryoute = TRUE;
1579                 }
1580                 else if (creature_ptr->hidarite && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_RARM) &&
1581                         object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_LARM]))
1582                 {
1583                         creature_ptr->ryoute = TRUE;
1584                 }
1585                 else
1586                 {
1587                         switch (creature_ptr->pclass)
1588                         {
1589                         case CLASS_MONK:
1590                         case CLASS_FORCETRAINER:
1591                         case CLASS_BERSERKER:
1592                                 if (empty_hands(creature_ptr, FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))
1593                                 {
1594                                         creature_ptr->migite = TRUE;
1595                                         creature_ptr->ryoute = TRUE;
1596                                 }
1597                                 break;
1598                         }
1599                 }
1600         }
1601
1602         if (!creature_ptr->migite && !creature_ptr->hidarite)
1603         {
1604                 if (empty_hands_status & EMPTY_HAND_RARM) creature_ptr->migite = TRUE;
1605                 else if (empty_hands_status == EMPTY_HAND_LARM)
1606                 {
1607                         creature_ptr->hidarite = TRUE;
1608                         default_hand = 1;
1609                 }
1610         }
1611
1612         if (creature_ptr->special_defense & KAMAE_MASK)
1613         {
1614                 if (!(empty_hands_status & EMPTY_HAND_RARM))
1615                 {
1616                         set_action(creature_ptr, ACTION_NONE);
1617                 }
1618         }
1619
1620         switch (creature_ptr->pclass)
1621         {
1622         case CLASS_WARRIOR:
1623                 if (creature_ptr->lev > 29) creature_ptr->resist_fear = TRUE;
1624                 if (creature_ptr->lev > 44) creature_ptr->regenerate = TRUE;
1625                 break;
1626         case CLASS_PALADIN:
1627                 if (creature_ptr->lev > 39) creature_ptr->resist_fear = TRUE;
1628                 break;
1629         case CLASS_CHAOS_WARRIOR:
1630                 if (creature_ptr->lev > 29) creature_ptr->resist_chaos = TRUE;
1631                 if (creature_ptr->lev > 39) creature_ptr->resist_fear = TRUE;
1632                 break;
1633         case CLASS_MINDCRAFTER:
1634                 if (creature_ptr->lev > 9) creature_ptr->resist_fear = TRUE;
1635                 if (creature_ptr->lev > 19) creature_ptr->sustain_wis = TRUE;
1636                 if (creature_ptr->lev > 29) creature_ptr->resist_conf = TRUE;
1637                 if (creature_ptr->lev > 39) creature_ptr->telepathy = TRUE;
1638                 break;
1639         case CLASS_MONK:
1640         case CLASS_FORCETRAINER:
1641                 /* Unencumbered Monks become faster every 10 levels */
1642                 if (!(heavy_armor(creature_ptr)))
1643                 {
1644                         if (!(PRACE_IS_(creature_ptr, RACE_KLACKON) ||
1645                                 PRACE_IS_(creature_ptr, RACE_SPRITE) ||
1646                                 (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)))
1647                                 new_speed += (creature_ptr->lev) / 10;
1648
1649                         /* Free action if unencumbered at level 25 */
1650                         if (creature_ptr->lev > 24)
1651                                 creature_ptr->free_act = TRUE;
1652                 }
1653                 break;
1654         case CLASS_SORCERER:
1655                 creature_ptr->to_a -= 50;
1656                 creature_ptr->dis_to_a -= 50;
1657                 break;
1658         case CLASS_BARD:
1659                 creature_ptr->resist_sound = TRUE;
1660                 break;
1661         case CLASS_SAMURAI:
1662                 if (creature_ptr->lev > 29) creature_ptr->resist_fear = TRUE;
1663                 break;
1664         case CLASS_BERSERKER:
1665                 creature_ptr->shero = 1;
1666                 creature_ptr->sustain_str = TRUE;
1667                 creature_ptr->sustain_dex = TRUE;
1668                 creature_ptr->sustain_con = TRUE;
1669                 creature_ptr->regenerate = TRUE;
1670                 creature_ptr->free_act = TRUE;
1671                 new_speed += 2;
1672                 if (creature_ptr->lev > 29) new_speed++;
1673                 if (creature_ptr->lev > 39) new_speed++;
1674                 if (creature_ptr->lev > 44) new_speed++;
1675                 if (creature_ptr->lev > 49) new_speed++;
1676                 creature_ptr->to_a += 10 + creature_ptr->lev / 2;
1677                 creature_ptr->dis_to_a += 10 + creature_ptr->lev / 2;
1678                 creature_ptr->skill_dig += (100 + creature_ptr->lev * 8);
1679                 if (creature_ptr->lev > 39) creature_ptr->reflect = TRUE;
1680                 creature_ptr->redraw |= PR_STATUS;
1681                 break;
1682         case CLASS_MIRROR_MASTER:
1683                 if (creature_ptr->lev > 39) creature_ptr->reflect = TRUE;
1684                 break;
1685         case CLASS_NINJA:
1686                 /* Unencumbered Ninjas become faster every 10 levels */
1687                 if (heavy_armor(creature_ptr))
1688                 {
1689                         new_speed -= (creature_ptr->lev) / 10;
1690                         creature_ptr->skill_stl -= (creature_ptr->lev) / 10;
1691                 }
1692                 else if ((!creature_ptr->inventory_list[INVEN_RARM].k_idx || creature_ptr->migite) &&
1693                         (!creature_ptr->inventory_list[INVEN_LARM].k_idx || creature_ptr->hidarite))
1694                 {
1695                         new_speed += 3;
1696                         if (!(PRACE_IS_(creature_ptr, RACE_KLACKON) ||
1697                                 PRACE_IS_(creature_ptr, RACE_SPRITE) ||
1698                                 (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)))
1699                                 new_speed += (creature_ptr->lev) / 10;
1700                         creature_ptr->skill_stl += (creature_ptr->lev) / 10;
1701
1702                         /* Free action if unencumbered at level 25 */
1703                         if (creature_ptr->lev > 24)
1704                                 creature_ptr->free_act = TRUE;
1705                 }
1706                 if ((!creature_ptr->inventory_list[INVEN_RARM].k_idx || creature_ptr->migite) &&
1707                         (!creature_ptr->inventory_list[INVEN_LARM].k_idx || creature_ptr->hidarite))
1708                 {
1709                         creature_ptr->to_a += creature_ptr->lev / 2 + 5;
1710                         creature_ptr->dis_to_a += creature_ptr->lev / 2 + 5;
1711                 }
1712                 creature_ptr->slow_digest = TRUE;
1713                 creature_ptr->resist_fear = TRUE;
1714                 if (creature_ptr->lev > 19) creature_ptr->resist_pois = TRUE;
1715                 if (creature_ptr->lev > 24) creature_ptr->sustain_dex = TRUE;
1716                 if (creature_ptr->lev > 29) creature_ptr->see_inv = TRUE;
1717                 if (creature_ptr->lev > 44)
1718                 {
1719                         creature_ptr->oppose_pois = 1;
1720                         creature_ptr->redraw |= PR_STATUS;
1721                 }
1722                 creature_ptr->see_nocto = TRUE;
1723                 break;
1724         }
1725
1726         /***** Races ****/
1727         if (creature_ptr->mimic_form)
1728         {
1729                 switch (creature_ptr->mimic_form)
1730                 {
1731                 case MIMIC_DEMON:
1732                         creature_ptr->hold_exp = TRUE;
1733                         creature_ptr->resist_chaos = TRUE;
1734                         creature_ptr->resist_neth = TRUE;
1735                         creature_ptr->resist_fire = TRUE;
1736                         creature_ptr->oppose_fire = 1;
1737                         creature_ptr->see_inv = TRUE;
1738                         new_speed += 3;
1739                         creature_ptr->redraw |= PR_STATUS;
1740                         creature_ptr->to_a += 10;
1741                         creature_ptr->dis_to_a += 10;
1742                         break;
1743                 case MIMIC_DEMON_LORD:
1744                         creature_ptr->hold_exp = TRUE;
1745                         creature_ptr->resist_chaos = TRUE;
1746                         creature_ptr->resist_neth = TRUE;
1747                         creature_ptr->immune_fire = TRUE;
1748                         creature_ptr->resist_acid = TRUE;
1749                         creature_ptr->resist_fire = TRUE;
1750                         creature_ptr->resist_cold = TRUE;
1751                         creature_ptr->resist_elec = TRUE;
1752                         creature_ptr->resist_pois = TRUE;
1753                         creature_ptr->resist_conf = TRUE;
1754                         creature_ptr->resist_disen = TRUE;
1755                         creature_ptr->resist_nexus = TRUE;
1756                         creature_ptr->resist_fear = TRUE;
1757                         creature_ptr->sh_fire = TRUE;
1758                         creature_ptr->see_inv = TRUE;
1759                         creature_ptr->telepathy = TRUE;
1760                         creature_ptr->levitation = TRUE;
1761                         creature_ptr->kill_wall = TRUE;
1762                         new_speed += 5;
1763                         creature_ptr->to_a += 20;
1764                         creature_ptr->dis_to_a += 20;
1765                         break;
1766                 case MIMIC_VAMPIRE:
1767                         creature_ptr->resist_dark = TRUE;
1768                         creature_ptr->hold_exp = TRUE;
1769                         creature_ptr->resist_neth = TRUE;
1770                         creature_ptr->resist_cold = TRUE;
1771                         creature_ptr->resist_pois = TRUE;
1772                         creature_ptr->see_inv = TRUE;
1773                         new_speed += 3;
1774                         creature_ptr->to_a += 10;
1775                         creature_ptr->dis_to_a += 10;
1776                         if (creature_ptr->pclass != CLASS_NINJA) creature_ptr->lite = TRUE;
1777                         break;
1778                 }
1779         }
1780         else
1781         {
1782                 switch (creature_ptr->prace)
1783                 {
1784                 case RACE_ELF:
1785                         creature_ptr->resist_lite = TRUE;
1786                         break;
1787                 case RACE_HOBBIT:
1788                         creature_ptr->hold_exp = TRUE;
1789                         break;
1790                 case RACE_GNOME:
1791                         creature_ptr->free_act = TRUE;
1792                         break;
1793                 case RACE_DWARF:
1794                         creature_ptr->resist_blind = TRUE;
1795                         break;
1796                 case RACE_HALF_ORC:
1797                         creature_ptr->resist_dark = TRUE;
1798                         break;
1799                 case RACE_HALF_TROLL:
1800                         creature_ptr->sustain_str = TRUE;
1801
1802                         if (creature_ptr->lev > 14)
1803                         {
1804                                 /* High level trolls heal fast... */
1805                                 creature_ptr->regenerate = TRUE;
1806
1807                                 if (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER)
1808                                 {
1809                                         creature_ptr->slow_digest = TRUE;
1810                                         /* Let's not make Regeneration
1811                                          * a disadvantage for the poor warriors who can
1812                                          * never learn a spell that satisfies hunger (actually
1813                                          * neither can rogues, but half-trolls are not
1814                                          * supposed to play rogues) */
1815                                 }
1816                         }
1817                         break;
1818                 case RACE_AMBERITE:
1819                         creature_ptr->sustain_con = TRUE;
1820                         creature_ptr->regenerate = TRUE;  /* Amberites heal fast... */
1821                         break;
1822                 case RACE_HIGH_ELF:
1823                         creature_ptr->resist_lite = TRUE;
1824                         creature_ptr->see_inv = TRUE;
1825                         break;
1826                 case RACE_BARBARIAN:
1827                         creature_ptr->resist_fear = TRUE;
1828                         break;
1829                 case RACE_HALF_OGRE:
1830                         creature_ptr->resist_dark = TRUE;
1831                         creature_ptr->sustain_str = TRUE;
1832                         break;
1833                 case RACE_HALF_GIANT:
1834                         creature_ptr->sustain_str = TRUE;
1835                         creature_ptr->resist_shard = TRUE;
1836                         break;
1837                 case RACE_HALF_TITAN:
1838                         creature_ptr->resist_chaos = TRUE;
1839                         break;
1840                 case RACE_CYCLOPS:
1841                         creature_ptr->resist_sound = TRUE;
1842                         break;
1843                 case RACE_YEEK:
1844                         creature_ptr->resist_acid = TRUE;
1845                         if (creature_ptr->lev > 19) creature_ptr->immune_acid = TRUE;
1846                         break;
1847                 case RACE_KLACKON:
1848                         creature_ptr->resist_conf = TRUE;
1849                         creature_ptr->resist_acid = TRUE;
1850
1851                         /* Klackons become faster */
1852                         new_speed += (creature_ptr->lev) / 10;
1853                         break;
1854                 case RACE_KOBOLD:
1855                         creature_ptr->resist_pois = TRUE;
1856                         break;
1857                 case RACE_NIBELUNG:
1858                         creature_ptr->resist_disen = TRUE;
1859                         creature_ptr->resist_dark = TRUE;
1860                         break;
1861                 case RACE_DARK_ELF:
1862                         creature_ptr->resist_dark = TRUE;
1863                         if (creature_ptr->lev > 19) creature_ptr->see_inv = TRUE;
1864                         break;
1865                 case RACE_DRACONIAN:
1866                         creature_ptr->levitation = TRUE;
1867                         if (creature_ptr->lev > 4) creature_ptr->resist_fire = TRUE;
1868                         if (creature_ptr->lev > 9) creature_ptr->resist_cold = TRUE;
1869                         if (creature_ptr->lev > 14) creature_ptr->resist_acid = TRUE;
1870                         if (creature_ptr->lev > 19) creature_ptr->resist_elec = TRUE;
1871                         if (creature_ptr->lev > 34) creature_ptr->resist_pois = TRUE;
1872                         break;
1873                 case RACE_MIND_FLAYER:
1874                         creature_ptr->sustain_int = TRUE;
1875                         creature_ptr->sustain_wis = TRUE;
1876                         if (creature_ptr->lev > 14) creature_ptr->see_inv = TRUE;
1877                         if (creature_ptr->lev > 29) creature_ptr->telepathy = TRUE;
1878                         break;
1879                 case RACE_IMP:
1880                         creature_ptr->resist_fire = TRUE;
1881                         if (creature_ptr->lev > 9) creature_ptr->see_inv = TRUE;
1882                         break;
1883                 case RACE_GOLEM:
1884                         creature_ptr->slow_digest = TRUE;
1885                         creature_ptr->free_act = TRUE;
1886                         creature_ptr->see_inv = TRUE;
1887                         creature_ptr->resist_pois = TRUE;
1888                         if (creature_ptr->lev > 34) creature_ptr->hold_exp = TRUE;
1889                         break;
1890                 case RACE_SKELETON:
1891                         creature_ptr->resist_shard = TRUE;
1892                         creature_ptr->hold_exp = TRUE;
1893                         creature_ptr->see_inv = TRUE;
1894                         creature_ptr->resist_pois = TRUE;
1895                         if (creature_ptr->lev > 9) creature_ptr->resist_cold = TRUE;
1896                         break;
1897                 case RACE_ZOMBIE:
1898                         creature_ptr->resist_neth = TRUE;
1899                         creature_ptr->hold_exp = TRUE;
1900                         creature_ptr->see_inv = TRUE;
1901                         creature_ptr->resist_pois = TRUE;
1902                         creature_ptr->slow_digest = TRUE;
1903                         if (creature_ptr->lev > 4) creature_ptr->resist_cold = TRUE;
1904                         break;
1905                 case RACE_VAMPIRE:
1906                         creature_ptr->resist_dark = TRUE;
1907                         creature_ptr->hold_exp = TRUE;
1908                         creature_ptr->resist_neth = TRUE;
1909                         creature_ptr->resist_cold = TRUE;
1910                         creature_ptr->resist_pois = TRUE;
1911                         if (creature_ptr->pclass != CLASS_NINJA) creature_ptr->lite = TRUE;
1912                         break;
1913                 case RACE_SPECTRE:
1914                         creature_ptr->levitation = TRUE;
1915                         creature_ptr->free_act = TRUE;
1916                         creature_ptr->resist_neth = TRUE;
1917                         creature_ptr->hold_exp = TRUE;
1918                         creature_ptr->see_inv = TRUE;
1919                         creature_ptr->resist_pois = TRUE;
1920                         creature_ptr->slow_digest = TRUE;
1921                         creature_ptr->resist_cold = TRUE;
1922                         creature_ptr->pass_wall = TRUE;
1923                         if (creature_ptr->lev > 34) creature_ptr->telepathy = TRUE;
1924                         break;
1925                 case RACE_SPRITE:
1926                         creature_ptr->levitation = TRUE;
1927                         creature_ptr->resist_lite = TRUE;
1928
1929                         /* Sprites become faster */
1930                         new_speed += (creature_ptr->lev) / 10;
1931                         break;
1932                 case RACE_BEASTMAN:
1933                         creature_ptr->resist_conf = TRUE;
1934                         creature_ptr->resist_sound = TRUE;
1935                         break;
1936                 case RACE_ENT:
1937                         /* Ents dig like maniacs, but only with their hands. */
1938                         if (!creature_ptr->inventory_list[INVEN_RARM].k_idx)
1939                                 creature_ptr->skill_dig += creature_ptr->lev * 10;
1940                         /* Ents get tougher and stronger as they age, but lose dexterity. */
1941                         if (creature_ptr->lev > 25) creature_ptr->stat_add[A_STR]++;
1942                         if (creature_ptr->lev > 40) creature_ptr->stat_add[A_STR]++;
1943                         if (creature_ptr->lev > 45) creature_ptr->stat_add[A_STR]++;
1944
1945                         if (creature_ptr->lev > 25) creature_ptr->stat_add[A_DEX]--;
1946                         if (creature_ptr->lev > 40) creature_ptr->stat_add[A_DEX]--;
1947                         if (creature_ptr->lev > 45) creature_ptr->stat_add[A_DEX]--;
1948
1949                         if (creature_ptr->lev > 25) creature_ptr->stat_add[A_CON]++;
1950                         if (creature_ptr->lev > 40) creature_ptr->stat_add[A_CON]++;
1951                         if (creature_ptr->lev > 45) creature_ptr->stat_add[A_CON]++;
1952                         break;
1953                 case RACE_ANGEL:
1954                         creature_ptr->levitation = TRUE;
1955                         creature_ptr->see_inv = TRUE;
1956                         break;
1957                 case RACE_DEMON:
1958                         creature_ptr->resist_fire = TRUE;
1959                         creature_ptr->resist_neth = TRUE;
1960                         creature_ptr->hold_exp = TRUE;
1961                         if (creature_ptr->lev > 9) creature_ptr->see_inv = TRUE;
1962                         if (creature_ptr->lev > 44)
1963                         {
1964                                 creature_ptr->oppose_fire = 1;
1965                                 creature_ptr->redraw |= PR_STATUS;
1966                         }
1967                         break;
1968                 case RACE_DUNADAN:
1969                         creature_ptr->sustain_con = TRUE;
1970                         break;
1971                 case RACE_S_FAIRY:
1972                         creature_ptr->levitation = TRUE;
1973                         break;
1974                 case RACE_KUTAR:
1975                         creature_ptr->resist_conf = TRUE;
1976                         break;
1977                 case RACE_ANDROID:
1978                         creature_ptr->slow_digest = TRUE;
1979                         creature_ptr->free_act = TRUE;
1980                         creature_ptr->resist_pois = TRUE;
1981                         creature_ptr->hold_exp = TRUE;
1982                         break;
1983                 case RACE_MERFOLK:
1984                         creature_ptr->resist_water = TRUE;
1985                         break;
1986                 default:
1987                         /* Do nothing */
1988                         ;
1989                 }
1990         }
1991
1992         if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU))
1993         {
1994                 creature_ptr->see_inv = TRUE;
1995                 creature_ptr->free_act = TRUE;
1996                 creature_ptr->slow_digest = TRUE;
1997                 creature_ptr->regenerate = TRUE;
1998                 creature_ptr->levitation = TRUE;
1999                 creature_ptr->hold_exp = TRUE;
2000                 creature_ptr->telepathy = TRUE;
2001                 creature_ptr->lite = TRUE;
2002                 creature_ptr->sustain_str = TRUE;
2003                 creature_ptr->sustain_int = TRUE;
2004                 creature_ptr->sustain_wis = TRUE;
2005                 creature_ptr->sustain_con = TRUE;
2006                 creature_ptr->sustain_dex = TRUE;
2007                 creature_ptr->sustain_chr = TRUE;
2008                 creature_ptr->resist_acid = TRUE;
2009                 creature_ptr->resist_elec = TRUE;
2010                 creature_ptr->resist_fire = TRUE;
2011                 creature_ptr->resist_cold = TRUE;
2012                 creature_ptr->resist_pois = TRUE;
2013                 creature_ptr->resist_conf = TRUE;
2014                 creature_ptr->resist_sound = TRUE;
2015                 creature_ptr->resist_lite = TRUE;
2016                 creature_ptr->resist_dark = TRUE;
2017                 creature_ptr->resist_chaos = TRUE;
2018                 creature_ptr->resist_disen = TRUE;
2019                 creature_ptr->resist_shard = TRUE;
2020                 creature_ptr->resist_nexus = TRUE;
2021                 creature_ptr->resist_blind = TRUE;
2022                 creature_ptr->resist_neth = TRUE;
2023                 creature_ptr->resist_fear = TRUE;
2024                 creature_ptr->reflect = TRUE;
2025                 creature_ptr->sh_fire = TRUE;
2026                 creature_ptr->sh_elec = TRUE;
2027                 creature_ptr->sh_cold = TRUE;
2028                 creature_ptr->to_a += 100;
2029                 creature_ptr->dis_to_a += 100;
2030         }
2031         /* Temporary shield */
2032         else if (creature_ptr->tsubureru || creature_ptr->shield || creature_ptr->magicdef)
2033         {
2034                 creature_ptr->to_a += 50;
2035                 creature_ptr->dis_to_a += 50;
2036         }
2037
2038         if (creature_ptr->tim_res_nether)
2039         {
2040                 creature_ptr->resist_neth = TRUE;
2041         }
2042
2043         if (creature_ptr->tim_sh_fire)
2044         {
2045                 creature_ptr->sh_fire = TRUE;
2046         }
2047
2048         if (creature_ptr->tim_res_time)
2049         {
2050                 creature_ptr->resist_time = TRUE;
2051         }
2052
2053         /* Sexy Gal */
2054         if (creature_ptr->pseikaku == SEIKAKU_SEXY) creature_ptr->cursed |= (TRC_AGGRAVATE);
2055
2056         if (creature_ptr->pseikaku == SEIKAKU_NAMAKE) creature_ptr->to_m_chance += 10;
2057         if (creature_ptr->pseikaku == SEIKAKU_KIREMONO) creature_ptr->to_m_chance -= 3;
2058         if ((creature_ptr->pseikaku == SEIKAKU_GAMAN) || (creature_ptr->pseikaku == SEIKAKU_CHIKARA)) creature_ptr->to_m_chance++;
2059
2060         if (creature_ptr->pseikaku == SEIKAKU_CHARGEMAN)
2061         {
2062                 creature_ptr->to_m_chance += 5;
2063                 creature_ptr->resist_conf = TRUE;
2064         }
2065
2066         /* Lucky man */
2067         if (creature_ptr->pseikaku == SEIKAKU_LUCKY) creature_ptr->muta3 |= MUT3_GOOD_LUCK;
2068
2069         if (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)
2070         {
2071                 creature_ptr->resist_blind = TRUE;
2072                 creature_ptr->resist_conf = TRUE;
2073                 creature_ptr->hold_exp = TRUE;
2074                 if (creature_ptr->pclass != CLASS_NINJA) creature_ptr->lite = TRUE;
2075
2076                 if ((creature_ptr->prace != RACE_KLACKON) && (creature_ptr->prace != RACE_SPRITE))
2077                         /* Munchkin become faster */
2078                         new_speed += (creature_ptr->lev) / 10 + 5;
2079         }
2080
2081         if (music_singing(creature_ptr, MUSIC_WALL))
2082         {
2083                 creature_ptr->kill_wall = TRUE;
2084         }
2085
2086         /* Hack -- apply racial/class stat maxes */
2087         /* Apply the racial modifiers */
2088         for (i = 0; i < A_MAX; i++)
2089         {
2090                 /* Modify the stats for "race" */
2091                 creature_ptr->stat_add[i] += (tmp_rp_ptr->r_adj[i] + cp_ptr->c_adj[i] + ap_ptr->a_adj[i]);
2092         }
2093
2094         /* I'm adding the mutations here for the lack of a better place... */
2095         if (creature_ptr->muta3)
2096         {
2097                 /* Hyper Strength */
2098                 if (creature_ptr->muta3 & MUT3_HYPER_STR)
2099                 {
2100                         creature_ptr->stat_add[A_STR] += 4;
2101                 }
2102
2103                 /* Puny */
2104                 if (creature_ptr->muta3 & MUT3_PUNY)
2105                 {
2106                         creature_ptr->stat_add[A_STR] -= 4;
2107                 }
2108
2109                 /* Living computer */
2110                 if (creature_ptr->muta3 & MUT3_HYPER_INT)
2111                 {
2112                         creature_ptr->stat_add[A_INT] += 4;
2113                         creature_ptr->stat_add[A_WIS] += 4;
2114                 }
2115
2116                 /* Moronic */
2117                 if (creature_ptr->muta3 & MUT3_MORONIC)
2118                 {
2119                         creature_ptr->stat_add[A_INT] -= 4;
2120                         creature_ptr->stat_add[A_WIS] -= 4;
2121                 }
2122
2123                 if (creature_ptr->muta3 & MUT3_RESILIENT)
2124                 {
2125                         creature_ptr->stat_add[A_CON] += 4;
2126                 }
2127
2128                 if (creature_ptr->muta3 & MUT3_XTRA_FAT)
2129                 {
2130                         creature_ptr->stat_add[A_CON] += 2;
2131                         new_speed -= 2;
2132                 }
2133
2134                 if (creature_ptr->muta3 & MUT3_ALBINO)
2135                 {
2136                         creature_ptr->stat_add[A_CON] -= 4;
2137                 }
2138
2139                 if (creature_ptr->muta3 & MUT3_FLESH_ROT)
2140                 {
2141                         creature_ptr->stat_add[A_CON] -= 2;
2142                         creature_ptr->stat_add[A_CHR] -= 1;
2143                         creature_ptr->regenerate = FALSE;
2144                         /* Cancel innate regeneration */
2145                 }
2146
2147                 if (creature_ptr->muta3 & MUT3_SILLY_VOI)
2148                 {
2149                         creature_ptr->stat_add[A_CHR] -= 4;
2150                 }
2151
2152                 if (creature_ptr->muta3 & MUT3_BLANK_FAC)
2153                 {
2154                         creature_ptr->stat_add[A_CHR] -= 1;
2155                 }
2156
2157                 if (creature_ptr->muta3 & MUT3_XTRA_EYES)
2158                 {
2159                         creature_ptr->skill_fos += 15;
2160                         creature_ptr->skill_srh += 15;
2161                 }
2162
2163                 if (creature_ptr->muta3 & MUT3_MAGIC_RES)
2164                 {
2165                         creature_ptr->skill_sav += (15 + (creature_ptr->lev / 5));
2166                 }
2167
2168                 if (creature_ptr->muta3 & MUT3_XTRA_NOIS)
2169                 {
2170                         creature_ptr->skill_stl -= 3;
2171                 }
2172
2173                 if (creature_ptr->muta3 & MUT3_INFRAVIS)
2174                 {
2175                         creature_ptr->see_infra += 3;
2176                 }
2177
2178                 if (creature_ptr->muta3 & MUT3_XTRA_LEGS)
2179                 {
2180                         new_speed += 3;
2181                 }
2182
2183                 if (creature_ptr->muta3 & MUT3_SHORT_LEG)
2184                 {
2185                         new_speed -= 3;
2186                 }
2187
2188                 if (creature_ptr->muta3 & MUT3_ELEC_TOUC)
2189                 {
2190                         creature_ptr->sh_elec = TRUE;
2191                 }
2192
2193                 if (creature_ptr->muta3 & MUT3_FIRE_BODY)
2194                 {
2195                         creature_ptr->sh_fire = TRUE;
2196                         creature_ptr->lite = TRUE;
2197                 }
2198
2199                 if (creature_ptr->muta3 & MUT3_WART_SKIN)
2200                 {
2201                         creature_ptr->stat_add[A_CHR] -= 2;
2202                         creature_ptr->to_a += 5;
2203                         creature_ptr->dis_to_a += 5;
2204                 }
2205
2206                 if (creature_ptr->muta3 & MUT3_SCALES)
2207                 {
2208                         creature_ptr->stat_add[A_CHR] -= 1;
2209                         creature_ptr->to_a += 10;
2210                         creature_ptr->dis_to_a += 10;
2211                 }
2212
2213                 if (creature_ptr->muta3 & MUT3_IRON_SKIN)
2214                 {
2215                         creature_ptr->stat_add[A_DEX] -= 1;
2216                         creature_ptr->to_a += 25;
2217                         creature_ptr->dis_to_a += 25;
2218                 }
2219
2220                 if (creature_ptr->muta3 & MUT3_WINGS)
2221                 {
2222                         creature_ptr->levitation = TRUE;
2223                 }
2224
2225                 if (creature_ptr->muta3 & MUT3_FEARLESS)
2226                 {
2227                         creature_ptr->resist_fear = TRUE;
2228                 }
2229
2230                 if (creature_ptr->muta3 & MUT3_REGEN)
2231                 {
2232                         creature_ptr->regenerate = TRUE;
2233                 }
2234
2235                 if (creature_ptr->muta3 & MUT3_ESP)
2236                 {
2237                         creature_ptr->telepathy = TRUE;
2238                 }
2239
2240                 if (creature_ptr->muta3 & MUT3_LIMBER)
2241                 {
2242                         creature_ptr->stat_add[A_DEX] += 3;
2243                 }
2244
2245                 if (creature_ptr->muta3 & MUT3_ARTHRITIS)
2246                 {
2247                         creature_ptr->stat_add[A_DEX] -= 3;
2248                 }
2249
2250                 if (creature_ptr->muta3 & MUT3_MOTION)
2251                 {
2252                         creature_ptr->free_act = TRUE;
2253                         creature_ptr->skill_stl += 1;
2254                 }
2255
2256                 if (creature_ptr->muta3 & MUT3_ILL_NORM)
2257                 {
2258                         creature_ptr->stat_add[A_CHR] = 0;
2259                 }
2260         }
2261
2262         if (creature_ptr->tsuyoshi)
2263         {
2264                 creature_ptr->stat_add[A_STR] += 4;
2265                 creature_ptr->stat_add[A_CON] += 4;
2266         }
2267
2268         /* Scan the usable creature_ptr->inventory_list */
2269         for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
2270         {
2271                 int bonus_to_h, bonus_to_d;
2272                 o_ptr = &creature_ptr->inventory_list[i];
2273                 if (!o_ptr->k_idx) continue;
2274
2275                 object_flags(o_ptr, flgs);
2276
2277                 creature_ptr->cursed |= (o_ptr->curse_flags & (0xFFFFFFF0L));
2278                 if (o_ptr->name1 == ART_CHAINSWORD) creature_ptr->cursed |= TRC_CHAINSWORD;
2279
2280                 /* Affect stats */
2281                 if (have_flag(flgs, TR_STR)) creature_ptr->stat_add[A_STR] += o_ptr->pval;
2282                 if (have_flag(flgs, TR_INT)) creature_ptr->stat_add[A_INT] += o_ptr->pval;
2283                 if (have_flag(flgs, TR_WIS)) creature_ptr->stat_add[A_WIS] += o_ptr->pval;
2284                 if (have_flag(flgs, TR_DEX)) creature_ptr->stat_add[A_DEX] += o_ptr->pval;
2285                 if (have_flag(flgs, TR_CON)) creature_ptr->stat_add[A_CON] += o_ptr->pval;
2286                 if (have_flag(flgs, TR_CHR)) creature_ptr->stat_add[A_CHR] += o_ptr->pval;
2287
2288                 if (have_flag(flgs, TR_MAGIC_MASTERY))    creature_ptr->skill_dev += 8 * o_ptr->pval;
2289
2290                 /* Affect stealth */
2291                 if (have_flag(flgs, TR_STEALTH)) creature_ptr->skill_stl += o_ptr->pval;
2292
2293                 /* Affect searching ability (factor of five) */
2294                 if (have_flag(flgs, TR_SEARCH)) creature_ptr->skill_srh += (o_ptr->pval * 5);
2295
2296                 /* Affect searching frequency (factor of five) */
2297                 if (have_flag(flgs, TR_SEARCH)) creature_ptr->skill_fos += (o_ptr->pval * 5);
2298
2299                 /* Affect infravision */
2300                 if (have_flag(flgs, TR_INFRA)) creature_ptr->see_infra += o_ptr->pval;
2301
2302                 /* Affect digging (factor of 20) */
2303                 if (have_flag(flgs, TR_TUNNEL)) creature_ptr->skill_dig += (o_ptr->pval * 20);
2304
2305                 /* Affect speed */
2306                 if (have_flag(flgs, TR_SPEED)) new_speed += o_ptr->pval;
2307
2308                 /* Affect blows */
2309                 if (have_flag(flgs, TR_BLOWS))
2310                 {
2311                         if ((i == INVEN_RARM || i == INVEN_RIGHT) && !creature_ptr->ryoute) extra_blows[0] += o_ptr->pval;
2312                         else if ((i == INVEN_LARM || i == INVEN_LEFT) && !creature_ptr->ryoute) extra_blows[1] += o_ptr->pval;
2313                         else { extra_blows[0] += o_ptr->pval; extra_blows[1] += o_ptr->pval; }
2314                 }
2315
2316                 /* Hack -- cause earthquakes */
2317                 if (have_flag(flgs, TR_IMPACT)) creature_ptr->impact[(i == INVEN_RARM) ? 0 : 1] = TRUE;
2318
2319                 /* Various flags */
2320                 if (have_flag(flgs, TR_AGGRAVATE))   creature_ptr->cursed |= TRC_AGGRAVATE;
2321                 if (have_flag(flgs, TR_DRAIN_EXP))   creature_ptr->cursed |= TRC_DRAIN_EXP;
2322                 if (have_flag(flgs, TR_TY_CURSE))    creature_ptr->cursed |= TRC_TY_CURSE;
2323                 if (have_flag(flgs, TR_ADD_L_CURSE)) creature_ptr->cursed |= TRC_ADD_L_CURSE;
2324                 if (have_flag(flgs, TR_ADD_H_CURSE)) creature_ptr->cursed |= TRC_ADD_H_CURSE;
2325                 if (have_flag(flgs, TR_DRAIN_HP))    creature_ptr->cursed |= TRC_DRAIN_HP;
2326                 if (have_flag(flgs, TR_DRAIN_MANA))  creature_ptr->cursed |= TRC_DRAIN_MANA;
2327                 if (have_flag(flgs, TR_CALL_ANIMAL)) creature_ptr->cursed |= TRC_CALL_ANIMAL;
2328                 if (have_flag(flgs, TR_CALL_DEMON))  creature_ptr->cursed |= TRC_CALL_DEMON;
2329                 if (have_flag(flgs, TR_CALL_DRAGON)) creature_ptr->cursed |= TRC_CALL_DRAGON;
2330                 if (have_flag(flgs, TR_CALL_UNDEAD)) creature_ptr->cursed |= TRC_CALL_UNDEAD;
2331                 if (have_flag(flgs, TR_COWARDICE))   creature_ptr->cursed |= TRC_COWARDICE;
2332                 if (have_flag(flgs, TR_LOW_MELEE))   creature_ptr->cursed |= TRC_LOW_MELEE;
2333                 if (have_flag(flgs, TR_LOW_AC))      creature_ptr->cursed |= TRC_LOW_AC;
2334                 if (have_flag(flgs, TR_LOW_MAGIC))   creature_ptr->cursed |= TRC_LOW_MAGIC;
2335                 if (have_flag(flgs, TR_FAST_DIGEST)) creature_ptr->cursed |= TRC_FAST_DIGEST;
2336                 if (have_flag(flgs, TR_SLOW_REGEN))  creature_ptr->cursed |= TRC_SLOW_REGEN;
2337                 if (have_flag(flgs, TR_DEC_MANA))    creature_ptr->dec_mana = TRUE;
2338                 if (have_flag(flgs, TR_BLESSED))     creature_ptr->bless_blade = TRUE;
2339                 if (have_flag(flgs, TR_XTRA_MIGHT))  creature_ptr->xtra_might = TRUE;
2340                 if (have_flag(flgs, TR_SLOW_DIGEST)) creature_ptr->slow_digest = TRUE;
2341                 if (have_flag(flgs, TR_REGEN))       creature_ptr->regenerate = TRUE;
2342                 if (have_flag(flgs, TR_TELEPATHY))   creature_ptr->telepathy = TRUE;
2343                 if (have_flag(flgs, TR_ESP_ANIMAL))  creature_ptr->esp_animal = TRUE;
2344                 if (have_flag(flgs, TR_ESP_UNDEAD))  creature_ptr->esp_undead = TRUE;
2345                 if (have_flag(flgs, TR_ESP_DEMON))   creature_ptr->esp_demon = TRUE;
2346                 if (have_flag(flgs, TR_ESP_ORC))     creature_ptr->esp_orc = TRUE;
2347                 if (have_flag(flgs, TR_ESP_TROLL))   creature_ptr->esp_troll = TRUE;
2348                 if (have_flag(flgs, TR_ESP_GIANT))   creature_ptr->esp_giant = TRUE;
2349                 if (have_flag(flgs, TR_ESP_DRAGON))  creature_ptr->esp_dragon = TRUE;
2350                 if (have_flag(flgs, TR_ESP_HUMAN))   creature_ptr->esp_human = TRUE;
2351                 if (have_flag(flgs, TR_ESP_EVIL))    creature_ptr->esp_evil = TRUE;
2352                 if (have_flag(flgs, TR_ESP_GOOD))    creature_ptr->esp_good = TRUE;
2353                 if (have_flag(flgs, TR_ESP_NONLIVING)) creature_ptr->esp_nonliving = TRUE;
2354                 if (have_flag(flgs, TR_ESP_UNIQUE))  creature_ptr->esp_unique = TRUE;
2355
2356                 if (have_flag(flgs, TR_SEE_INVIS))   creature_ptr->see_inv = TRUE;
2357                 if (have_flag(flgs, TR_LEVITATION))     creature_ptr->levitation = TRUE;
2358                 if (have_flag(flgs, TR_FREE_ACT))    creature_ptr->free_act = TRUE;
2359                 if (have_flag(flgs, TR_HOLD_EXP))   creature_ptr->hold_exp = TRUE;
2360                 if (have_flag(flgs, TR_WARNING)) {
2361                         if (!o_ptr->inscription || !(my_strchr(quark_str(o_ptr->inscription), '$')))
2362                                 creature_ptr->warning = TRUE;
2363                 }
2364
2365                 if (have_flag(flgs, TR_TELEPORT))
2366                 {
2367                         if (object_is_cursed(o_ptr)) creature_ptr->cursed |= TRC_TELEPORT;
2368                         else
2369                         {
2370                                 concptr insc = quark_str(o_ptr->inscription);
2371
2372                                 if (o_ptr->inscription && my_strchr(insc, '.'))
2373                                 {
2374                                         /*
2375                                          * {.} will stop random teleportation.
2376                                          */
2377                                 }
2378                                 else
2379                                 {
2380                                         /* Controlled random teleportation */
2381                                         creature_ptr->cursed |= TRC_TELEPORT_SELF;
2382                                 }
2383                         }
2384                 }
2385
2386                 /* Immunity flags */
2387                 if (have_flag(flgs, TR_IM_FIRE)) creature_ptr->immune_fire = TRUE;
2388                 if (have_flag(flgs, TR_IM_ACID)) creature_ptr->immune_acid = TRUE;
2389                 if (have_flag(flgs, TR_IM_COLD)) creature_ptr->immune_cold = TRUE;
2390                 if (have_flag(flgs, TR_IM_ELEC)) creature_ptr->immune_elec = TRUE;
2391
2392                 /* Resistance flags */
2393                 if (have_flag(flgs, TR_RES_ACID))   creature_ptr->resist_acid = TRUE;
2394                 if (have_flag(flgs, TR_RES_ELEC))   creature_ptr->resist_elec = TRUE;
2395                 if (have_flag(flgs, TR_RES_FIRE))   creature_ptr->resist_fire = TRUE;
2396                 if (have_flag(flgs, TR_RES_COLD))   creature_ptr->resist_cold = TRUE;
2397                 if (have_flag(flgs, TR_RES_POIS))   creature_ptr->resist_pois = TRUE;
2398                 if (have_flag(flgs, TR_RES_FEAR))   creature_ptr->resist_fear = TRUE;
2399                 if (have_flag(flgs, TR_RES_CONF))   creature_ptr->resist_conf = TRUE;
2400                 if (have_flag(flgs, TR_RES_SOUND))  creature_ptr->resist_sound = TRUE;
2401                 if (have_flag(flgs, TR_RES_LITE))   creature_ptr->resist_lite = TRUE;
2402                 if (have_flag(flgs, TR_RES_DARK))   creature_ptr->resist_dark = TRUE;
2403                 if (have_flag(flgs, TR_RES_CHAOS))  creature_ptr->resist_chaos = TRUE;
2404                 if (have_flag(flgs, TR_RES_DISEN))  creature_ptr->resist_disen = TRUE;
2405                 if (have_flag(flgs, TR_RES_SHARDS)) creature_ptr->resist_shard = TRUE;
2406                 if (have_flag(flgs, TR_RES_NEXUS))  creature_ptr->resist_nexus = TRUE;
2407                 if (have_flag(flgs, TR_RES_BLIND))  creature_ptr->resist_blind = TRUE;
2408                 if (have_flag(flgs, TR_RES_NETHER)) creature_ptr->resist_neth = TRUE;
2409
2410                 if (have_flag(flgs, TR_REFLECT))  creature_ptr->reflect = TRUE;
2411                 if (have_flag(flgs, TR_SH_FIRE))  creature_ptr->sh_fire = TRUE;
2412                 if (have_flag(flgs, TR_SH_ELEC))  creature_ptr->sh_elec = TRUE;
2413                 if (have_flag(flgs, TR_SH_COLD))  creature_ptr->sh_cold = TRUE;
2414                 if (have_flag(flgs, TR_NO_MAGIC)) creature_ptr->anti_magic = TRUE;
2415                 if (have_flag(flgs, TR_NO_TELE))  creature_ptr->anti_tele = TRUE;
2416
2417                 /* Sustain flags */
2418                 if (have_flag(flgs, TR_SUST_STR)) creature_ptr->sustain_str = TRUE;
2419                 if (have_flag(flgs, TR_SUST_INT)) creature_ptr->sustain_int = TRUE;
2420                 if (have_flag(flgs, TR_SUST_WIS)) creature_ptr->sustain_wis = TRUE;
2421                 if (have_flag(flgs, TR_SUST_DEX)) creature_ptr->sustain_dex = TRUE;
2422                 if (have_flag(flgs, TR_SUST_CON)) creature_ptr->sustain_con = TRUE;
2423                 if (have_flag(flgs, TR_SUST_CHR)) creature_ptr->sustain_chr = TRUE;
2424
2425                 if (o_ptr->name2 == EGO_YOIYAMI) yoiyami = TRUE;
2426                 if (o_ptr->name2 == EGO_2WEAPON) easy_2weapon = TRUE;
2427                 if (o_ptr->name2 == EGO_RING_RES_TIME) creature_ptr->resist_time = TRUE;
2428                 if (o_ptr->name2 == EGO_RING_THROW) creature_ptr->mighty_throw = TRUE;
2429                 if (have_flag(flgs, TR_EASY_SPELL)) creature_ptr->easy_spell = TRUE;
2430                 if (o_ptr->name2 == EGO_AMU_FOOL) creature_ptr->heavy_spell = TRUE;
2431                 if (o_ptr->name2 == EGO_AMU_NAIVETY) down_saving = TRUE;
2432
2433                 if (o_ptr->curse_flags & TRC_LOW_MAGIC)
2434                 {
2435                         if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
2436                         {
2437                                 creature_ptr->to_m_chance += 10;
2438                         }
2439                         else
2440                         {
2441                                 creature_ptr->to_m_chance += 3;
2442                         }
2443                 }
2444
2445                 if (o_ptr->tval == TV_CAPTURE) continue;
2446
2447                 /* Modify the base armor class */
2448                 creature_ptr->ac += o_ptr->ac;
2449
2450                 /* The base armor class is always known */
2451                 creature_ptr->dis_ac += o_ptr->ac;
2452
2453                 /* Apply the bonuses to armor class */
2454                 creature_ptr->to_a += o_ptr->to_a;
2455
2456                 /* Apply the mental bonuses to armor class, if known */
2457                 if (object_is_known(o_ptr)) creature_ptr->dis_to_a += o_ptr->to_a;
2458
2459                 if (o_ptr->curse_flags & TRC_LOW_MELEE)
2460                 {
2461                         int slot = i - INVEN_RARM;
2462                         if (slot < 2)
2463                         {
2464                                 if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
2465                                 {
2466                                         creature_ptr->to_h[slot] -= 15;
2467                                         if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_h[slot] -= 15;
2468                                 }
2469                                 else
2470                                 {
2471                                         creature_ptr->to_h[slot] -= 5;
2472                                         if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_h[slot] -= 5;
2473                                 }
2474                         }
2475                         else
2476                         {
2477                                 if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
2478                                 {
2479                                         creature_ptr->to_h_b -= 15;
2480                                         if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_h_b -= 15;
2481                                 }
2482                                 else
2483                                 {
2484                                         creature_ptr->to_h_b -= 5;
2485                                         if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_h_b -= 5;
2486                                 }
2487                         }
2488                 }
2489
2490                 if (o_ptr->curse_flags & TRC_LOW_AC)
2491                 {
2492                         if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
2493                         {
2494                                 creature_ptr->to_a -= 30;
2495                                 if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_a -= 30;
2496                         }
2497                         else
2498                         {
2499                                 creature_ptr->to_a -= 10;
2500                                 if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_a -= 10;
2501                         }
2502                 }
2503
2504                 /* Hack -- do not apply "weapon" bonuses */
2505                 if (i == INVEN_RARM && has_melee_weapon(creature_ptr, i)) continue;
2506                 if (i == INVEN_LARM && has_melee_weapon(creature_ptr, i)) continue;
2507
2508                 /* Hack -- do not apply "bow" bonuses */
2509                 if (i == INVEN_BOW) continue;
2510
2511                 bonus_to_h = o_ptr->to_h;
2512                 bonus_to_d = o_ptr->to_d;
2513
2514                 if (creature_ptr->pclass == CLASS_NINJA)
2515                 {
2516                         if (o_ptr->to_h > 0) bonus_to_h = (o_ptr->to_h + 1) / 2;
2517                         if (o_ptr->to_d > 0) bonus_to_d = (o_ptr->to_d + 1) / 2;
2518                 }
2519
2520                 /* To Bow and Natural attack */
2521
2522                 /* Apply the bonuses to hit/damage */
2523                 creature_ptr->to_h_b += (s16b)bonus_to_h;
2524                 creature_ptr->to_h_m += (s16b)bonus_to_h;
2525                 creature_ptr->to_d_m += (s16b)bonus_to_d;
2526
2527                 /* Apply the mental bonuses tp hit/damage, if known */
2528                 if (object_is_known(o_ptr)) creature_ptr->dis_to_h_b += (s16b)bonus_to_h;
2529
2530                 /* To Melee */
2531                 if ((i == INVEN_LEFT || i == INVEN_RIGHT) && !creature_ptr->ryoute)
2532                 {
2533                         /* Apply the bonuses to hit/damage */
2534                         creature_ptr->to_h[i - INVEN_RIGHT] += (s16b)bonus_to_h;
2535                         creature_ptr->to_d[i - INVEN_RIGHT] += (s16b)bonus_to_d;
2536
2537                         /* Apply the mental bonuses tp hit/damage, if known */
2538                         if (object_is_known(o_ptr))
2539                         {
2540                                 creature_ptr->dis_to_h[i - INVEN_RIGHT] += (s16b)bonus_to_h;
2541                                 creature_ptr->dis_to_d[i - INVEN_RIGHT] += (s16b)bonus_to_d;
2542                         }
2543                 }
2544                 else if (creature_ptr->migite && creature_ptr->hidarite)
2545                 {
2546                         /* Apply the bonuses to hit/damage */
2547                         creature_ptr->to_h[0] += (bonus_to_h > 0) ? (bonus_to_h + 1) / 2 : bonus_to_h;
2548                         creature_ptr->to_h[1] += (bonus_to_h > 0) ? bonus_to_h / 2 : bonus_to_h;
2549                         creature_ptr->to_d[0] += (bonus_to_d > 0) ? (bonus_to_d + 1) / 2 : bonus_to_d;
2550                         creature_ptr->to_d[1] += (bonus_to_d > 0) ? bonus_to_d / 2 : bonus_to_d;
2551
2552                         /* Apply the mental bonuses tp hit/damage, if known */
2553                         if (object_is_known(o_ptr))
2554                         {
2555                                 creature_ptr->dis_to_h[0] += (bonus_to_h > 0) ? (bonus_to_h + 1) / 2 : bonus_to_h;
2556                                 creature_ptr->dis_to_h[1] += (bonus_to_h > 0) ? bonus_to_h / 2 : bonus_to_h;
2557                                 creature_ptr->dis_to_d[0] += (bonus_to_d > 0) ? (bonus_to_d + 1) / 2 : bonus_to_d;
2558                                 creature_ptr->dis_to_d[1] += (bonus_to_d > 0) ? bonus_to_d / 2 : bonus_to_d;
2559                         }
2560                 }
2561                 else
2562                 {
2563                         /* Apply the bonuses to hit/damage */
2564                         creature_ptr->to_h[default_hand] += (s16b)bonus_to_h;
2565                         creature_ptr->to_d[default_hand] += (s16b)bonus_to_d;
2566
2567                         /* Apply the mental bonuses to hit/damage, if known */
2568                         if (object_is_known(o_ptr))
2569                         {
2570                                 creature_ptr->dis_to_h[default_hand] += (s16b)bonus_to_h;
2571                                 creature_ptr->dis_to_d[default_hand] += (s16b)bonus_to_d;
2572                         }
2573                 }
2574         }
2575
2576         /* Shield skill bonus */
2577         if (object_is_armour(&creature_ptr->inventory_list[INVEN_RARM]) || object_is_armour(&creature_ptr->inventory_list[INVEN_LARM]))
2578         {
2579                 creature_ptr->ac += creature_ptr->skill_exp[GINOU_SHIELD] * (1 + creature_ptr->lev / 22) / 2000;
2580                 creature_ptr->dis_ac += creature_ptr->skill_exp[GINOU_SHIELD] * (1 + creature_ptr->lev / 22) / 2000;
2581         }
2582
2583         if (old_mighty_throw != creature_ptr->mighty_throw)
2584         {
2585                 /* Redraw average damege display of Shuriken */
2586                 creature_ptr->window |= PW_INVEN;
2587         }
2588
2589         if (creature_ptr->cursed & TRC_TELEPORT) creature_ptr->cursed &= ~(TRC_TELEPORT_SELF);
2590
2591         /* Monks get extra ac for armour _not worn_ */
2592         if (((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER)) && !heavy_armor(creature_ptr))
2593         {
2594                 if (!(creature_ptr->inventory_list[INVEN_BODY].k_idx))
2595                 {
2596                         creature_ptr->to_a += (creature_ptr->lev * 3) / 2;
2597                         creature_ptr->dis_to_a += (creature_ptr->lev * 3) / 2;
2598                 }
2599                 if (!(creature_ptr->inventory_list[INVEN_OUTER].k_idx) && (creature_ptr->lev > 15))
2600                 {
2601                         creature_ptr->to_a += ((creature_ptr->lev - 13) / 3);
2602                         creature_ptr->dis_to_a += ((creature_ptr->lev - 13) / 3);
2603                 }
2604                 if (!(creature_ptr->inventory_list[INVEN_LARM].k_idx) && (creature_ptr->lev > 10))
2605                 {
2606                         creature_ptr->to_a += ((creature_ptr->lev - 8) / 3);
2607                         creature_ptr->dis_to_a += ((creature_ptr->lev - 8) / 3);
2608                 }
2609                 if (!(creature_ptr->inventory_list[INVEN_HEAD].k_idx) && (creature_ptr->lev > 4))
2610                 {
2611                         creature_ptr->to_a += (creature_ptr->lev - 2) / 3;
2612                         creature_ptr->dis_to_a += (creature_ptr->lev - 2) / 3;
2613                 }
2614                 if (!(creature_ptr->inventory_list[INVEN_HANDS].k_idx))
2615                 {
2616                         creature_ptr->to_a += (creature_ptr->lev / 2);
2617                         creature_ptr->dis_to_a += (creature_ptr->lev / 2);
2618                 }
2619                 if (!(creature_ptr->inventory_list[INVEN_FEET].k_idx))
2620                 {
2621                         creature_ptr->to_a += (creature_ptr->lev / 3);
2622                         creature_ptr->dis_to_a += (creature_ptr->lev / 3);
2623                 }
2624                 if (creature_ptr->special_defense & KAMAE_BYAKKO)
2625                 {
2626                         creature_ptr->stat_add[A_STR] += 2;
2627                         creature_ptr->stat_add[A_DEX] += 2;
2628                         creature_ptr->stat_add[A_CON] -= 3;
2629                 }
2630                 else if (creature_ptr->special_defense & KAMAE_SEIRYU)
2631                 {
2632                 }
2633                 else if (creature_ptr->special_defense & KAMAE_GENBU)
2634                 {
2635                         creature_ptr->stat_add[A_INT] -= 1;
2636                         creature_ptr->stat_add[A_WIS] -= 1;
2637                         creature_ptr->stat_add[A_DEX] -= 2;
2638                         creature_ptr->stat_add[A_CON] += 3;
2639                 }
2640                 else if (creature_ptr->special_defense & KAMAE_SUZAKU)
2641                 {
2642                         creature_ptr->stat_add[A_STR] -= 2;
2643                         creature_ptr->stat_add[A_INT] += 1;
2644                         creature_ptr->stat_add[A_WIS] += 1;
2645                         creature_ptr->stat_add[A_DEX] += 2;
2646                         creature_ptr->stat_add[A_CON] -= 2;
2647                 }
2648         }
2649
2650         if (creature_ptr->special_defense & KATA_KOUKIJIN)
2651         {
2652                 for (i = 0; i < A_MAX; i++)
2653                         creature_ptr->stat_add[i] += 5;
2654                 creature_ptr->to_a -= 50;
2655                 creature_ptr->dis_to_a -= 50;
2656         }
2657
2658         /* Hack -- aura of fire also provides light */
2659         if (creature_ptr->sh_fire) creature_ptr->lite = TRUE;
2660
2661         /* Golems also get an intrinsic AC bonus */
2662         if (PRACE_IS_(creature_ptr, RACE_GOLEM) || PRACE_IS_(creature_ptr, RACE_ANDROID))
2663         {
2664                 creature_ptr->to_a += 10 + (creature_ptr->lev * 2 / 5);
2665                 creature_ptr->dis_to_a += 10 + (creature_ptr->lev * 2 / 5);
2666         }
2667
2668         /* Hex bonuses */
2669         if (creature_ptr->realm1 == REALM_HEX)
2670         {
2671                 if (hex_spelling_any(creature_ptr)) creature_ptr->skill_stl -= (1 + CASTING_HEX_NUM(creature_ptr));
2672                 if (hex_spelling(HEX_DETECT_EVIL)) creature_ptr->esp_evil = TRUE;
2673                 if (hex_spelling(HEX_XTRA_MIGHT)) creature_ptr->stat_add[A_STR] += 4;
2674                 if (hex_spelling(HEX_BUILDING))
2675                 {
2676                         creature_ptr->stat_add[A_STR] += 4;
2677                         creature_ptr->stat_add[A_DEX] += 4;
2678                         creature_ptr->stat_add[A_CON] += 4;
2679                 }
2680                 if (hex_spelling(HEX_DEMON_AURA))
2681                 {
2682                         creature_ptr->sh_fire = TRUE;
2683                         creature_ptr->regenerate = TRUE;
2684                 }
2685                 if (hex_spelling(HEX_ICE_ARMOR))
2686                 {
2687                         creature_ptr->sh_cold = TRUE;
2688                         creature_ptr->to_a += 30;
2689                         creature_ptr->dis_to_a += 30;
2690                 }
2691                 if (hex_spelling(HEX_SHOCK_CLOAK))
2692                 {
2693                         creature_ptr->sh_elec = TRUE;
2694                         new_speed += 3;
2695                 }
2696                 for (i = INVEN_RARM; i <= INVEN_FEET; i++)
2697                 {
2698                         ARMOUR_CLASS ac = 0;
2699                         o_ptr = &creature_ptr->inventory_list[i];
2700                         if (!o_ptr->k_idx) continue;
2701                         if (!object_is_armour(o_ptr)) continue;
2702                         if (!object_is_cursed(o_ptr)) continue;
2703                         ac += 5;
2704                         if (o_ptr->curse_flags & TRC_HEAVY_CURSE) ac += 7;
2705                         if (o_ptr->curse_flags & TRC_PERMA_CURSE) ac += 13;
2706                         creature_ptr->to_a += (s16b)ac;
2707                         creature_ptr->dis_to_a += (s16b)ac;
2708                 }
2709         }
2710
2711         /* Calculate stats */
2712         for (i = 0; i < A_MAX; i++)
2713         {
2714                 int top, use, ind;
2715
2716                 /* Extract the new "stat_use" value for the stat */
2717                 top = modify_stat_value(creature_ptr->stat_max[i], creature_ptr->stat_add[i]);
2718
2719                 /* Notice changes */
2720                 if (creature_ptr->stat_top[i] != top)
2721                 {
2722                         /* Save the new value */
2723                         creature_ptr->stat_top[i] = (s16b)top;
2724                         creature_ptr->redraw |= (PR_STATS);
2725                         creature_ptr->window |= (PW_PLAYER);
2726                 }
2727
2728
2729                 /* Extract the new "stat_use" value for the stat */
2730                 use = modify_stat_value(creature_ptr->stat_cur[i], creature_ptr->stat_add[i]);
2731
2732                 if ((i == A_CHR) && (creature_ptr->muta3 & MUT3_ILL_NORM))
2733                 {
2734                         /* 10 to 18/90 charisma, guaranteed, based on level */
2735                         if (use < 8 + 2 * creature_ptr->lev)
2736                         {
2737                                 use = 8 + 2 * creature_ptr->lev;
2738                         }
2739                 }
2740
2741                 /* Notice changes */
2742                 if (creature_ptr->stat_use[i] != use)
2743                 {
2744                         /* Save the new value */
2745                         creature_ptr->stat_use[i] = (s16b)use;
2746                         creature_ptr->redraw |= (PR_STATS);
2747                         creature_ptr->window |= (PW_PLAYER);
2748                 }
2749
2750
2751                 /* Values: 3, 4, ..., 17 */
2752                 if (use <= 18) ind = (use - 3);
2753
2754                 /* Ranges: 18/00-18/09, ..., 18/210-18/219 */
2755                 else if (use <= 18 + 219) ind = (15 + (use - 18) / 10);
2756
2757                 /* Range: 18/220+ */
2758                 else ind = (37);
2759
2760                 /* Notice changes */
2761                 if (creature_ptr->stat_ind[i] != ind)
2762                 {
2763                         /* Save the new index */
2764                         creature_ptr->stat_ind[i] = (s16b)ind;
2765
2766                         /* Change in CON affects Hitpoints */
2767                         if (i == A_CON)
2768                         {
2769                                 creature_ptr->update |= (PU_HP);
2770                         }
2771
2772                         /* Change in INT may affect Mana/Spells */
2773                         else if (i == A_INT)
2774                         {
2775                                 if (mp_ptr->spell_stat == A_INT)
2776                                 {
2777                                         creature_ptr->update |= (PU_MANA | PU_SPELLS);
2778                                 }
2779                         }
2780
2781                         /* Change in WIS may affect Mana/Spells */
2782                         else if (i == A_WIS)
2783                         {
2784                                 if (mp_ptr->spell_stat == A_WIS)
2785                                 {
2786                                         creature_ptr->update |= (PU_MANA | PU_SPELLS);
2787                                 }
2788                         }
2789
2790                         /* Change in WIS may affect Mana/Spells */
2791                         else if (i == A_CHR)
2792                         {
2793                                 if (mp_ptr->spell_stat == A_CHR)
2794                                 {
2795                                         creature_ptr->update |= (PU_MANA | PU_SPELLS);
2796                                 }
2797                         }
2798
2799                         creature_ptr->window |= (PW_PLAYER);
2800                 }
2801         }
2802
2803         /* Apply temporary "stun" */
2804         if (creature_ptr->stun > 50)
2805         {
2806                 creature_ptr->to_h[0] -= 20;
2807                 creature_ptr->to_h[1] -= 20;
2808                 creature_ptr->to_h_b -= 20;
2809                 creature_ptr->to_h_m -= 20;
2810                 creature_ptr->dis_to_h[0] -= 20;
2811                 creature_ptr->dis_to_h[1] -= 20;
2812                 creature_ptr->dis_to_h_b -= 20;
2813                 creature_ptr->to_d[0] -= 20;
2814                 creature_ptr->to_d[1] -= 20;
2815                 creature_ptr->to_d_m -= 20;
2816                 creature_ptr->dis_to_d[0] -= 20;
2817                 creature_ptr->dis_to_d[1] -= 20;
2818         }
2819         else if (creature_ptr->stun)
2820         {
2821                 creature_ptr->to_h[0] -= 5;
2822                 creature_ptr->to_h[1] -= 5;
2823                 creature_ptr->to_h_b -= 5;
2824                 creature_ptr->to_h_m -= 5;
2825                 creature_ptr->dis_to_h[0] -= 5;
2826                 creature_ptr->dis_to_h[1] -= 5;
2827                 creature_ptr->dis_to_h_b -= 5;
2828                 creature_ptr->to_d[0] -= 5;
2829                 creature_ptr->to_d[1] -= 5;
2830                 creature_ptr->to_d_m -= 5;
2831                 creature_ptr->dis_to_d[0] -= 5;
2832                 creature_ptr->dis_to_d[1] -= 5;
2833         }
2834
2835         /* Wraith form */
2836         if (creature_ptr->wraith_form)
2837         {
2838                 creature_ptr->reflect = TRUE;
2839                 creature_ptr->pass_wall = TRUE;
2840         }
2841
2842         if (creature_ptr->kabenuke)
2843         {
2844                 creature_ptr->pass_wall = TRUE;
2845         }
2846
2847         /* Temporary blessing */
2848         if (is_blessed(creature_ptr))
2849         {
2850                 creature_ptr->to_a += 5;
2851                 creature_ptr->dis_to_a += 5;
2852                 creature_ptr->to_h[0] += 10;
2853                 creature_ptr->to_h[1] += 10;
2854                 creature_ptr->to_h_b += 10;
2855                 creature_ptr->to_h_m += 10;
2856                 creature_ptr->dis_to_h[0] += 10;
2857                 creature_ptr->dis_to_h[1] += 10;
2858                 creature_ptr->dis_to_h_b += 10;
2859         }
2860
2861         if (creature_ptr->magicdef)
2862         {
2863                 creature_ptr->resist_blind = TRUE;
2864                 creature_ptr->resist_conf = TRUE;
2865                 creature_ptr->reflect = TRUE;
2866                 creature_ptr->free_act = TRUE;
2867                 creature_ptr->levitation = TRUE;
2868         }
2869
2870         /* Temporary "Hero" */
2871         if (IS_HERO(creature_ptr))
2872         {
2873                 creature_ptr->to_h[0] += 12;
2874                 creature_ptr->to_h[1] += 12;
2875                 creature_ptr->to_h_b += 12;
2876                 creature_ptr->to_h_m += 12;
2877                 creature_ptr->dis_to_h[0] += 12;
2878                 creature_ptr->dis_to_h[1] += 12;
2879                 creature_ptr->dis_to_h_b += 12;
2880         }
2881
2882         /* Temporary "Beserk" */
2883         if (creature_ptr->shero)
2884         {
2885                 creature_ptr->to_h[0] += 12;
2886                 creature_ptr->to_h[1] += 12;
2887                 creature_ptr->to_h_b -= 12;
2888                 creature_ptr->to_h_m += 12;
2889                 creature_ptr->to_d[0] += 3 + (creature_ptr->lev / 5);
2890                 creature_ptr->to_d[1] += 3 + (creature_ptr->lev / 5);
2891                 creature_ptr->to_d_m += 3 + (creature_ptr->lev / 5);
2892                 creature_ptr->dis_to_h[0] += 12;
2893                 creature_ptr->dis_to_h[1] += 12;
2894                 creature_ptr->dis_to_h_b -= 12;
2895                 creature_ptr->dis_to_d[0] += 3 + (creature_ptr->lev / 5);
2896                 creature_ptr->dis_to_d[1] += 3 + (creature_ptr->lev / 5);
2897                 creature_ptr->to_a -= 10;
2898                 creature_ptr->dis_to_a -= 10;
2899                 creature_ptr->skill_stl -= 7;
2900                 creature_ptr->skill_dev -= 20;
2901                 creature_ptr->skill_sav -= 30;
2902                 creature_ptr->skill_srh -= 15;
2903                 creature_ptr->skill_fos -= 15;
2904                 creature_ptr->skill_tht -= 20;
2905                 creature_ptr->skill_dig += 30;
2906         }
2907
2908         /* Temporary "fast" */
2909         if (IS_FAST(creature_ptr))
2910         {
2911                 new_speed += 10;
2912         }
2913
2914         /* Temporary "slow" */
2915         if (creature_ptr->slow)
2916         {
2917                 new_speed -= 10;
2918         }
2919
2920         /* Temporary "telepathy" */
2921         if (is_time_limit_esp(creature_ptr))
2922         {
2923                 creature_ptr->telepathy = TRUE;
2924         }
2925
2926         if (creature_ptr->ele_immune)
2927         {
2928                 if (creature_ptr->special_defense & DEFENSE_ACID)
2929                         creature_ptr->immune_acid = TRUE;
2930                 else if (creature_ptr->special_defense & DEFENSE_ELEC)
2931                         creature_ptr->immune_elec = TRUE;
2932                 else if (creature_ptr->special_defense & DEFENSE_FIRE)
2933                         creature_ptr->immune_fire = TRUE;
2934                 else if (creature_ptr->special_defense & DEFENSE_COLD)
2935                         creature_ptr->immune_cold = TRUE;
2936         }
2937
2938         /* Temporary see invisible */
2939         if (creature_ptr->tim_invis)
2940         {
2941                 creature_ptr->see_inv = TRUE;
2942         }
2943
2944         /* Temporary infravision boost */
2945         if (creature_ptr->tim_infra)
2946         {
2947                 creature_ptr->see_infra += 3;
2948         }
2949
2950         /* Temporary regeneration boost */
2951         if (creature_ptr->tim_regen)
2952         {
2953                 creature_ptr->regenerate = TRUE;
2954         }
2955
2956         /* Temporary levitation */
2957         if (creature_ptr->tim_levitation)
2958         {
2959                 creature_ptr->levitation = TRUE;
2960         }
2961
2962         /* Temporary reflection */
2963         if (creature_ptr->tim_reflect)
2964         {
2965                 creature_ptr->reflect = TRUE;
2966         }
2967
2968         /* Hack -- Hero/Shero -> Res fear */
2969         if (IS_HERO(creature_ptr) || creature_ptr->shero)
2970         {
2971                 creature_ptr->resist_fear = TRUE;
2972         }
2973
2974         /* Hack -- Telepathy Change */
2975         if (creature_ptr->telepathy != old_telepathy)
2976         {
2977                 creature_ptr->update |= (PU_MONSTERS);
2978         }
2979
2980         if ((creature_ptr->esp_animal != old_esp_animal) ||
2981                 (creature_ptr->esp_undead != old_esp_undead) ||
2982                 (creature_ptr->esp_demon != old_esp_demon) ||
2983                 (creature_ptr->esp_orc != old_esp_orc) ||
2984                 (creature_ptr->esp_troll != old_esp_troll) ||
2985                 (creature_ptr->esp_giant != old_esp_giant) ||
2986                 (creature_ptr->esp_dragon != old_esp_dragon) ||
2987                 (creature_ptr->esp_human != old_esp_human) ||
2988                 (creature_ptr->esp_evil != old_esp_evil) ||
2989                 (creature_ptr->esp_good != old_esp_good) ||
2990                 (creature_ptr->esp_nonliving != old_esp_nonliving) ||
2991                 (creature_ptr->esp_unique != old_esp_unique))
2992         {
2993                 creature_ptr->update |= (PU_MONSTERS);
2994         }
2995
2996         /* Hack -- See Invis Change */
2997         if (creature_ptr->see_inv != old_see_inv)
2998         {
2999                 creature_ptr->update |= (PU_MONSTERS);
3000         }
3001
3002         /* Bloating slows the player down (a little) */
3003         if (creature_ptr->food >= PY_FOOD_MAX) new_speed -= 10;
3004
3005         if (creature_ptr->special_defense & KAMAE_SUZAKU) new_speed += 10;
3006
3007         if ((creature_ptr->migite && (empty_hands_status & EMPTY_HAND_RARM)) ||
3008                 (creature_ptr->hidarite && (empty_hands_status & EMPTY_HAND_LARM)))
3009         {
3010                 creature_ptr->to_h[default_hand] += (creature_ptr->skill_exp[GINOU_SUDE] - WEAPON_EXP_BEGINNER) / 200;
3011                 creature_ptr->dis_to_h[default_hand] += (creature_ptr->skill_exp[GINOU_SUDE] - WEAPON_EXP_BEGINNER) / 200;
3012         }
3013
3014         if (has_melee_weapon(creature_ptr, INVEN_RARM) && has_melee_weapon(creature_ptr, INVEN_LARM))
3015         {
3016                 int penalty1, penalty2;
3017                 penalty1 = ((100 - creature_ptr->skill_exp[GINOU_NITOURYU] / 160) - (130 - creature_ptr->inventory_list[INVEN_RARM].weight) / 8);
3018                 penalty2 = ((100 - creature_ptr->skill_exp[GINOU_NITOURYU] / 160) - (130 - creature_ptr->inventory_list[INVEN_LARM].weight) / 8);
3019                 if ((creature_ptr->inventory_list[INVEN_RARM].name1 == ART_QUICKTHORN) && (creature_ptr->inventory_list[INVEN_LARM].name1 == ART_TINYTHORN))
3020                 {
3021                         penalty1 = penalty1 / 2 - 5;
3022                         penalty2 = penalty2 / 2 - 5;
3023                         new_speed += 7;
3024                         creature_ptr->to_a += 10;
3025                         creature_ptr->dis_to_a += 10;
3026                 }
3027                 if (easy_2weapon)
3028                 {
3029                         if (penalty1 > 0) penalty1 /= 2;
3030                         if (penalty2 > 0) penalty2 /= 2;
3031                 }
3032                 else if ((creature_ptr->inventory_list[INVEN_LARM].tval == TV_SWORD) && ((creature_ptr->inventory_list[INVEN_LARM].sval == SV_MAIN_GAUCHE) || (creature_ptr->inventory_list[INVEN_LARM].sval == SV_WAKIZASHI)))
3033                 {
3034                         penalty1 = MAX(0, penalty1 - 10);
3035                         penalty2 = MAX(0, penalty2 - 10);
3036                 }
3037                 if ((creature_ptr->inventory_list[INVEN_RARM].name1 == ART_MUSASI_KATANA) && (creature_ptr->inventory_list[INVEN_LARM].name1 == ART_MUSASI_WAKIZASI))
3038                 {
3039                         penalty1 = MIN(0, penalty1);
3040                         penalty2 = MIN(0, penalty2);
3041                         creature_ptr->to_a += 10;
3042                         creature_ptr->dis_to_a += 10;
3043                 }
3044                 else
3045                 {
3046                         if ((creature_ptr->inventory_list[INVEN_RARM].name1 == ART_MUSASI_KATANA) && (penalty1 > 0))
3047                                 penalty1 /= 2;
3048                         if ((creature_ptr->inventory_list[INVEN_LARM].name1 == ART_MUSASI_WAKIZASI) && (penalty2 > 0))
3049                                 penalty2 /= 2;
3050                 }
3051                 if (creature_ptr->inventory_list[INVEN_RARM].tval == TV_POLEARM) penalty1 += 10;
3052                 if (creature_ptr->inventory_list[INVEN_LARM].tval == TV_POLEARM) penalty2 += 10;
3053                 creature_ptr->to_h[0] -= (s16b)penalty1;
3054                 creature_ptr->to_h[1] -= (s16b)penalty2;
3055                 creature_ptr->dis_to_h[0] -= (s16b)penalty1;
3056                 creature_ptr->dis_to_h[1] -= (s16b)penalty2;
3057         }
3058
3059         /* Extract the current weight (in tenth pounds) */
3060         j = creature_ptr->total_weight;
3061
3062         if (!creature_ptr->riding)
3063         {
3064                 /* Extract the "weight limit" (in tenth pounds) */
3065                 i = (int)weight_limit(creature_ptr);
3066         }
3067         else
3068         {
3069                 monster_type *riding_m_ptr = &floor_ptr->m_list[creature_ptr->riding];
3070                 monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
3071                 SPEED speed = riding_m_ptr->mspeed;
3072
3073                 if (riding_m_ptr->mspeed > 110)
3074                 {
3075                         new_speed = 110 + (s16b)((speed - 110) * (creature_ptr->skill_exp[GINOU_RIDING] * 3 + creature_ptr->lev * 160L - 10000L) / (22000L));
3076                         if (new_speed < 110) new_speed = 110;
3077                 }
3078                 else
3079                 {
3080                         new_speed = speed;
3081                 }
3082                 new_speed += (creature_ptr->skill_exp[GINOU_RIDING] + creature_ptr->lev * 160L) / 3200;
3083                 if (MON_FAST(riding_m_ptr)) new_speed += 10;
3084                 if (MON_SLOW(riding_m_ptr)) new_speed -= 10;
3085                 riding_levitation = (riding_r_ptr->flags7 & RF7_CAN_FLY) ? TRUE : FALSE;
3086                 if (riding_r_ptr->flags7 & (RF7_CAN_SWIM | RF7_AQUATIC)) creature_ptr->can_swim = TRUE;
3087
3088                 if (!(riding_r_ptr->flags2 & RF2_PASS_WALL)) creature_ptr->pass_wall = FALSE;
3089                 if (riding_r_ptr->flags2 & RF2_KILL_WALL) creature_ptr->kill_wall = TRUE;
3090
3091                 if (creature_ptr->skill_exp[GINOU_RIDING] < RIDING_EXP_SKILLED) j += (creature_ptr->wt * 3 * (RIDING_EXP_SKILLED - creature_ptr->skill_exp[GINOU_RIDING])) / RIDING_EXP_SKILLED;
3092
3093                 /* Extract the "weight limit" */
3094                 i = 1500 + riding_r_ptr->level * 25;
3095         }
3096
3097         /* Apply "encumbrance" from weight */
3098         if (j > i) new_speed -= ((j - i) / (i / 5));
3099
3100         /* Searching slows the player down */
3101         if (creature_ptr->action == ACTION_SEARCH) new_speed -= 10;
3102
3103         /* Feature bonus */
3104         if (creature_ptr->prace == RACE_MERFOLK)
3105         {
3106                 if (have_flag(f_ptr->flags, FF_WATER))
3107                 {
3108                         new_speed += (2 + creature_ptr->lev / 10);
3109                 }
3110                 else if (!creature_ptr->levitation)
3111                 {
3112                         new_speed -= 2;
3113                 }
3114         }
3115
3116         /* Actual Modifier Bonuses (Un-inflate stat bonuses) */
3117         creature_ptr->to_a += ((int)(adj_dex_ta[creature_ptr->stat_ind[A_DEX]]) - 128);
3118         creature_ptr->to_d[0] += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3119         creature_ptr->to_d[1] += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3120         creature_ptr->to_d_m += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3121         creature_ptr->to_h[0] += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3122         creature_ptr->to_h[1] += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3123         creature_ptr->to_h_b += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3124         creature_ptr->to_h_m += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3125         creature_ptr->to_h[0] += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3126         creature_ptr->to_h[1] += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3127         creature_ptr->to_h_b += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3128         creature_ptr->to_h_m += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3129
3130         /* Displayed Modifier Bonuses (Un-inflate stat bonuses) */
3131         creature_ptr->dis_to_a += ((int)(adj_dex_ta[creature_ptr->stat_ind[A_DEX]]) - 128);
3132         creature_ptr->dis_to_d[0] += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3133         creature_ptr->dis_to_d[1] += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3134         creature_ptr->dis_to_h[0] += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3135         creature_ptr->dis_to_h[1] += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3136         creature_ptr->dis_to_h_b += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3137         creature_ptr->dis_to_h[0] += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3138         creature_ptr->dis_to_h[1] += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3139         creature_ptr->dis_to_h_b += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3140
3141
3142         /* Obtain the "hold" value */
3143         hold = adj_str_hold[creature_ptr->stat_ind[A_STR]];
3144
3145
3146         /* Examine the "current bow" */
3147         o_ptr = &creature_ptr->inventory_list[INVEN_BOW];
3148
3149         /* It is hard to carholdry a heavy bow */
3150         creature_ptr->heavy_shoot = is_heavy_shoot(creature_ptr, o_ptr);
3151         if (creature_ptr->heavy_shoot)
3152         {
3153                 /* Hard to wield a heavy bow */
3154                 creature_ptr->to_h_b += 2 * (hold - o_ptr->weight / 10);
3155                 creature_ptr->dis_to_h_b += 2 * (hold - o_ptr->weight / 10);
3156         }
3157
3158         /* Compute "extra shots" if needed */
3159         if (o_ptr->k_idx)
3160         {
3161                 creature_ptr->tval_ammo = (byte_hack)bow_tval_ammo(o_ptr);
3162
3163                 /* Apply special flags */
3164                 if (o_ptr->k_idx && !creature_ptr->heavy_shoot)
3165                 {
3166                         /* Extra shots */
3167                         creature_ptr->num_fire = calc_num_fire(creature_ptr, o_ptr);
3168
3169                         /* Snipers love Cross bows */
3170                         if ((creature_ptr->pclass == CLASS_SNIPER) &&
3171                                 (creature_ptr->tval_ammo == TV_BOLT))
3172                         {
3173                                 creature_ptr->to_h_b += (10 + (creature_ptr->lev / 5));
3174                                 creature_ptr->dis_to_h_b += (10 + (creature_ptr->lev / 5));
3175                         }
3176                 }
3177         }
3178
3179         if (creature_ptr->ryoute) hold *= 2;
3180
3181         for (i = 0; i < 2; i++)
3182         {
3183                 /* Examine the "main weapon" */
3184                 o_ptr = &creature_ptr->inventory_list[INVEN_RARM + i];
3185
3186                 object_flags(o_ptr, flgs);
3187
3188                 /* Assume not heavy */
3189                 creature_ptr->heavy_wield[i] = FALSE;
3190                 creature_ptr->icky_wield[i] = FALSE;
3191                 creature_ptr->riding_wield[i] = FALSE;
3192
3193                 if (!has_melee_weapon(creature_ptr, INVEN_RARM + i))
3194                 {
3195                         creature_ptr->num_blow[i] = 1;
3196                         continue;
3197                 }
3198                 /* It is hard to hold a heavy weapon */
3199                 if (hold < o_ptr->weight / 10)
3200                 {
3201                         /* Hard to wield a heavy weapon */
3202                         creature_ptr->to_h[i] += 2 * (hold - o_ptr->weight / 10);
3203                         creature_ptr->dis_to_h[i] += 2 * (hold - o_ptr->weight / 10);
3204
3205                         /* Heavy weapon */
3206                         creature_ptr->heavy_wield[i] = TRUE;
3207                 }
3208                 else if (creature_ptr->ryoute && (hold < o_ptr->weight / 5)) omoi = TRUE;
3209
3210                 if ((i == 1) && (o_ptr->tval == TV_SWORD) && ((o_ptr->sval == SV_MAIN_GAUCHE) || (o_ptr->sval == SV_WAKIZASHI)))
3211                 {
3212                         creature_ptr->to_a += 5;
3213                         creature_ptr->dis_to_a += 5;
3214                 }
3215
3216                 /* Normal weapons */
3217                 if (o_ptr->k_idx && !creature_ptr->heavy_wield[i])
3218                 {
3219                         int str_index, dex_index;
3220
3221                         int num = 0, wgt = 0, mul = 0, div = 0;
3222
3223                         /* Analyze the class */
3224                         switch (creature_ptr->pclass)
3225                         {
3226                         case CLASS_WARRIOR:
3227                                 num = 6; wgt = 70; mul = 5; break;
3228
3229                         case CLASS_BERSERKER:
3230                                 num = 6; wgt = 70; mul = 7; break;
3231
3232                         case CLASS_MAGE:
3233                         case CLASS_HIGH_MAGE:
3234                         case CLASS_BLUE_MAGE:
3235                                 num = 3; wgt = 100; mul = 2; break;
3236
3237                         case CLASS_PRIEST:
3238                         case CLASS_MAGIC_EATER:
3239                         case CLASS_MINDCRAFTER:
3240                                 num = 5; wgt = 100; mul = 3; break;
3241
3242                         case CLASS_ROGUE:
3243                                 num = 5; wgt = 40; mul = 3; break;
3244
3245                         case CLASS_RANGER:
3246                                 num = 5; wgt = 70; mul = 4; break;
3247
3248                         case CLASS_PALADIN:
3249                         case CLASS_SAMURAI:
3250                                 num = 5; wgt = 70; mul = 4; break;
3251
3252                         case CLASS_SMITH:
3253                                 num = 5; wgt = 150; mul = 5; break;
3254
3255                         case CLASS_WARRIOR_MAGE:
3256                         case CLASS_RED_MAGE:
3257                                 num = 5; wgt = 70; mul = 3; break;
3258
3259                         case CLASS_CHAOS_WARRIOR:
3260                                 num = 5; wgt = 70; mul = 4; break;
3261
3262                         case CLASS_MONK:
3263                                 num = 5; wgt = 60; mul = 3; break;
3264
3265                         case CLASS_TOURIST:
3266                                 num = 4; wgt = 100; mul = 3; break;
3267
3268                         case CLASS_IMITATOR:
3269                                 num = 5; wgt = 70; mul = 4; break;
3270
3271                         case CLASS_BEASTMASTER:
3272                                 num = 5; wgt = 70; mul = 3; break;
3273
3274                         case CLASS_CAVALRY:
3275                                 if ((creature_ptr->riding) && (have_flag(flgs, TR_RIDING))) { num = 5; wgt = 70; mul = 4; }
3276                                 else { num = 5; wgt = 100; mul = 3; }
3277                                 break;
3278
3279                         case CLASS_SORCERER:
3280                                 num = 1; wgt = 1; mul = 1; break;
3281
3282                         case CLASS_ARCHER:
3283                         case CLASS_BARD:
3284                         case CLASS_SNIPER:
3285                                 num = 4; wgt = 70; mul = 2; break;
3286
3287                         case CLASS_FORCETRAINER:
3288                                 num = 4; wgt = 60; mul = 2; break;
3289
3290                         case CLASS_MIRROR_MASTER:
3291                                 num = 3; wgt = 100; mul = 3; break;
3292
3293                         case CLASS_NINJA:
3294                                 num = 4; wgt = 20; mul = 1; break;
3295                         }
3296
3297                         /* Hex - extra mights gives +1 bonus to max blows */
3298                         if (hex_spelling(HEX_XTRA_MIGHT) || hex_spelling(HEX_BUILDING)) { num++; wgt /= 2; mul += 2; }
3299
3300                         /* Enforce a minimum "weight" (tenth pounds) */
3301                         div = ((o_ptr->weight < wgt) ? wgt : o_ptr->weight);
3302
3303                         /* Access the strength vs weight */
3304                         str_index = (adj_str_blow[creature_ptr->stat_ind[A_STR]] * mul / div);
3305
3306                         if (creature_ptr->ryoute && !omoi) str_index++;
3307                         if (creature_ptr->pclass == CLASS_NINJA) str_index = MAX(0, str_index - 1);
3308
3309                         /* Maximal value */
3310                         if (str_index > 11) str_index = 11;
3311
3312                         /* Index by dexterity */
3313                         dex_index = (adj_dex_blow[creature_ptr->stat_ind[A_DEX]]);
3314
3315                         /* Maximal value */
3316                         if (dex_index > 11) dex_index = 11;
3317
3318                         /* Use the blows table */
3319                         creature_ptr->num_blow[i] = blows_table[str_index][dex_index];
3320
3321                         /* Maximal value */
3322                         if (creature_ptr->num_blow[i] > num) creature_ptr->num_blow[i] = (s16b)num;
3323
3324                         /* Add in the "bonus blows" */
3325                         creature_ptr->num_blow[i] += (s16b)extra_blows[i];
3326
3327
3328                         if (creature_ptr->pclass == CLASS_WARRIOR) creature_ptr->num_blow[i] += (creature_ptr->lev / 40);
3329                         else if (creature_ptr->pclass == CLASS_BERSERKER)
3330                         {
3331                                 creature_ptr->num_blow[i] += (creature_ptr->lev / 23);
3332                         }
3333                         else if ((creature_ptr->pclass == CLASS_ROGUE) && (o_ptr->weight < 50) && (creature_ptr->stat_ind[A_DEX] >= 30)) creature_ptr->num_blow[i] ++;
3334
3335                         if (creature_ptr->special_defense & KATA_FUUJIN) creature_ptr->num_blow[i] -= 1;
3336
3337                         if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_POISON_NEEDLE)) creature_ptr->num_blow[i] = 1;
3338
3339
3340                         /* Require at least one blow */
3341                         if (creature_ptr->num_blow[i] < 1) creature_ptr->num_blow[i] = 1;
3342
3343                         /* Boost digging skill by weapon weight */
3344                         creature_ptr->skill_dig += (o_ptr->weight / 10);
3345                 }
3346
3347                 /* Assume okay */
3348                 /* Priest weapon penalty for non-blessed edged weapons */
3349                 if ((creature_ptr->pclass == CLASS_PRIEST) && (!(have_flag(flgs, TR_BLESSED))) &&
3350                         ((o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM)))
3351                 {
3352                         /* Reduce the real bonuses */
3353                         creature_ptr->to_h[i] -= 2;
3354                         creature_ptr->to_d[i] -= 2;
3355
3356                         /* Reduce the mental bonuses */
3357                         creature_ptr->dis_to_h[i] -= 2;
3358                         creature_ptr->dis_to_d[i] -= 2;
3359
3360                         /* Icky weapon */
3361                         creature_ptr->icky_wield[i] = TRUE;
3362                 }
3363                 else if (creature_ptr->pclass == CLASS_BERSERKER)
3364                 {
3365                         creature_ptr->to_h[i] += creature_ptr->lev / 5;
3366                         creature_ptr->to_d[i] += creature_ptr->lev / 6;
3367                         creature_ptr->dis_to_h[i] += creature_ptr->lev / 5;
3368                         creature_ptr->dis_to_d[i] += creature_ptr->lev / 6;
3369                         if (((i == 0) && !creature_ptr->hidarite) || creature_ptr->ryoute)
3370                         {
3371                                 creature_ptr->to_h[i] += creature_ptr->lev / 5;
3372                                 creature_ptr->to_d[i] += creature_ptr->lev / 6;
3373                                 creature_ptr->dis_to_h[i] += creature_ptr->lev / 5;
3374                                 creature_ptr->dis_to_d[i] += creature_ptr->lev / 6;
3375                         }
3376                 }
3377                 else if (creature_ptr->pclass == CLASS_SORCERER)
3378                 {
3379                         if (!((o_ptr->tval == TV_HAFTED) && ((o_ptr->sval == SV_WIZSTAFF) || (o_ptr->sval == SV_NAMAKE_HAMMER))))
3380                         {
3381                                 /* Reduce the real bonuses */
3382                                 creature_ptr->to_h[i] -= 200;
3383                                 creature_ptr->to_d[i] -= 200;
3384
3385                                 /* Reduce the mental bonuses */
3386                                 creature_ptr->dis_to_h[i] -= 200;
3387                                 creature_ptr->dis_to_d[i] -= 200;
3388
3389                                 /* Icky weapon */
3390                                 creature_ptr->icky_wield[i] = TRUE;
3391                         }
3392                         else
3393                         {
3394                                 /* Reduce the real bonuses */
3395                                 creature_ptr->to_h[i] -= 30;
3396                                 creature_ptr->to_d[i] -= 10;
3397
3398                                 /* Reduce the mental bonuses */
3399                                 creature_ptr->dis_to_h[i] -= 30;
3400                                 creature_ptr->dis_to_d[i] -= 10;
3401                         }
3402                 }
3403                 /* Hex bonuses */
3404                 if (creature_ptr->realm1 == REALM_HEX)
3405                 {
3406                         if (object_is_cursed(o_ptr))
3407                         {
3408                                 if (o_ptr->curse_flags & (TRC_CURSED)) { creature_ptr->to_h[i] += 5; creature_ptr->dis_to_h[i] += 5; }
3409                                 if (o_ptr->curse_flags & (TRC_HEAVY_CURSE)) { creature_ptr->to_h[i] += 7; creature_ptr->dis_to_h[i] += 7; }
3410                                 if (o_ptr->curse_flags & (TRC_PERMA_CURSE)) { creature_ptr->to_h[i] += 13; creature_ptr->dis_to_h[i] += 13; }
3411                                 if (o_ptr->curse_flags & (TRC_TY_CURSE)) { creature_ptr->to_h[i] += 5; creature_ptr->dis_to_h[i] += 5; }
3412                                 if (hex_spelling(HEX_RUNESWORD))
3413                                 {
3414                                         if (o_ptr->curse_flags & (TRC_CURSED)) { creature_ptr->to_d[i] += 5; creature_ptr->dis_to_d[i] += 5; }
3415                                         if (o_ptr->curse_flags & (TRC_HEAVY_CURSE)) { creature_ptr->to_d[i] += 7; creature_ptr->dis_to_d[i] += 7; }
3416                                         if (o_ptr->curse_flags & (TRC_PERMA_CURSE)) { creature_ptr->to_d[i] += 13; creature_ptr->dis_to_d[i] += 13; }
3417                                 }
3418                         }
3419                 }
3420                 if (creature_ptr->riding)
3421                 {
3422                         if ((o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE)))
3423                         {
3424                                 creature_ptr->to_h[i] += 15;
3425                                 creature_ptr->dis_to_h[i] += 15;
3426                                 creature_ptr->to_dd[i] += 2;
3427                         }
3428                         else if (!(have_flag(flgs, TR_RIDING)))
3429                         {
3430                                 int penalty;
3431                                 if ((creature_ptr->pclass == CLASS_BEASTMASTER) || (creature_ptr->pclass == CLASS_CAVALRY))
3432                                 {
3433                                         penalty = 5;
3434                                 }
3435                                 else
3436                                 {
3437                                         penalty = r_info[floor_ptr->m_list[creature_ptr->riding].r_idx].level - creature_ptr->skill_exp[GINOU_RIDING] / 80;
3438                                         penalty += 30;
3439                                         if (penalty < 30) penalty = 30;
3440                                 }
3441                                 creature_ptr->to_h[i] -= (s16b)penalty;
3442                                 creature_ptr->dis_to_h[i] -= (s16b)penalty;
3443
3444                                 /* Riding weapon */
3445                                 creature_ptr->riding_wield[i] = TRUE;
3446                         }
3447                 }
3448         }
3449
3450         if (creature_ptr->riding)
3451         {
3452                 int penalty = 0;
3453
3454                 creature_ptr->riding_ryoute = FALSE;
3455
3456                 if (creature_ptr->ryoute || (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_NONE)) creature_ptr->riding_ryoute = TRUE;
3457                 else if (creature_ptr->pet_extra_flags & PF_TWO_HANDS)
3458                 {
3459                         switch (creature_ptr->pclass)
3460                         {
3461                         case CLASS_MONK:
3462                         case CLASS_FORCETRAINER:
3463                         case CLASS_BERSERKER:
3464                                 if ((empty_hands(creature_ptr, FALSE) != EMPTY_HAND_NONE) && !has_melee_weapon(creature_ptr, INVEN_RARM) && !has_melee_weapon(creature_ptr, INVEN_LARM))
3465                                         creature_ptr->riding_ryoute = TRUE;
3466                                 break;
3467                         }
3468                 }
3469
3470                 if ((creature_ptr->pclass == CLASS_BEASTMASTER) || (creature_ptr->pclass == CLASS_CAVALRY))
3471                 {
3472                         if (creature_ptr->tval_ammo != TV_ARROW) penalty = 5;
3473                 }
3474                 else
3475                 {
3476                         penalty = r_info[floor_ptr->m_list[creature_ptr->riding].r_idx].level - creature_ptr->skill_exp[GINOU_RIDING] / 80;
3477                         penalty += 30;
3478                         if (penalty < 30) penalty = 30;
3479                 }
3480                 if (creature_ptr->tval_ammo == TV_BOLT) penalty *= 2;
3481                 creature_ptr->to_h_b -= (s16b)penalty;
3482                 creature_ptr->dis_to_h_b -= (s16b)penalty;
3483         }
3484
3485         /* Different calculation for monks with empty hands */
3486         if (((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER) || (creature_ptr->pclass == CLASS_BERSERKER)) &&
3487                 (empty_hands_status & EMPTY_HAND_RARM) && !creature_ptr->hidarite)
3488         {
3489                 int blow_base = creature_ptr->lev + adj_dex_blow[creature_ptr->stat_ind[A_DEX]];
3490                 creature_ptr->num_blow[0] = 0;
3491
3492                 if (creature_ptr->pclass == CLASS_FORCETRAINER)
3493                 {
3494                         if (blow_base > 18) creature_ptr->num_blow[0]++;
3495                         if (blow_base > 31) creature_ptr->num_blow[0]++;
3496                         if (blow_base > 44) creature_ptr->num_blow[0]++;
3497                         if (blow_base > 58) creature_ptr->num_blow[0]++;
3498                         if (P_PTR_KI)
3499                         {
3500                                 creature_ptr->to_d[0] += P_PTR_KI / 5;
3501                                 creature_ptr->dis_to_d[0] += P_PTR_KI / 5;
3502                         }
3503                 }
3504                 else
3505                 {
3506                         if (blow_base > 12) creature_ptr->num_blow[0]++;
3507                         if (blow_base > 22) creature_ptr->num_blow[0]++;
3508                         if (blow_base > 31) creature_ptr->num_blow[0]++;
3509                         if (blow_base > 39) creature_ptr->num_blow[0]++;
3510                         if (blow_base > 46) creature_ptr->num_blow[0]++;
3511                         if (blow_base > 53) creature_ptr->num_blow[0]++;
3512                         if (blow_base > 59) creature_ptr->num_blow[0]++;
3513                 }
3514
3515                 if (heavy_armor(creature_ptr) && (creature_ptr->pclass != CLASS_BERSERKER))
3516                         creature_ptr->num_blow[0] /= 2;
3517                 else
3518                 {
3519                         creature_ptr->to_h[0] += (creature_ptr->lev / 3);
3520                         creature_ptr->dis_to_h[0] += (creature_ptr->lev / 3);
3521
3522                         creature_ptr->to_d[0] += (creature_ptr->lev / 6);
3523                         creature_ptr->dis_to_d[0] += (creature_ptr->lev / 6);
3524                 }
3525
3526                 if (creature_ptr->special_defense & KAMAE_BYAKKO)
3527                 {
3528                         creature_ptr->to_a -= 40;
3529                         creature_ptr->dis_to_a -= 40;
3530
3531                 }
3532                 else if (creature_ptr->special_defense & KAMAE_SEIRYU)
3533                 {
3534                         creature_ptr->to_a -= 50;
3535                         creature_ptr->dis_to_a -= 50;
3536                         creature_ptr->resist_acid = TRUE;
3537                         creature_ptr->resist_fire = TRUE;
3538                         creature_ptr->resist_elec = TRUE;
3539                         creature_ptr->resist_cold = TRUE;
3540                         creature_ptr->resist_pois = TRUE;
3541                         creature_ptr->sh_fire = TRUE;
3542                         creature_ptr->sh_elec = TRUE;
3543                         creature_ptr->sh_cold = TRUE;
3544                         creature_ptr->levitation = TRUE;
3545                 }
3546                 else if (creature_ptr->special_defense & KAMAE_GENBU)
3547                 {
3548                         creature_ptr->to_a += (creature_ptr->lev*creature_ptr->lev) / 50;
3549                         creature_ptr->dis_to_a += (creature_ptr->lev*creature_ptr->lev) / 50;
3550                         creature_ptr->reflect = TRUE;
3551                         creature_ptr->num_blow[0] -= 2;
3552                         if ((creature_ptr->pclass == CLASS_MONK) && (creature_ptr->lev > 42)) creature_ptr->num_blow[0]--;
3553                         if (creature_ptr->num_blow[0] < 0) creature_ptr->num_blow[0] = 0;
3554                 }
3555                 else if (creature_ptr->special_defense & KAMAE_SUZAKU)
3556                 {
3557                         creature_ptr->to_h[0] -= (creature_ptr->lev / 3);
3558                         creature_ptr->to_d[0] -= (creature_ptr->lev / 6);
3559
3560                         creature_ptr->dis_to_h[0] -= (creature_ptr->lev / 3);
3561                         creature_ptr->dis_to_d[0] -= (creature_ptr->lev / 6);
3562                         creature_ptr->num_blow[0] /= 2;
3563                         creature_ptr->levitation = TRUE;
3564                 }
3565
3566                 creature_ptr->num_blow[0] += 1 + extra_blows[0];
3567         }
3568
3569         if (creature_ptr->riding) creature_ptr->levitation = riding_levitation;
3570
3571         creature_ptr->monk_armour_aux = FALSE;
3572
3573         if (heavy_armor(creature_ptr))
3574         {
3575                 creature_ptr->monk_armour_aux = TRUE;
3576         }
3577
3578         for (i = 0; i < 2; i++)
3579         {
3580                 if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3581                 {
3582                         OBJECT_TYPE_VALUE tval = creature_ptr->inventory_list[INVEN_RARM + i].tval - TV_WEAPON_BEGIN;
3583                         OBJECT_SUBTYPE_VALUE sval = creature_ptr->inventory_list[INVEN_RARM + i].sval;
3584
3585                         creature_ptr->to_h[i] += (creature_ptr->weapon_exp[tval][sval] - WEAPON_EXP_BEGINNER) / 200;
3586                         creature_ptr->dis_to_h[i] += (creature_ptr->weapon_exp[tval][sval] - WEAPON_EXP_BEGINNER) / 200;
3587                         if ((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER))
3588                         {
3589                                 if (!s_info[creature_ptr->pclass].w_max[tval][sval])
3590                                 {
3591                                         creature_ptr->to_h[i] -= 40;
3592                                         creature_ptr->dis_to_h[i] -= 40;
3593                                         creature_ptr->icky_wield[i] = TRUE;
3594                                 }
3595                         }
3596                         else if (creature_ptr->pclass == CLASS_NINJA)
3597                         {
3598                                 if ((s_info[CLASS_NINJA].w_max[tval][sval] <= WEAPON_EXP_BEGINNER) || (creature_ptr->inventory_list[INVEN_LARM - i].tval == TV_SHIELD))
3599                                 {
3600                                         creature_ptr->to_h[i] -= 40;
3601                                         creature_ptr->dis_to_h[i] -= 40;
3602                                         creature_ptr->icky_wield[i] = TRUE;
3603                                         creature_ptr->num_blow[i] /= 2;
3604                                         if (creature_ptr->num_blow[i] < 1) creature_ptr->num_blow[i] = 1;
3605                                 }
3606                         }
3607                 }
3608         }
3609
3610         /* Maximum speed is (+99). (internally it's 110 + 99) */
3611         /* Temporary lightspeed forces to be maximum speed */
3612         if ((creature_ptr->lightspeed && !creature_ptr->riding) || (new_speed > 209))
3613         {
3614                 new_speed = 209;
3615         }
3616
3617         /* Minimum speed is (-99). (internally it's 110 - 99) */
3618         if (new_speed < 11) new_speed = 11;
3619
3620         /* Display the speed (if needed) */
3621         if (creature_ptr->pspeed != (byte)new_speed)
3622         {
3623                 creature_ptr->pspeed = (byte)new_speed;
3624                 creature_ptr->redraw |= (PR_SPEED);
3625         }
3626
3627         if (yoiyami)
3628         {
3629                 if (creature_ptr->to_a > (0 - creature_ptr->ac))
3630                         creature_ptr->to_a = 0 - creature_ptr->ac;
3631                 if (creature_ptr->dis_to_a > (0 - creature_ptr->dis_ac))
3632                         creature_ptr->dis_to_a = 0 - creature_ptr->dis_ac;
3633         }
3634
3635         /* Redraw armor (if needed) */
3636         if ((creature_ptr->dis_ac != old_dis_ac) || (creature_ptr->dis_to_a != old_dis_to_a))
3637         {
3638                 creature_ptr->redraw |= (PR_ARMOR);
3639                 creature_ptr->window |= (PW_PLAYER);
3640         }
3641
3642         if (creature_ptr->ryoute && !omoi)
3643         {
3644                 int bonus_to_h = 0, bonus_to_d = 0;
3645                 bonus_to_d = ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128) / 2;
3646                 bonus_to_h = ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128) + ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3647
3648                 creature_ptr->to_h[default_hand] += MAX(bonus_to_h, 1);
3649                 creature_ptr->dis_to_h[default_hand] += MAX(bonus_to_h, 1);
3650                 creature_ptr->to_d[default_hand] += MAX(bonus_to_d, 1);
3651                 creature_ptr->dis_to_d[default_hand] += MAX(bonus_to_d, 1);
3652         }
3653
3654         if (((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER) || (creature_ptr->pclass == CLASS_BERSERKER)) && (empty_hands(creature_ptr, FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))) creature_ptr->ryoute = FALSE;
3655
3656         /* Affect Skill -- stealth (bonus one) */
3657         creature_ptr->skill_stl += 1;
3658
3659         if (is_time_limit_stealth(creature_ptr)) creature_ptr->skill_stl += 99;
3660
3661         /* Affect Skill -- disarming (DEX and INT) */
3662         creature_ptr->skill_dis += adj_dex_dis[creature_ptr->stat_ind[A_DEX]];
3663         creature_ptr->skill_dis += adj_int_dis[creature_ptr->stat_ind[A_INT]];
3664
3665         /* Affect Skill -- magic devices (INT) */
3666         creature_ptr->skill_dev += adj_int_dev[creature_ptr->stat_ind[A_INT]];
3667
3668         /* Affect Skill -- saving throw (WIS) */
3669         creature_ptr->skill_sav += adj_wis_sav[creature_ptr->stat_ind[A_WIS]];
3670
3671         /* Affect Skill -- digging (STR) */
3672         creature_ptr->skill_dig += adj_str_dig[creature_ptr->stat_ind[A_STR]];
3673
3674         /* Affect Skill -- disarming (Level, by Class) */
3675         creature_ptr->skill_dis += ((cp_ptr->x_dis * creature_ptr->lev / 10) + (ap_ptr->a_dis * creature_ptr->lev / 50));
3676
3677         /* Affect Skill -- magic devices (Level, by Class) */
3678         creature_ptr->skill_dev += ((cp_ptr->x_dev * creature_ptr->lev / 10) + (ap_ptr->a_dev * creature_ptr->lev / 50));
3679
3680         /* Affect Skill -- saving throw (Level, by Class) */
3681         creature_ptr->skill_sav += ((cp_ptr->x_sav * creature_ptr->lev / 10) + (ap_ptr->a_sav * creature_ptr->lev / 50));
3682
3683         /* Affect Skill -- stealth (Level, by Class) */
3684         creature_ptr->skill_stl += (cp_ptr->x_stl * creature_ptr->lev / 10);
3685
3686         /* Affect Skill -- search ability (Level, by Class) */
3687         creature_ptr->skill_srh += (cp_ptr->x_srh * creature_ptr->lev / 10);
3688
3689         /* Affect Skill -- search frequency (Level, by Class) */
3690         creature_ptr->skill_fos += (cp_ptr->x_fos * creature_ptr->lev / 10);
3691
3692         /* Affect Skill -- combat (normal) (Level, by Class) */
3693         creature_ptr->skill_thn += ((cp_ptr->x_thn * creature_ptr->lev / 10) + (ap_ptr->a_thn * creature_ptr->lev / 50));
3694
3695         /* Affect Skill -- combat (shooting) (Level, by Class) */
3696         creature_ptr->skill_thb += ((cp_ptr->x_thb * creature_ptr->lev / 10) + (ap_ptr->a_thb * creature_ptr->lev / 50));
3697
3698         /* Affect Skill -- combat (throwing) (Level, by Class) */
3699         creature_ptr->skill_tht += ((cp_ptr->x_thb * creature_ptr->lev / 10) + (ap_ptr->a_thb * creature_ptr->lev / 50));
3700
3701         if ((PRACE_IS_(creature_ptr, RACE_S_FAIRY)) && (creature_ptr->pseikaku != SEIKAKU_SEXY) && (creature_ptr->cursed & TRC_AGGRAVATE))
3702         {
3703                 creature_ptr->cursed &= ~(TRC_AGGRAVATE);
3704                 creature_ptr->skill_stl = MIN(creature_ptr->skill_stl - 3, (creature_ptr->skill_stl + 2) / 2);
3705         }
3706
3707         /* Limit Skill -- stealth from 0 to 30 */
3708         if (creature_ptr->skill_stl > 30) creature_ptr->skill_stl = 30;
3709         if (creature_ptr->skill_stl < 0) creature_ptr->skill_stl = 0;
3710
3711         /* Limit Skill -- digging from 1 up */
3712         if (creature_ptr->skill_dig < 1) creature_ptr->skill_dig = 1;
3713
3714         if (creature_ptr->anti_magic && (creature_ptr->skill_sav < (90 + creature_ptr->lev))) creature_ptr->skill_sav = 90 + creature_ptr->lev;
3715
3716         if (creature_ptr->tsubureru) creature_ptr->skill_sav = 10;
3717
3718         if ((creature_ptr->ult_res || creature_ptr->resist_magic || creature_ptr->magicdef) && (creature_ptr->skill_sav < (95 + creature_ptr->lev))) creature_ptr->skill_sav = 95 + creature_ptr->lev;
3719
3720         if (down_saving) creature_ptr->skill_sav /= 2;
3721
3722         /* Hack -- Each elemental immunity includes resistance */
3723         if (creature_ptr->immune_acid) creature_ptr->resist_acid = TRUE;
3724         if (creature_ptr->immune_elec) creature_ptr->resist_elec = TRUE;
3725         if (creature_ptr->immune_fire) creature_ptr->resist_fire = TRUE;
3726         if (creature_ptr->immune_cold) creature_ptr->resist_cold = TRUE;
3727
3728         /* Hack -- handle "xtra" mode */
3729         if (current_world_ptr->character_xtra) return;
3730
3731         /* Take note when "heavy bow" changes */
3732         if (creature_ptr->old_heavy_shoot != creature_ptr->heavy_shoot)
3733         {
3734                 if (creature_ptr->heavy_shoot)
3735                 {
3736                         msg_print(_("こんな重い弓を装備しているのは大変だ。", "You have trouble wielding such a heavy bow."));
3737                 }
3738                 else if (creature_ptr->inventory_list[INVEN_BOW].k_idx)
3739                 {
3740                         msg_print(_("この弓なら装備していても辛くない。", "You have no trouble wielding your bow."));
3741                 }
3742                 else
3743                 {
3744                         msg_print(_("重い弓を装備からはずして体が楽になった。", "You feel relieved to put down your heavy bow."));
3745                 }
3746
3747                 /* Save it */
3748                 creature_ptr->old_heavy_shoot = creature_ptr->heavy_shoot;
3749         }
3750
3751         for (i = 0; i < 2; i++)
3752         {
3753                 /* Take note when "heavy weapon" changes */
3754                 if (creature_ptr->old_heavy_wield[i] != creature_ptr->heavy_wield[i])
3755                 {
3756                         if (creature_ptr->heavy_wield[i])
3757                         {
3758                                 msg_print(_("こんな重い武器を装備しているのは大変だ。", "You have trouble wielding such a heavy weapon."));
3759                         }
3760                         else if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3761                         {
3762                                 msg_print(_("これなら装備していても辛くない。", "You have no trouble wielding your weapon."));
3763                         }
3764                         else if (creature_ptr->heavy_wield[1 - i])
3765                         {
3766                                 msg_print(_("まだ武器が重い。", "You have still trouble wielding a heavy weapon."));
3767                         }
3768                         else
3769                         {
3770                                 msg_print(_("重い武器を装備からはずして体が楽になった。", "You feel relieved to put down your heavy weapon."));
3771                         }
3772
3773                         /* Save it */
3774                         creature_ptr->old_heavy_wield[i] = creature_ptr->heavy_wield[i];
3775                 }
3776
3777                 /* Take note when "heavy weapon" changes */
3778                 if (creature_ptr->old_riding_wield[i] != creature_ptr->riding_wield[i])
3779                 {
3780                         if (creature_ptr->riding_wield[i])
3781                         {
3782                                 msg_print(_("この武器は乗馬中に使うにはむかないようだ。", "This weapon is not suitable for use while riding."));
3783                         }
3784                         else if (!creature_ptr->riding)
3785                         {
3786                                 msg_print(_("この武器は徒歩で使いやすい。", "This weapon was not suitable for use while riding."));
3787                         }
3788                         else if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3789                         {
3790                                 msg_print(_("これなら乗馬中にぴったりだ。", "This weapon is suitable for use while riding."));
3791                         }
3792                         /* Save it */
3793                         creature_ptr->old_riding_wield[i] = creature_ptr->riding_wield[i];
3794                 }
3795
3796                 /* Take note when "illegal weapon" changes */
3797                 if (creature_ptr->old_icky_wield[i] != creature_ptr->icky_wield[i])
3798                 {
3799                         if (creature_ptr->icky_wield[i])
3800                         {
3801                                 msg_print(_("今の装備はどうも自分にふさわしくない気がする。", "You do not feel comfortable with your weapon."));
3802                                 if (current_world_ptr->is_loading_now)
3803                                 {
3804                                         chg_virtue(creature_ptr, V_FAITH, -1);
3805                                 }
3806                         }
3807                         else if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3808                         {
3809                                 msg_print(_("今の装備は自分にふさわしい気がする。", "You feel comfortable with your weapon."));
3810                         }
3811                         else
3812                         {
3813                                 msg_print(_("装備をはずしたら随分と気が楽になった。", "You feel more comfortable after removing your weapon."));
3814                         }
3815
3816                         /* Save it */
3817                         creature_ptr->old_icky_wield[i] = creature_ptr->icky_wield[i];
3818                 }
3819         }
3820
3821         if (creature_ptr->riding && (creature_ptr->old_riding_ryoute != creature_ptr->riding_ryoute))
3822         {
3823                 if (creature_ptr->riding_ryoute)
3824                 {
3825 #ifdef JP
3826                         msg_format("%s馬を操れない。", (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_NONE) ? "両手がふさがっていて" : "");
3827 #else
3828                         msg_print("You are using both hand for fighting, and you can't control a riding pet.");
3829 #endif
3830                 }
3831                 else
3832                 {
3833 #ifdef JP
3834                         msg_format("%s馬を操れるようになった。", (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_NONE) ? "手が空いて" : "");
3835 #else
3836                         msg_print("You began to control riding pet with one hand.");
3837 #endif
3838                 }
3839
3840                 creature_ptr->old_riding_ryoute = creature_ptr->riding_ryoute;
3841         }
3842
3843         if (((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER) || (creature_ptr->pclass == CLASS_NINJA)) && (creature_ptr->monk_armour_aux != creature_ptr->monk_notify_aux))
3844         {
3845                 if (heavy_armor(creature_ptr))
3846                 {
3847                         msg_print(_("装備が重くてバランスを取れない。", "The weight of your armor disrupts your balance."));
3848                         if (current_world_ptr->is_loading_now)
3849                         {
3850                                 chg_virtue(creature_ptr, V_HARMONY, -1);
3851                         }
3852                 }
3853                 else
3854                 {
3855                         msg_print(_("バランスがとれるようになった。", "You regain your balance."));
3856                 }
3857
3858                 creature_ptr->monk_notify_aux = creature_ptr->monk_armour_aux;
3859         }
3860
3861         for (i = 0; i < INVEN_PACK; i++)
3862         {
3863                 if ((creature_ptr->inventory_list[i].tval == TV_NATURE_BOOK) && (creature_ptr->inventory_list[i].sval == 2)) have_sw = TRUE;
3864                 if ((creature_ptr->inventory_list[i].tval == TV_CRAFT_BOOK) && (creature_ptr->inventory_list[i].sval == 2)) have_kabe = TRUE;
3865         }
3866
3867         for (this_o_idx = floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].o_idx; this_o_idx; this_o_idx = next_o_idx)
3868         {
3869                 o_ptr = &floor_ptr->o_list[this_o_idx];
3870                 next_o_idx = o_ptr->next_o_idx;
3871
3872                 if ((o_ptr->tval == TV_NATURE_BOOK) && (o_ptr->sval == 2)) have_sw = TRUE;
3873                 if ((o_ptr->tval == TV_CRAFT_BOOK) && (o_ptr->sval == 2)) have_kabe = TRUE;
3874         }
3875
3876         if (creature_ptr->pass_wall && !creature_ptr->kill_wall) creature_ptr->no_flowed = TRUE;
3877
3878         if (have_sw && ((creature_ptr->realm1 == REALM_NATURE) || (creature_ptr->realm2 == REALM_NATURE) || (creature_ptr->pclass == CLASS_SORCERER)))
3879         {
3880                 const magic_type *s_ptr = &mp_ptr->info[REALM_NATURE - 1][SPELL_SW];
3881                 if (creature_ptr->lev >= s_ptr->slevel) creature_ptr->no_flowed = TRUE;
3882         }
3883
3884         if (have_kabe && ((creature_ptr->realm1 == REALM_CRAFT) || (creature_ptr->realm2 == REALM_CRAFT) || (creature_ptr->pclass == CLASS_SORCERER)))
3885         {
3886                 const magic_type *s_ptr = &mp_ptr->info[REALM_CRAFT - 1][SPELL_KABE];
3887                 if (creature_ptr->lev >= s_ptr->slevel) creature_ptr->no_flowed = TRUE;
3888         }
3889 }
3890
3891
3892 static void calc_alignment(player_type *creature_ptr)
3893 {
3894         MONSTER_IDX m_idx;
3895         creature_ptr->align = 0;
3896         int i, j, neutral[2];
3897
3898         floor_type *floor_ptr = creature_ptr->current_floor_ptr;
3899         for (m_idx = floor_ptr->m_max - 1; m_idx >= 1; m_idx--)
3900         {
3901                 monster_type *m_ptr;
3902                 monster_race *r_ptr;
3903                 m_ptr = &floor_ptr->m_list[m_idx];
3904                 if (!monster_is_valid(m_ptr)) continue;
3905                 r_ptr = &r_info[m_ptr->r_idx];
3906
3907                 if (is_pet(m_ptr))
3908                 {
3909                         if (r_ptr->flags3 & RF3_GOOD) creature_ptr->align += r_ptr->level;
3910                         if (r_ptr->flags3 & RF3_EVIL) creature_ptr->align -= r_ptr->level;
3911                 }
3912         }
3913
3914         if (creature_ptr->mimic_form)
3915         {
3916                 switch (creature_ptr->mimic_form)
3917                 {
3918                 case MIMIC_DEMON:
3919                         creature_ptr->align -= 200;
3920                         break;
3921                 case MIMIC_DEMON_LORD:
3922                         creature_ptr->align -= 200;
3923                         break;
3924                 }
3925         }
3926         else
3927         {
3928                 switch (creature_ptr->prace)
3929                 {
3930                 case RACE_ANGEL:
3931                         creature_ptr->align += 200;
3932                         break;
3933                 case RACE_DEMON:
3934                         creature_ptr->align -= 200;
3935                         break;
3936                 }
3937         }
3938
3939         for (i = 0; i < 2; i++)
3940         {
3941                 if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3942                 {
3943                         if (creature_ptr->inventory_list[INVEN_RARM + i].name1 == ART_IRON_BALL) creature_ptr->align -= 1000;
3944                 }
3945         }
3946
3947         /* Determine player alignment */
3948         for (i = 0, j = 0; i < 8; i++)
3949         {
3950                 switch (creature_ptr->vir_types[i])
3951                 {
3952                 case V_JUSTICE:
3953                         creature_ptr->align += creature_ptr->virtues[i] * 2;
3954                         break;
3955                 case V_CHANCE:
3956                         /* Do nothing */
3957                         break;
3958                 case V_NATURE:
3959                 case V_HARMONY:
3960                         neutral[j++] = i;
3961                         break;
3962                 case V_UNLIFE:
3963                         creature_ptr->align -= creature_ptr->virtues[i];
3964                         break;
3965                 default:
3966                         creature_ptr->align += creature_ptr->virtues[i];
3967                         break;
3968                 }
3969         }
3970
3971         for (i = 0; i < j; i++)
3972         {
3973                 if (creature_ptr->align > 0)
3974                 {
3975                         creature_ptr->align -= creature_ptr->virtues[neutral[i]] / 2;
3976                         if (creature_ptr->align < 0) creature_ptr->align = 0;
3977                 }
3978                 else if (creature_ptr->align < 0)
3979                 {
3980                         creature_ptr->align += creature_ptr->virtues[neutral[i]] / 2;
3981                         if (creature_ptr->align > 0) creature_ptr->align = 0;
3982                 }
3983         }
3984 }
3985
3986
3987 /*!
3988  * @brief プレイヤーの最大HPを計算する /
3989  * Calculate the players (maximal) hit points
3990  * Adjust current hitpoints if necessary
3991  * @return なし
3992  * @details
3993  */
3994 static void calc_hitpoints(player_type *creature_ptr)
3995 {
3996         int bonus, mhp;
3997         byte tmp_hitdie;
3998
3999         /* Un-inflate "half-hitpoint bonus per level" value */
4000         bonus = ((int)(adj_con_mhp[creature_ptr->stat_ind[A_CON]]) - 128) * creature_ptr->lev / 4;
4001
4002         /* Calculate hitpoints */
4003         mhp = creature_ptr->player_hp[creature_ptr->lev - 1];
4004
4005         if (creature_ptr->mimic_form)
4006         {
4007                 if (creature_ptr->pclass == CLASS_SORCERER)
4008                         tmp_hitdie = mimic_info[creature_ptr->mimic_form].r_mhp / 2 + cp_ptr->c_mhp + ap_ptr->a_mhp;
4009                 else
4010                         tmp_hitdie = mimic_info[creature_ptr->mimic_form].r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
4011                 mhp = mhp * tmp_hitdie / creature_ptr->hitdie;
4012         }
4013
4014         if (creature_ptr->pclass == CLASS_SORCERER)
4015         {
4016                 if (creature_ptr->lev < 30)
4017                         mhp = (mhp * (45 + creature_ptr->lev) / 100);
4018                 else
4019                         mhp = (mhp * 75 / 100);
4020                 bonus = (bonus * 65 / 100);
4021         }
4022
4023         mhp += bonus;
4024
4025         if (creature_ptr->pclass == CLASS_BERSERKER)
4026         {
4027                 mhp = mhp * (110 + (((creature_ptr->lev + 40) * (creature_ptr->lev + 40) - 1550) / 110)) / 100;
4028         }
4029
4030         /* Always have at least one hitpoint per level */
4031         if (mhp < creature_ptr->lev + 1) mhp = creature_ptr->lev + 1;
4032
4033         /* Factor in the hero / superhero settings */
4034         if (IS_HERO(creature_ptr)) mhp += 10;
4035         if (creature_ptr->shero && (creature_ptr->pclass != CLASS_BERSERKER)) mhp += 30;
4036         if (creature_ptr->tsuyoshi) mhp += 50;
4037
4038         /* Factor in the hex spell settings */
4039         if (hex_spelling(HEX_XTRA_MIGHT)) mhp += 15;
4040         if (hex_spelling(HEX_BUILDING)) mhp += 60;
4041
4042         /* New maximum hitpoints */
4043         if (creature_ptr->mhp != mhp)
4044         {
4045                 /* Enforce maximum */
4046                 if (creature_ptr->chp >= mhp)
4047                 {
4048                         creature_ptr->chp = mhp;
4049                         creature_ptr->chp_frac = 0;
4050                 }
4051
4052 #ifdef JP
4053                 /* レベルアップの時は上昇量を表示する */
4054                 if (creature_ptr->level_up_message && (mhp > creature_ptr->mhp))
4055                 {
4056                         msg_format("最大ヒット・ポイントが %d 増加した!", (mhp - creature_ptr->mhp));
4057                 }
4058 #endif
4059                 /* Save the new max-hitpoints */
4060                 creature_ptr->mhp = mhp;
4061
4062                 /* Display hitpoints (later) */
4063                 creature_ptr->redraw |= (PR_HP);
4064                 creature_ptr->window |= (PW_PLAYER);
4065         }
4066 }
4067
4068
4069 /*!
4070  * @brief プレイヤーの光源半径を計算する / Extract and set the current "lite radius"
4071  * @return なし
4072  * @details
4073  * SWD: Experimental modification: multiple light sources have additive effect.
4074  */
4075 static void calc_torch(player_type *creature_ptr)
4076 {
4077         int i;
4078         POSITION rad;
4079         object_type *o_ptr;
4080         BIT_FLAGS flgs[TR_FLAG_SIZE];
4081
4082         /* Assume no light */
4083         creature_ptr->cur_lite = 0;
4084
4085         /* Loop through all wielded items */
4086         for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
4087         {
4088                 o_ptr = &creature_ptr->inventory_list[i];
4089                 /* Skip empty slots */
4090                 if (!o_ptr->k_idx) continue;
4091
4092                 if (o_ptr->name2 == EGO_LITE_SHINE) creature_ptr->cur_lite++;
4093
4094                 /* Need Fuels */
4095                 if (o_ptr->name2 != EGO_LITE_DARKNESS)
4096                 {
4097                         if (o_ptr->tval == TV_LITE)
4098                         {
4099                                 if ((o_ptr->sval == SV_LITE_TORCH) && !(o_ptr->xtra4 > 0)) continue;
4100                                 if ((o_ptr->sval == SV_LITE_LANTERN) && !(o_ptr->xtra4 > 0)) continue;
4101                         }
4102                 }
4103                 object_flags(o_ptr, flgs);
4104
4105                 /* calc the lite_radius */
4106
4107                 rad = 0;
4108                 if (have_flag(flgs, TR_LITE_1) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 1;
4109                 if (have_flag(flgs, TR_LITE_2) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 2;
4110                 if (have_flag(flgs, TR_LITE_3) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 3;
4111                 if (have_flag(flgs, TR_LITE_M1)) rad -= 1;
4112                 if (have_flag(flgs, TR_LITE_M2)) rad -= 2;
4113                 if (have_flag(flgs, TR_LITE_M3)) rad -= 3;
4114                 creature_ptr->cur_lite += rad;
4115         }
4116
4117         /* max radius is 14 (was 5) without rewriting other code -- */
4118         if (d_info[creature_ptr->dungeon_idx].flags1 & DF1_DARKNESS && creature_ptr->cur_lite > 1)
4119                 creature_ptr->cur_lite = 1;
4120
4121         /*
4122          * check if the player doesn't have light radius,
4123          * but does weakly glow as an intrinsic.
4124          */
4125         if (creature_ptr->cur_lite <= 0 && creature_ptr->lite) creature_ptr->cur_lite++;
4126
4127         if (creature_ptr->cur_lite > 14) creature_ptr->cur_lite = 14;
4128         if (creature_ptr->cur_lite < 0) creature_ptr->cur_lite = 0;
4129
4130         /* end experimental mods */
4131
4132         /* Notice changes in the "lite radius" */
4133         if (creature_ptr->old_lite != creature_ptr->cur_lite)
4134         {
4135                 /* Hack -- PU_MON_LITE for monsters' darkness */
4136                 creature_ptr->update |= (PU_LITE | PU_MON_LITE | PU_MONSTERS);
4137
4138                 /* Remember the old lite */
4139                 creature_ptr->old_lite = creature_ptr->cur_lite;
4140
4141                 if ((creature_ptr->cur_lite > 0) && (creature_ptr->special_defense & NINJA_S_STEALTH))
4142                         set_superstealth(creature_ptr, FALSE);
4143         }
4144 }
4145
4146
4147 /*!
4148  * @brief プレイヤーの現在学習可能な魔法数を計算し、増減に応じて魔法の忘却、再学習を処置する。 /
4149  * Calculate number of spells player should have, and forget,
4150  * or remember, spells until that number is properly reflected.
4151  * @return なし
4152  * @details
4153  * Note that this function induces various "status" messages,
4154  * which must be bypasses until the character is created.
4155  */
4156 static void calc_spells(player_type *creature_ptr)
4157 {
4158         int i, j, k, levels;
4159         int num_allowed;
4160         int num_boukyaku = 0;
4161
4162         const magic_type        *s_ptr;
4163         REALM_IDX which;
4164         int bonus = 0;
4165
4166         concptr p;
4167
4168         /* Hack -- must be literate */
4169         if (!mp_ptr->spell_book) return;
4170
4171         /* Hack -- wait for creation */
4172         if (!current_world_ptr->character_generated) return;
4173
4174         /* Hack -- handle "xtra" mode */
4175         if (current_world_ptr->character_xtra) return;
4176
4177         if ((creature_ptr->pclass == CLASS_SORCERER) || (creature_ptr->pclass == CLASS_RED_MAGE))
4178         {
4179                 creature_ptr->new_spells = 0;
4180                 return;
4181         }
4182
4183         p = spell_category_name(mp_ptr->spell_book);
4184
4185         /* Determine the number of spells allowed */
4186         levels = creature_ptr->lev - mp_ptr->spell_first + 1;
4187
4188         /* Hack -- no negative spells */
4189         if (levels < 0) levels = 0;
4190
4191         /* Extract total allowed spells */
4192         num_allowed = (adj_mag_study[creature_ptr->stat_ind[mp_ptr->spell_stat]] * levels / 2);
4193
4194         if ((creature_ptr->pclass != CLASS_SAMURAI) && (mp_ptr->spell_book != TV_LIFE_BOOK))
4195         {
4196                 bonus = 4;
4197         }
4198         if (creature_ptr->pclass == CLASS_SAMURAI)
4199         {
4200                 num_allowed = 32;
4201         }
4202         else if (creature_ptr->realm2 == REALM_NONE)
4203         {
4204                 num_allowed = (num_allowed + 1) / 2;
4205                 if (num_allowed > (32 + bonus)) num_allowed = 32 + bonus;
4206         }
4207         else if ((creature_ptr->pclass == CLASS_MAGE) || (creature_ptr->pclass == CLASS_PRIEST))
4208         {
4209                 if (num_allowed > (96 + bonus)) num_allowed = 96 + bonus;
4210         }
4211         else
4212         {
4213                 if (num_allowed > (80 + bonus)) num_allowed = 80 + bonus;
4214         }
4215
4216         /* Count the number of spells we know */
4217         for (j = 0; j < 64; j++)
4218         {
4219                 /* Count known spells */
4220                 if ((j < 32) ?
4221                         (creature_ptr->spell_forgotten1 & (1L << j)) :
4222                         (creature_ptr->spell_forgotten2 & (1L << (j - 32))))
4223                 {
4224                         num_boukyaku++;
4225                 }
4226         }
4227
4228         /* See how many spells we must forget or may learn */
4229         creature_ptr->new_spells = num_allowed + creature_ptr->add_spells + num_boukyaku - creature_ptr->learned_spells;
4230
4231         /* Forget spells which are too hard */
4232         for (i = 63; i >= 0; i--)
4233         {
4234                 /* Efficiency -- all done */
4235                 if (!creature_ptr->spell_learned1 && !creature_ptr->spell_learned2) break;
4236
4237                 /* Access the spell */
4238                 j = creature_ptr->spell_order[i];
4239
4240                 /* Skip non-spells */
4241                 if (j >= 99) continue;
4242
4243
4244                 /* Get the spell */
4245                 if (!is_magic((j < 32) ? creature_ptr->realm1 : creature_ptr->realm2))
4246                 {
4247                         if (j < 32)
4248                                 s_ptr = &technic_info[creature_ptr->realm1 - MIN_TECHNIC][j];
4249                         else
4250                                 s_ptr = &technic_info[creature_ptr->realm2 - MIN_TECHNIC][j % 32];
4251                 }
4252                 else if (j < 32)
4253                         s_ptr = &mp_ptr->info[creature_ptr->realm1 - 1][j];
4254                 else
4255                         s_ptr = &mp_ptr->info[creature_ptr->realm2 - 1][j % 32];
4256
4257                 /* Skip spells we are allowed to know */
4258                 if (s_ptr->slevel <= creature_ptr->lev) continue;
4259
4260                 /* Is it known? */
4261                 if ((j < 32) ?
4262                         (creature_ptr->spell_learned1 & (1L << j)) :
4263                         (creature_ptr->spell_learned2 & (1L << (j - 32))))
4264                 {
4265                         /* Mark as forgotten */
4266                         if (j < 32)
4267                         {
4268                                 creature_ptr->spell_forgotten1 |= (1L << j);
4269                                 which = creature_ptr->realm1;
4270                         }
4271                         else
4272                         {
4273                                 creature_ptr->spell_forgotten2 |= (1L << (j - 32));
4274                                 which = creature_ptr->realm2;
4275                         }
4276
4277                         /* No longer known */
4278                         if (j < 32)
4279                         {
4280                                 creature_ptr->spell_learned1 &= ~(1L << j);
4281                                 which = creature_ptr->realm1;
4282                         }
4283                         else
4284                         {
4285                                 creature_ptr->spell_learned2 &= ~(1L << (j - 32));
4286                                 which = creature_ptr->realm2;
4287                         }
4288
4289 #ifdef JP
4290                         msg_format("%sの%sを忘れてしまった。", exe_spell(creature_ptr, which, j % 32, SPELL_NAME), p);
4291 #else
4292                         msg_format("You have forgotten the %s of %s.", p, exe_spell(creature_ptr, which, j % 32, SPELL_NAME));
4293 #endif
4294
4295
4296                         /* One more can be learned */
4297                         creature_ptr->new_spells++;
4298                 }
4299         }
4300
4301         /* Forget spells if we know too many spells */
4302         for (i = 63; i >= 0; i--)
4303         {
4304                 /* Stop when possible */
4305                 if (creature_ptr->new_spells >= 0) break;
4306
4307                 /* Efficiency -- all done */
4308                 if (!creature_ptr->spell_learned1 && !creature_ptr->spell_learned2) break;
4309
4310                 /* Get the (i+1)th spell learned */
4311                 j = creature_ptr->spell_order[i];
4312
4313                 /* Skip unknown spells */
4314                 if (j >= 99) continue;
4315
4316                 /* Forget it (if learned) */
4317                 if ((j < 32) ?
4318                         (creature_ptr->spell_learned1 & (1L << j)) :
4319                         (creature_ptr->spell_learned2 & (1L << (j - 32))))
4320                 {
4321                         /* Mark as forgotten */
4322                         if (j < 32)
4323                         {
4324                                 creature_ptr->spell_forgotten1 |= (1L << j);
4325                                 which = creature_ptr->realm1;
4326                         }
4327                         else
4328                         {
4329                                 creature_ptr->spell_forgotten2 |= (1L << (j - 32));
4330                                 which = creature_ptr->realm2;
4331                         }
4332
4333                         /* No longer known */
4334                         if (j < 32)
4335                         {
4336                                 creature_ptr->spell_learned1 &= ~(1L << j);
4337                                 which = creature_ptr->realm1;
4338                         }
4339                         else
4340                         {
4341                                 creature_ptr->spell_learned2 &= ~(1L << (j - 32));
4342                                 which = creature_ptr->realm2;
4343                         }
4344
4345 #ifdef JP
4346                         msg_format("%sの%sを忘れてしまった。", exe_spell(creature_ptr, which, j % 32, SPELL_NAME), p);
4347 #else
4348                         msg_format("You have forgotten the %s of %s.", p, exe_spell(creature_ptr, which, j % 32, SPELL_NAME));
4349 #endif
4350
4351                         /* One more can be learned */
4352                         creature_ptr->new_spells++;
4353                 }
4354         }
4355
4356         /* Check for spells to remember */
4357         for (i = 0; i < 64; i++)
4358         {
4359                 /* None left to remember */
4360                 if (creature_ptr->new_spells <= 0) break;
4361
4362                 /* Efficiency -- all done */
4363                 if (!creature_ptr->spell_forgotten1 && !creature_ptr->spell_forgotten2) break;
4364
4365                 /* Get the next spell we learned */
4366                 j = creature_ptr->spell_order[i];
4367
4368                 /* Skip unknown spells */
4369                 if (j >= 99) break;
4370
4371                 /* Access the spell */
4372                 if (!is_magic((j < 32) ? creature_ptr->realm1 : creature_ptr->realm2))
4373                 {
4374                         if (j < 32)
4375                                 s_ptr = &technic_info[creature_ptr->realm1 - MIN_TECHNIC][j];
4376                         else
4377                                 s_ptr = &technic_info[creature_ptr->realm2 - MIN_TECHNIC][j % 32];
4378                 }
4379                 else if (j < 32)
4380                         s_ptr = &mp_ptr->info[creature_ptr->realm1 - 1][j];
4381                 else
4382                         s_ptr = &mp_ptr->info[creature_ptr->realm2 - 1][j % 32];
4383
4384                 /* Skip spells we cannot remember */
4385                 if (s_ptr->slevel > creature_ptr->lev) continue;
4386
4387                 /* First set of spells */
4388                 if ((j < 32) ?
4389                         (creature_ptr->spell_forgotten1 & (1L << j)) :
4390                         (creature_ptr->spell_forgotten2 & (1L << (j - 32))))
4391                 {
4392                         /* No longer forgotten */
4393                         if (j < 32)
4394                         {
4395                                 creature_ptr->spell_forgotten1 &= ~(1L << j);
4396                                 which = creature_ptr->realm1;
4397                         }
4398                         else
4399                         {
4400                                 creature_ptr->spell_forgotten2 &= ~(1L << (j - 32));
4401                                 which = creature_ptr->realm2;
4402                         }
4403
4404                         /* Known once more */
4405                         if (j < 32)
4406                         {
4407                                 creature_ptr->spell_learned1 |= (1L << j);
4408                                 which = creature_ptr->realm1;
4409                         }
4410                         else
4411                         {
4412                                 creature_ptr->spell_learned2 |= (1L << (j - 32));
4413                                 which = creature_ptr->realm2;
4414                         }
4415
4416 #ifdef JP
4417                         msg_format("%sの%sを思い出した。", exe_spell(creature_ptr, which, j % 32, SPELL_NAME), p);
4418 #else
4419                         msg_format("You have remembered the %s of %s.", p, exe_spell(creature_ptr, which, j % 32, SPELL_NAME));
4420 #endif
4421
4422                         /* One less can be learned */
4423                         creature_ptr->new_spells--;
4424                 }
4425         }
4426
4427         k = 0;
4428
4429         if (creature_ptr->realm2 == REALM_NONE)
4430         {
4431                 /* Count spells that can be learned */
4432                 for (j = 0; j < 32; j++)
4433                 {
4434                         if (!is_magic(creature_ptr->realm1)) s_ptr = &technic_info[creature_ptr->realm1 - MIN_TECHNIC][j];
4435                         else s_ptr = &mp_ptr->info[creature_ptr->realm1 - 1][j];
4436
4437                         /* Skip spells we cannot remember */
4438                         if (s_ptr->slevel > creature_ptr->lev) continue;
4439
4440                         /* Skip spells we already know */
4441                         if (creature_ptr->spell_learned1 & (1L << j))
4442                         {
4443                                 continue;
4444                         }
4445
4446                         /* Count it */
4447                         k++;
4448                 }
4449                 if (k > 32) k = 32;
4450                 if ((creature_ptr->new_spells > k) &&
4451                         ((mp_ptr->spell_book == TV_LIFE_BOOK) || (mp_ptr->spell_book == TV_HISSATSU_BOOK)))
4452                 {
4453                         creature_ptr->new_spells = (s16b)k;
4454                 }
4455         }
4456
4457         if (creature_ptr->new_spells < 0) creature_ptr->new_spells = 0;
4458
4459         /* Spell count changed */
4460         if (creature_ptr->old_spells != creature_ptr->new_spells)
4461         {
4462                 /* Message if needed */
4463                 if (creature_ptr->new_spells)
4464                 {
4465 #ifdef JP
4466                         if (creature_ptr->new_spells < 10) {
4467                                 msg_format("あと %d つの%sを学べる。", creature_ptr->new_spells, p);
4468                         }
4469                         else {
4470                                 msg_format("あと %d 個の%sを学べる。", creature_ptr->new_spells, p);
4471                         }
4472 #else
4473                         msg_format("You can learn %d more %s%s.",
4474                                 creature_ptr->new_spells, p,
4475                                 (creature_ptr->new_spells != 1) ? "s" : "");
4476 #endif
4477
4478                 }
4479
4480                 /* Save the new_spells value */
4481                 creature_ptr->old_spells = creature_ptr->new_spells;
4482
4483                 /* Redraw Study Status */
4484                 creature_ptr->redraw |= (PR_STUDY);
4485
4486                 /* Redraw object recall */
4487                 creature_ptr->window |= (PW_OBJECT);
4488         }
4489 }
4490
4491
4492 /*!
4493  * @brief プレイヤーの最大MPを計算する /
4494  * Calculate maximum mana.  You do not need to know any spells.
4495  * Note that mana is lowered by heavy (or inappropriate) armor.
4496  * @return なし
4497  * @details
4498  * This function induces status messages.
4499  */
4500 static void calc_mana(player_type *creature_ptr)
4501 {
4502         int msp, levels, cur_wgt, max_wgt;
4503
4504         object_type *o_ptr;
4505
4506
4507         /* Hack -- Must be literate */
4508         if (!mp_ptr->spell_book) return;
4509
4510         if ((creature_ptr->pclass == CLASS_MINDCRAFTER) ||
4511                 (creature_ptr->pclass == CLASS_MIRROR_MASTER) ||
4512                 (creature_ptr->pclass == CLASS_BLUE_MAGE))
4513         {
4514                 levels = creature_ptr->lev;
4515         }
4516         else
4517         {
4518                 if (mp_ptr->spell_first > creature_ptr->lev)
4519                 {
4520                         /* Save new mana */
4521                         creature_ptr->msp = 0;
4522
4523                         /* Display mana later */
4524                         creature_ptr->redraw |= (PR_MANA);
4525                         return;
4526                 }
4527
4528                 /* Extract "effective" player level */
4529                 levels = (creature_ptr->lev - mp_ptr->spell_first) + 1;
4530         }
4531
4532         if (creature_ptr->pclass == CLASS_SAMURAI)
4533         {
4534                 msp = (adj_mag_mana[creature_ptr->stat_ind[mp_ptr->spell_stat]] + 10) * 2;
4535                 if (msp) msp += (msp * rp_ptr->r_adj[mp_ptr->spell_stat] / 20);
4536         }
4537         else
4538         {
4539                 /* Extract total mana */
4540                 msp = adj_mag_mana[creature_ptr->stat_ind[mp_ptr->spell_stat]] * (levels + 3) / 4;
4541
4542                 /* Hack -- usually add one mana */
4543                 if (msp) msp++;
4544
4545                 if (msp) msp += (msp * rp_ptr->r_adj[mp_ptr->spell_stat] / 20);
4546
4547                 if (msp && (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)) msp += msp / 2;
4548
4549                 /* Hack: High mages have a 25% mana bonus */
4550                 if (msp && (creature_ptr->pclass == CLASS_HIGH_MAGE)) msp += msp / 4;
4551
4552                 if (msp && (creature_ptr->pclass == CLASS_SORCERER)) msp += msp * (25 + creature_ptr->lev) / 100;
4553         }
4554
4555         /* Only mages are affected */
4556         if (mp_ptr->spell_xtra & MAGIC_GLOVE_REDUCE_MANA)
4557         {
4558                 BIT_FLAGS flgs[TR_FLAG_SIZE];
4559
4560                 /* Assume player is not encumbered by gloves */
4561                 creature_ptr->cumber_glove = FALSE;
4562
4563                 /* Get the gloves */
4564                 o_ptr = &creature_ptr->inventory_list[INVEN_HANDS];
4565
4566                 /* Examine the gloves */
4567                 object_flags(o_ptr, flgs);
4568
4569                 /* Normal gloves hurt mage-type spells */
4570                 if (o_ptr->k_idx &&
4571                         !(have_flag(flgs, TR_FREE_ACT)) &&
4572                         !(have_flag(flgs, TR_DEC_MANA)) &&
4573                         !(have_flag(flgs, TR_EASY_SPELL)) &&
4574                         !((have_flag(flgs, TR_MAGIC_MASTERY)) && (o_ptr->pval > 0)) &&
4575                         !((have_flag(flgs, TR_DEX)) && (o_ptr->pval > 0)))
4576                 {
4577                         /* Encumbered */
4578                         creature_ptr->cumber_glove = TRUE;
4579
4580                         /* Reduce mana */
4581                         msp = (3 * msp) / 4;
4582                 }
4583         }
4584
4585         /* Assume player not encumbered by armor */
4586         creature_ptr->cumber_armor = FALSE;
4587
4588         /* Weigh the armor */
4589         cur_wgt = 0;
4590         if (creature_ptr->inventory_list[INVEN_RARM].tval > TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight;
4591         if (creature_ptr->inventory_list[INVEN_LARM].tval > TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight;
4592         cur_wgt += creature_ptr->inventory_list[INVEN_BODY].weight;
4593         cur_wgt += creature_ptr->inventory_list[INVEN_HEAD].weight;
4594         cur_wgt += creature_ptr->inventory_list[INVEN_OUTER].weight;
4595         cur_wgt += creature_ptr->inventory_list[INVEN_HANDS].weight;
4596         cur_wgt += creature_ptr->inventory_list[INVEN_FEET].weight;
4597
4598         /* Subtract a percentage of maximum mana. */
4599         switch (creature_ptr->pclass)
4600         {
4601                 /* For these classes, mana is halved if armour
4602                  * is 30 pounds over their weight limit. */
4603         case CLASS_MAGE:
4604         case CLASS_HIGH_MAGE:
4605         case CLASS_BLUE_MAGE:
4606         case CLASS_MONK:
4607         case CLASS_FORCETRAINER:
4608         case CLASS_SORCERER:
4609         {
4610                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight;
4611                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight;
4612                 break;
4613         }
4614
4615         /* Mana halved if armour is 40 pounds over weight limit. */
4616         case CLASS_PRIEST:
4617         case CLASS_BARD:
4618         case CLASS_TOURIST:
4619         {
4620                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight * 2 / 3;
4621                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight * 2 / 3;
4622                 break;
4623         }
4624
4625         case CLASS_MINDCRAFTER:
4626         case CLASS_BEASTMASTER:
4627         case CLASS_MIRROR_MASTER:
4628         {
4629                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight / 2;
4630                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight / 2;
4631                 break;
4632         }
4633
4634         /* Mana halved if armour is 50 pounds over weight limit. */
4635         case CLASS_ROGUE:
4636         case CLASS_RANGER:
4637         case CLASS_RED_MAGE:
4638         case CLASS_WARRIOR_MAGE:
4639         {
4640                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight / 3;
4641                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight / 3;
4642                 break;
4643         }
4644
4645         /* Mana halved if armour is 60 pounds over weight limit. */
4646         case CLASS_PALADIN:
4647         case CLASS_CHAOS_WARRIOR:
4648         {
4649                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight / 5;
4650                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight / 5;
4651                 break;
4652         }
4653
4654         /* For new classes created, but not yet added to this formula. */
4655         default:
4656         {
4657                 break;
4658         }
4659         }
4660
4661         /* Determine the weight allowance */
4662         max_wgt = mp_ptr->spell_weight;
4663
4664         /* Heavy armor penalizes mana by a percentage.  -LM- */
4665         if ((cur_wgt - max_wgt) > 0)
4666         {
4667                 /* Encumbered */
4668                 creature_ptr->cumber_armor = TRUE;
4669
4670                 /* Subtract a percentage of maximum mana. */
4671                 switch (creature_ptr->pclass)
4672                 {
4673                         /* For these classes, mana is halved if armour
4674                          * is 30 pounds over their weight limit. */
4675                 case CLASS_MAGE:
4676                 case CLASS_HIGH_MAGE:
4677                 case CLASS_BLUE_MAGE:
4678                 {
4679                         msp -= msp * (cur_wgt - max_wgt) / 600;
4680                         break;
4681                 }
4682
4683                 /* Mana halved if armour is 40 pounds over weight limit. */
4684                 case CLASS_PRIEST:
4685                 case CLASS_MINDCRAFTER:
4686                 case CLASS_BEASTMASTER:
4687                 case CLASS_BARD:
4688                 case CLASS_FORCETRAINER:
4689                 case CLASS_TOURIST:
4690                 case CLASS_MIRROR_MASTER:
4691                 {
4692                         msp -= msp * (cur_wgt - max_wgt) / 800;
4693                         break;
4694                 }
4695
4696                 case CLASS_SORCERER:
4697                 {
4698                         msp -= msp * (cur_wgt - max_wgt) / 900;
4699                         break;
4700                 }
4701
4702                 /* Mana halved if armour is 50 pounds over weight limit. */
4703                 case CLASS_ROGUE:
4704                 case CLASS_RANGER:
4705                 case CLASS_MONK:
4706                 case CLASS_RED_MAGE:
4707                 {
4708                         msp -= msp * (cur_wgt - max_wgt) / 1000;
4709                         break;
4710                 }
4711
4712                 /* Mana halved if armour is 60 pounds over weight limit. */
4713                 case CLASS_PALADIN:
4714                 case CLASS_CHAOS_WARRIOR:
4715                 case CLASS_WARRIOR_MAGE:
4716                 {
4717                         msp -= msp * (cur_wgt - max_wgt) / 1200;
4718                         break;
4719                 }
4720
4721                 case CLASS_SAMURAI:
4722                 {
4723                         creature_ptr->cumber_armor = FALSE;
4724                         break;
4725                 }
4726
4727                 /* For new classes created, but not yet added to this formula. */
4728                 default:
4729                 {
4730                         msp -= msp * (cur_wgt - max_wgt) / 800;
4731                         break;
4732                 }
4733                 }
4734         }
4735
4736         /* Mana can never be negative */
4737         if (msp < 0) msp = 0;
4738
4739
4740         /* Maximum mana has changed */
4741         if (creature_ptr->msp != msp)
4742         {
4743                 /* Enforce maximum */
4744                 if ((creature_ptr->csp >= msp) && (creature_ptr->pclass != CLASS_SAMURAI))
4745                 {
4746                         creature_ptr->csp = msp;
4747                         creature_ptr->csp_frac = 0;
4748                 }
4749
4750 #ifdef JP
4751                 /* レベルアップの時は上昇量を表示する */
4752                 if (creature_ptr->level_up_message && (msp > creature_ptr->msp))
4753                 {
4754                         msg_format("最大マジック・ポイントが %d 増加した!", (msp - creature_ptr->msp));
4755                 }
4756 #endif
4757                 /* Save new mana */
4758                 creature_ptr->msp = msp;
4759
4760                 /* Display mana later */
4761                 creature_ptr->redraw |= (PR_MANA);
4762                 creature_ptr->window |= (PW_PLAYER | PW_SPELL);
4763         }
4764
4765
4766         /* Hack -- handle "xtra" mode */
4767         if (current_world_ptr->character_xtra) return;
4768
4769         /* Take note when "glove state" changes */
4770         if (creature_ptr->old_cumber_glove != creature_ptr->cumber_glove)
4771         {
4772                 if (creature_ptr->cumber_glove)
4773                 {
4774                         msg_print(_("手が覆われて呪文が唱えにくい感じがする。", "Your covered hands feel unsuitable for spellcasting."));
4775                 }
4776                 else
4777                 {
4778                         msg_print(_("この手の状態なら、ぐっと呪文が唱えやすい感じだ。", "Your hands feel more suitable for spellcasting."));
4779                 }
4780
4781                 /* Save it */
4782                 creature_ptr->old_cumber_glove = creature_ptr->cumber_glove;
4783         }
4784
4785
4786         /* Take note when "armor state" changes */
4787         if (creature_ptr->old_cumber_armor != creature_ptr->cumber_armor)
4788         {
4789                 if (creature_ptr->cumber_armor)
4790                 {
4791                         msg_print(_("装備の重さで動きが鈍くなってしまっている。", "The weight of your equipment encumbers your movement."));
4792                 }
4793                 else
4794                 {
4795                         msg_print(_("ぐっと楽に体を動かせるようになった。", "You feel able to move more freely."));
4796                 }
4797
4798                 /* Save it */
4799                 creature_ptr->old_cumber_armor = creature_ptr->cumber_armor;
4800         }
4801 }
4802
4803
4804 /*!
4805  * @brief 装備中の射撃武器の威力倍率を返す /
4806  * calcurate the fire rate of target object
4807  * @param o_ptr 計算する射撃武器のアイテム情報参照ポインタ
4808  * @return 射撃倍率の値(100で1.00倍)
4809  */
4810 s16b calc_num_fire(player_type *creature_ptr, object_type *o_ptr)
4811 {
4812         int extra_shots = 0;
4813         int i;
4814         int num = 0;
4815         OBJECT_TYPE_VALUE tval_ammo = bow_tval_ammo(o_ptr);
4816         object_type *q_ptr;
4817         BIT_FLAGS flgs[TR_FLAG_SIZE];
4818
4819         /* Scan the usable creature_ptr->inventory_list */
4820         for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
4821         {
4822                 q_ptr = &creature_ptr->inventory_list[i];
4823                 if (!q_ptr->k_idx) continue;
4824
4825                 /* Do not apply current equip */
4826                 if (i == INVEN_BOW) continue;
4827
4828                 object_flags(q_ptr, flgs);
4829
4830                 /* Boost shots */
4831                 if (have_flag(flgs, TR_XTRA_SHOTS)) extra_shots++;
4832         }
4833
4834         object_flags(o_ptr, flgs);
4835         if (have_flag(flgs, TR_XTRA_SHOTS)) extra_shots++;
4836
4837         if (o_ptr->k_idx && !is_heavy_shoot(creature_ptr, o_ptr))
4838         {
4839                 num = 100;
4840                 /* Extra shots */
4841                 num += (extra_shots * 100);
4842
4843                 /* Hack -- Rangers love Bows */
4844                 if ((creature_ptr->pclass == CLASS_RANGER) &&
4845                         (tval_ammo == TV_ARROW))
4846                 {
4847                         num += (creature_ptr->lev * 4);
4848                 }
4849
4850                 if ((creature_ptr->pclass == CLASS_CAVALRY) &&
4851                         (tval_ammo == TV_ARROW))
4852                 {
4853                         num += (creature_ptr->lev * 3);
4854                 }
4855
4856                 if (creature_ptr->pclass == CLASS_ARCHER)
4857                 {
4858                         if (tval_ammo == TV_ARROW)
4859                                 num += ((creature_ptr->lev * 5) + 50);
4860                         else if ((tval_ammo == TV_BOLT) || (tval_ammo == TV_SHOT))
4861                                 num += (creature_ptr->lev * 4);
4862                 }
4863
4864                 /*
4865                  * Addendum -- also "Reward" high level warriors,
4866                  * with _any_ missile weapon -- TY
4867                  */
4868                 if (creature_ptr->pclass == CLASS_WARRIOR &&
4869                         (tval_ammo <= TV_BOLT) &&
4870                         (tval_ammo >= TV_SHOT))
4871                 {
4872                         num += (creature_ptr->lev * 2);
4873                 }
4874                 if ((creature_ptr->pclass == CLASS_ROGUE) &&
4875                         (tval_ammo == TV_SHOT))
4876                 {
4877                         num += (creature_ptr->lev * 4);
4878                 }
4879         }
4880         return (s16b)num;
4881 }
4882
4883
4884 /*!
4885  * @brief プレイヤーの所持重量制限を計算する /
4886  * Computes current weight limit.
4887  * @return 制限重量(ポンド)
4888  */
4889 WEIGHT weight_limit(player_type *creature_ptr)
4890 {
4891         WEIGHT i;
4892
4893         /* Weight limit based only on strength */
4894         i = (WEIGHT)adj_str_wgt[creature_ptr->stat_ind[A_STR]] * 50; /* Constant was 100 */
4895         if (creature_ptr->pclass == CLASS_BERSERKER) i = i * 3 / 2;
4896
4897         /* Return the result */
4898         return i;
4899 }
4900
4901
4902 /*!
4903  * @brief プレイヤーが現在右手/左手に武器を持っているか判定する /
4904  * @param i 判定する手のID(右手:0 左手:1)
4905  * @return 持っているならばTRUE
4906  */
4907 bool has_melee_weapon(player_type *creature_ptr, int i)
4908 {
4909         return ((creature_ptr->inventory_list[i].k_idx && object_is_melee_weapon(&creature_ptr->inventory_list[i])) ? TRUE : FALSE);
4910 }
4911
4912
4913 /*!
4914  * @brief プレイヤーの現在開いている手の状態を返す
4915  * @param riding_control 乗馬中により片手を必要としている状態ならばTRUEを返す。
4916  * @return 開いている手のビットフラグ
4917  */
4918 BIT_FLAGS16 empty_hands(player_type *creature_ptr, bool riding_control)
4919 {
4920         BIT_FLAGS16 status = EMPTY_HAND_NONE;
4921
4922         if (!creature_ptr->inventory_list[INVEN_RARM].k_idx) status |= EMPTY_HAND_RARM;
4923         if (!creature_ptr->inventory_list[INVEN_LARM].k_idx) status |= EMPTY_HAND_LARM;
4924
4925         if (riding_control && (status != EMPTY_HAND_NONE) && creature_ptr->riding && !(creature_ptr->pet_extra_flags & PF_TWO_HANDS))
4926         {
4927                 if (status & EMPTY_HAND_LARM) status &= ~(EMPTY_HAND_LARM);
4928                 else if (status & EMPTY_HAND_RARM) status &= ~(EMPTY_HAND_RARM);
4929         }
4930
4931         return status;
4932 }
4933
4934
4935 /*!
4936  * @brief プレイヤーが防具重量制限のある職業時にペナルティを受ける状態にあるかどうかを返す。
4937  * @return ペナルティが適用されるならばTRUE。
4938  */
4939 bool heavy_armor(player_type *creature_ptr)
4940 {
4941         WEIGHT monk_arm_wgt = 0;
4942
4943         if ((creature_ptr->pclass != CLASS_MONK) && (creature_ptr->pclass != CLASS_FORCETRAINER) && (creature_ptr->pclass != CLASS_NINJA)) return FALSE;
4944
4945         /* Weight the armor */
4946         if (creature_ptr->inventory_list[INVEN_RARM].tval > TV_SWORD) monk_arm_wgt += creature_ptr->inventory_list[INVEN_RARM].weight;
4947         if (creature_ptr->inventory_list[INVEN_LARM].tval > TV_SWORD) monk_arm_wgt += creature_ptr->inventory_list[INVEN_LARM].weight;
4948         monk_arm_wgt += creature_ptr->inventory_list[INVEN_BODY].weight;
4949         monk_arm_wgt += creature_ptr->inventory_list[INVEN_HEAD].weight;
4950         monk_arm_wgt += creature_ptr->inventory_list[INVEN_OUTER].weight;
4951         monk_arm_wgt += creature_ptr->inventory_list[INVEN_HANDS].weight;
4952         monk_arm_wgt += creature_ptr->inventory_list[INVEN_FEET].weight;
4953
4954         return (monk_arm_wgt > (100 + (creature_ptr->lev * 4)));
4955 }
4956
4957
4958 /*!
4959  * @brief update のフラグに応じた更新をまとめて行う / Handle "update"
4960  * @return なし
4961  * @details 更新処理の対象はプレイヤーの能力修正/光源寿命/HP/MP/魔法の学習状態、他多数の外界の状態判定。
4962  */
4963 void update_creature(player_type *creature_ptr)
4964 {
4965         if (!creature_ptr->update) return;
4966
4967         floor_type *floor_ptr = creature_ptr->current_floor_ptr;
4968         if (creature_ptr->update & (PU_AUTODESTROY))
4969         {
4970                 creature_ptr->update &= ~(PU_AUTODESTROY);
4971                 autopick_delayed_alter(creature_ptr);
4972         }
4973
4974         if (creature_ptr->update & (PU_COMBINE))
4975         {
4976                 creature_ptr->update &= ~(PU_COMBINE);
4977                 combine_pack(creature_ptr);
4978         }
4979
4980         /* Reorder the pack */
4981         if (creature_ptr->update & (PU_REORDER))
4982         {
4983                 creature_ptr->update &= ~(PU_REORDER);
4984                 reorder_pack(creature_ptr);
4985         }
4986
4987         if (creature_ptr->update & (PU_BONUS))
4988         {
4989                 creature_ptr->update &= ~(PU_BONUS);
4990                 calc_alignment(creature_ptr);
4991                 calc_bonuses(creature_ptr);
4992         }
4993
4994         if (creature_ptr->update & (PU_TORCH))
4995         {
4996                 creature_ptr->update &= ~(PU_TORCH);
4997                 calc_torch(creature_ptr);
4998         }
4999
5000         if (creature_ptr->update & (PU_HP))
5001         {
5002                 creature_ptr->update &= ~(PU_HP);
5003                 calc_hitpoints(creature_ptr);
5004         }
5005
5006         if (creature_ptr->update & (PU_MANA))
5007         {
5008                 creature_ptr->update &= ~(PU_MANA);
5009                 calc_mana(creature_ptr);
5010         }
5011
5012         if (creature_ptr->update & (PU_SPELLS))
5013         {
5014                 creature_ptr->update &= ~(PU_SPELLS);
5015                 calc_spells(creature_ptr);
5016         }
5017
5018         /* Character is not ready yet, no screen updates */
5019         if (!current_world_ptr->character_generated) return;
5020
5021         /* Character is in "icky" mode, no screen updates */
5022         if (current_world_ptr->character_icky) return;
5023
5024         if (creature_ptr->update & (PU_UN_LITE))
5025         {
5026                 creature_ptr->update &= ~(PU_UN_LITE);
5027                 forget_lite(floor_ptr);
5028         }
5029
5030         if (creature_ptr->update & (PU_UN_VIEW))
5031         {
5032                 creature_ptr->update &= ~(PU_UN_VIEW);
5033                 forget_view(floor_ptr);
5034         }
5035
5036         if (creature_ptr->update & (PU_VIEW))
5037         {
5038                 creature_ptr->update &= ~(PU_VIEW);
5039                 update_view(creature_ptr, floor_ptr);
5040         }
5041
5042         if (creature_ptr->update & (PU_LITE))
5043         {
5044                 creature_ptr->update &= ~(PU_LITE);
5045                 update_lite(creature_ptr);
5046         }
5047
5048         if (creature_ptr->update & (PU_FLOW))
5049         {
5050                 creature_ptr->update &= ~(PU_FLOW);
5051                 update_flow(creature_ptr);
5052         }
5053
5054         if (creature_ptr->update & (PU_DISTANCE))
5055         {
5056                 creature_ptr->update &= ~(PU_DISTANCE);
5057
5058                 /* Still need to call update_monsters(FALSE) after update_mon_lite() */
5059                 /* creature_ptr->update &= ~(PU_MONSTERS); */
5060
5061                 update_monsters(TRUE);
5062         }
5063
5064         if (creature_ptr->update & (PU_MON_LITE))
5065         {
5066                 creature_ptr->update &= ~(PU_MON_LITE);
5067                 update_mon_lite(creature_ptr);
5068         }
5069
5070         /*
5071          * Mega-Hack -- Delayed visual update
5072          * Only used if update_view(), update_lite() or update_mon_lite() was called
5073          */
5074         if (creature_ptr->update & (PU_DELAY_VIS))
5075         {
5076                 creature_ptr->update &= ~(PU_DELAY_VIS);
5077                 delayed_visual_update(creature_ptr);
5078         }
5079
5080         if (creature_ptr->update & (PU_MONSTERS))
5081         {
5082                 creature_ptr->update &= ~(PU_MONSTERS);
5083                 update_monsters(FALSE);
5084         }
5085 }
5086
5087
5088 /*!
5089  * @brief プレイヤーが魔道書を一冊も持っていないかを判定する
5090  * @return 魔道書を一冊も持っていないならTRUEを返す
5091  */
5092 bool player_has_no_spellbooks(player_type *creature_ptr)
5093 {
5094         int i;
5095         object_type *o_ptr;
5096
5097         for (i = 0; i < INVEN_PACK; i++)
5098         {
5099                 o_ptr = &creature_ptr->inventory_list[i];
5100                 if (o_ptr->k_idx && check_book_realm(o_ptr->tval, o_ptr->sval)) return FALSE;
5101         }
5102
5103         floor_type *floor_ptr = creature_ptr->current_floor_ptr;
5104         for (i = floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].o_idx; i; i = o_ptr->next_o_idx)
5105         {
5106                 o_ptr = &floor_ptr->o_list[i];
5107                 if (o_ptr->k_idx && (o_ptr->marked & OM_FOUND) && check_book_realm(o_ptr->tval, o_ptr->sval)) return FALSE;
5108         }
5109
5110         return TRUE;
5111 }
5112
5113
5114 void take_turn(player_type *creature_ptr, PERCENTAGE need_cost)
5115 {
5116         creature_ptr->energy_use = (ENERGY)need_cost;
5117 }
5118
5119
5120 void free_turn(player_type *creature_ptr)
5121 {
5122         creature_ptr->energy_use = 0;
5123 }
5124
5125
5126 /*!
5127  * @brief プレイヤーを指定座標に配置する / Place the player in the dungeon XXX XXX
5128  * @param x 配置先X座標
5129  * @param y 配置先Y座標
5130  * @return 配置に成功したらTRUE
5131  */
5132 bool player_place(player_type *creature_ptr, POSITION y, POSITION x)
5133 {
5134         /* Paranoia XXX XXX */
5135         if (creature_ptr->current_floor_ptr->grid_array[y][x].m_idx != 0) return FALSE;
5136
5137         /* Save player location */
5138         creature_ptr->y = y;
5139         creature_ptr->x = x;
5140
5141         /* Success */
5142         return TRUE;
5143 }
5144
5145
5146 /*!
5147  * @brief 種族アンバライトが出血時パターンの上に乗った際のペナルティ処理
5148  * @return なし
5149  */
5150 void wreck_the_pattern(player_type *creature_ptr)
5151 {
5152         int to_ruin = 0;
5153         POSITION r_y, r_x;
5154         floor_type *floor_ptr = creature_ptr->current_floor_ptr;
5155         int pattern_type = f_info[floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].feat].subtype;
5156
5157         if (pattern_type == PATTERN_TILE_WRECKED)
5158         {
5159                 /* Ruined already */
5160                 return;
5161         }
5162
5163         msg_print(_("パターンを血で汚してしまった!", "You bleed on the Pattern!"));
5164         msg_print(_("何か恐ろしい事が起こった!", "Something terrible happens!"));
5165
5166         if (!IS_INVULN(creature_ptr)) take_hit(creature_ptr, DAMAGE_NOESCAPE, damroll(10, 8), _("パターン損壊", "corrupting the Pattern"), -1);
5167         to_ruin = randint1(45) + 35;
5168
5169         while (to_ruin--)
5170         {
5171                 scatter(creature_ptr, &r_y, &r_x, creature_ptr->y, creature_ptr->x, 4, 0);
5172
5173                 if (pattern_tile(r_y, r_x) &&
5174                         (f_info[floor_ptr->grid_array[r_y][r_x].feat].subtype != PATTERN_TILE_WRECKED))
5175                 {
5176                         cave_set_feat(creature_ptr, r_y, r_x, feat_pattern_corrupted);
5177                 }
5178         }
5179
5180         cave_set_feat(creature_ptr, creature_ptr->y, creature_ptr->x, feat_pattern_corrupted);
5181 }
5182
5183
5184 /*!
5185  * @brief ELDRITCH_HORRORによるプレイヤーの精神破壊処理
5186  * @param m_ptr ELDRITCH_HORRORを引き起こしたモンスターの参照ポインタ
5187  * @param necro 暗黒領域魔法の詠唱失敗によるものならばTRUEを返す
5188  * @return なし
5189  */
5190 void sanity_blast(player_type *creature_ptr, monster_type *m_ptr, bool necro)
5191 {
5192         int power = 100;
5193
5194         if (creature_ptr->phase_out || !current_world_ptr->character_dungeon) return;
5195
5196         if (!necro && m_ptr)
5197         {
5198                 GAME_TEXT m_name[MAX_NLEN];
5199                 monster_race *r_ptr = &r_info[m_ptr->ap_r_idx];
5200
5201                 power = r_ptr->level / 2;
5202
5203                 monster_desc(m_name, m_ptr, 0);
5204
5205                 if (!(r_ptr->flags1 & RF1_UNIQUE))
5206                 {
5207                         if (r_ptr->flags1 & RF1_FRIENDS)
5208                                 power /= 2;
5209                 }
5210                 else power *= 2;
5211
5212                 if (!current_world_ptr->is_loading_now)
5213                         return; /* No effect yet, just loaded... */
5214
5215                 if (!m_ptr->ml)
5216                         return; /* Cannot see it for some reason */
5217
5218                 if (!(r_ptr->flags2 & RF2_ELDRITCH_HORROR))
5219                         return;
5220
5221                 if (is_pet(m_ptr))
5222                         return; /* Pet eldritch horrors are safe most of the time */
5223
5224                 if (randint1(100) > power) return;
5225
5226                 if (saving_throw(creature_ptr->skill_sav - power))
5227                 {
5228                         return; /* Save, no adverse effects */
5229                 }
5230
5231                 if (creature_ptr->image)
5232                 {
5233                         /* Something silly happens... */
5234                         msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
5235                                 funny_desc[randint0(MAX_SAN_FUNNY)], m_name);
5236
5237                         if (one_in_(3))
5238                         {
5239                                 msg_print(funny_comments[randint0(MAX_SAN_COMMENT)]);
5240                                 creature_ptr->image = creature_ptr->image + randint1(r_ptr->level);
5241                         }
5242
5243                         return; /* Never mind; we can't see it clearly enough */
5244                 }
5245
5246                 /* Something frightening happens... */
5247                 msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
5248                         horror_desc[randint0(MAX_SAN_HORROR)], m_name);
5249
5250                 r_ptr->r_flags2 |= RF2_ELDRITCH_HORROR;
5251
5252                 /* Demon characters are unaffected */
5253                 if (PRACE_IS_(creature_ptr, RACE_IMP) || PRACE_IS_(creature_ptr, RACE_DEMON) || (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON)) return;
5254                 if (current_world_ptr->wizard) return;
5255
5256                 /* Undead characters are 50% likely to be unaffected */
5257                 if (PRACE_IS_(creature_ptr, RACE_SKELETON) || PRACE_IS_(creature_ptr, RACE_ZOMBIE)
5258                         || PRACE_IS_(creature_ptr, RACE_VAMPIRE) || PRACE_IS_(creature_ptr, RACE_SPECTRE) ||
5259                         (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_UNDEAD))
5260                 {
5261                         if (saving_throw(25 + creature_ptr->lev)) return;
5262                 }
5263         }
5264         else if (!necro)
5265         {
5266                 monster_race *r_ptr;
5267                 GAME_TEXT m_name[MAX_NLEN];
5268                 concptr desc;
5269
5270                 get_mon_num_prep(get_nightmare, NULL);
5271
5272                 r_ptr = &r_info[get_mon_num(MAX_DEPTH)];
5273                 power = r_ptr->level + 10;
5274                 desc = r_name + r_ptr->name;
5275
5276                 get_mon_num_prep(NULL, NULL);
5277
5278 #ifdef JP
5279 #else
5280
5281                 if (!(r_ptr->flags1 & RF1_UNIQUE))
5282                         sprintf(m_name, "%s %s", (is_a_vowel(desc[0]) ? "an" : "a"), desc);
5283                 else
5284 #endif
5285                         sprintf(m_name, "%s", desc);
5286
5287                 if (!(r_ptr->flags1 & RF1_UNIQUE))
5288                 {
5289                         if (r_ptr->flags1 & RF1_FRIENDS) power /= 2;
5290                 }
5291                 else power *= 2;
5292
5293                 if (saving_throw(creature_ptr->skill_sav * 100 / power))
5294                 {
5295                         msg_format(_("夢の中で%sに追いかけられた。", "%^s chases you through your dreams."), m_name);
5296                         /* Safe */
5297                         return;
5298                 }
5299
5300                 if (creature_ptr->image)
5301                 {
5302                         /* Something silly happens... */
5303                         msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
5304                                 funny_desc[randint0(MAX_SAN_FUNNY)], m_name);
5305
5306                         if (one_in_(3))
5307                         {
5308                                 msg_print(funny_comments[randint0(MAX_SAN_COMMENT)]);
5309                                 creature_ptr->image = creature_ptr->image + randint1(r_ptr->level);
5310                         }
5311
5312                         /* Never mind; we can't see it clearly enough */
5313                         return;
5314                 }
5315
5316                 /* Something frightening happens... */
5317                 msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
5318                         horror_desc[randint0(MAX_SAN_HORROR)], desc);
5319
5320                 r_ptr->r_flags2 |= RF2_ELDRITCH_HORROR;
5321
5322                 if (!creature_ptr->mimic_form)
5323                 {
5324                         switch (creature_ptr->prace)
5325                         {
5326                                 /* Demons may make a saving throw */
5327                         case RACE_IMP:
5328                         case RACE_DEMON:
5329                                 if (saving_throw(20 + creature_ptr->lev)) return;
5330                                 break;
5331                                 /* Undead may make a saving throw */
5332                         case RACE_SKELETON:
5333                         case RACE_ZOMBIE:
5334                         case RACE_SPECTRE:
5335                         case RACE_VAMPIRE:
5336                                 if (saving_throw(10 + creature_ptr->lev)) return;
5337                                 break;
5338                         }
5339                 }
5340                 else
5341                 {
5342                         /* Demons may make a saving throw */
5343                         if (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON)
5344                         {
5345                                 if (saving_throw(20 + creature_ptr->lev)) return;
5346                         }
5347                         /* Undead may make a saving throw */
5348                         else if (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_UNDEAD)
5349                         {
5350                                 if (saving_throw(10 + creature_ptr->lev)) return;
5351                         }
5352                 }
5353         }
5354         else
5355         {
5356                 msg_print(_("ネクロノミコンを読んで正気を失った!", "Your sanity is shaken by reading the Necronomicon!"));
5357         }
5358
5359         /* 過去の効果無効率再現のため5回saving_throw 実行 */
5360         if (saving_throw(creature_ptr->skill_sav - power)
5361                 && saving_throw(creature_ptr->skill_sav - power)
5362                 && saving_throw(creature_ptr->skill_sav - power)
5363                 && saving_throw(creature_ptr->skill_sav - power)
5364                 && saving_throw(creature_ptr->skill_sav - power)
5365                 )
5366         {
5367                 return;
5368         }
5369
5370         switch (randint1(22))
5371         {
5372         case 1:
5373                 if (!(creature_ptr->muta3 & MUT3_MORONIC))
5374                 {
5375                         if ((creature_ptr->stat_use[A_INT] < 4) && (creature_ptr->stat_use[A_WIS] < 4))
5376                         {
5377                                 msg_print(_("あなたは完璧な馬鹿になったような気がした。しかしそれは元々だった。", "You turn into an utter moron!"));
5378                         }
5379                         else
5380                         {
5381                                 msg_print(_("あなたは完璧な馬鹿になった!", "You turn into an utter moron!"));
5382                         }
5383
5384                         if (creature_ptr->muta3 & MUT3_HYPER_INT)
5385                         {
5386                                 msg_print(_("あなたの脳は生体コンピュータではなくなった。", "Your brain is no longer a living computer."));
5387                                 creature_ptr->muta3 &= ~(MUT3_HYPER_INT);
5388                         }
5389                         creature_ptr->muta3 |= MUT3_MORONIC;
5390                 }
5391                 break;
5392         case 2:
5393                 if (!(creature_ptr->muta2 & MUT2_COWARDICE) && !creature_ptr->resist_fear)
5394                 {
5395                         msg_print(_("あなたはパラノイアになった!", "You become paranoid!"));
5396
5397                         /* Duh, the following should never happen, but anyway... */
5398                         if (creature_ptr->muta3 & MUT3_FEARLESS)
5399                         {
5400                                 msg_print(_("あなたはもう恐れ知らずではなくなった。", "You are no longer fearless."));
5401                                 creature_ptr->muta3 &= ~(MUT3_FEARLESS);
5402                         }
5403
5404                         creature_ptr->muta2 |= MUT2_COWARDICE;
5405                 }
5406                 break;
5407         case 3:
5408                 if (!(creature_ptr->muta2 & MUT2_HALLU) && !creature_ptr->resist_chaos)
5409                 {
5410                         msg_print(_("幻覚をひき起こす精神錯乱に陥った!", "You are afflicted by a hallucinatory insanity!"));
5411                         creature_ptr->muta2 |= MUT2_HALLU;
5412                 }
5413                 break;
5414         case 4:
5415                 if (!(creature_ptr->muta2 & MUT2_BERS_RAGE) && !creature_ptr->resist_conf)
5416                 {
5417                         msg_print(_("激烈な感情の発作におそわれるようになった!", "You become subject to fits of berserk rage!"));
5418                         creature_ptr->muta2 |= MUT2_BERS_RAGE;
5419                 }
5420                 break;
5421         case 5:
5422         case 6:
5423         case 7:
5424         case 8:
5425         case 9:
5426         case 10:
5427         case 11:
5428         case 12:
5429                 /* Mind blast */
5430                 if (!creature_ptr->resist_conf)
5431                 {
5432                         (void)set_confused(creature_ptr, creature_ptr->confused + randint0(4) + 4);
5433                 }
5434                 if (!creature_ptr->resist_chaos && one_in_(3))
5435                 {
5436                         (void)set_image(creature_ptr, creature_ptr->image + randint0(250) + 150);
5437                 }
5438                 return;
5439                 break;
5440         case 13:
5441         case 14:
5442         case 15:
5443                 /* Brain smash */
5444                 if (!creature_ptr->resist_conf)
5445                 {
5446                         (void)set_confused(creature_ptr, creature_ptr->confused + randint0(4) + 4);
5447                 }
5448                 if (!creature_ptr->free_act)
5449                 {
5450                         (void)set_paralyzed(creature_ptr, creature_ptr->paralyzed + randint0(4) + 4);
5451                 }
5452                 if (!creature_ptr->resist_chaos)
5453                 {
5454                         (void)set_image(creature_ptr, creature_ptr->image + randint0(250) + 150);
5455                 }
5456                 do {
5457                         (void)do_dec_stat(creature_ptr, A_INT);
5458                 } while (randint0(100) > creature_ptr->skill_sav && one_in_(2));
5459
5460                 do {
5461                         (void)do_dec_stat(creature_ptr, A_WIS);
5462                 } while (randint0(100) > creature_ptr->skill_sav && one_in_(2));
5463                 break;
5464         case 16:
5465         case 17:
5466                 /* Amnesia */
5467                 if (lose_all_info(creature_ptr))
5468                         msg_print(_("あまりの恐怖に全てのことを忘れてしまった!", "You forget everything in your utmost terror!"));
5469                 break;
5470         case 18:
5471         case 19:
5472         case 20:
5473         case 21:
5474         case 22:
5475                 /* Lose int & wis */
5476                 do_dec_stat(creature_ptr, A_INT);
5477                 do_dec_stat(creature_ptr, A_WIS);
5478                 break;
5479         default:
5480                 break;
5481         }
5482
5483         creature_ptr->update |= PU_BONUS;
5484         handle_stuff(creature_ptr);
5485 }
5486
5487
5488 /*!
5489  * @brief プレイヤーの経験値について整合性のためのチェックと調整を行う /
5490  * Advance experience levels and print experience
5491  * @return なし
5492  */
5493 void check_experience(player_type *creature_ptr)
5494 {
5495         bool level_reward = FALSE;
5496         bool level_mutation = FALSE;
5497         bool level_inc_stat = FALSE;
5498         bool android = (creature_ptr->prace == RACE_ANDROID ? TRUE : FALSE);
5499         PLAYER_LEVEL old_lev = creature_ptr->lev;
5500
5501         /* Hack -- lower limit */
5502         if (creature_ptr->exp < 0) creature_ptr->exp = 0;
5503         if (creature_ptr->max_exp < 0) creature_ptr->max_exp = 0;
5504         if (creature_ptr->max_max_exp < 0) creature_ptr->max_max_exp = 0;
5505
5506         /* Hack -- upper limit */
5507         if (creature_ptr->exp > PY_MAX_EXP) creature_ptr->exp = PY_MAX_EXP;
5508         if (creature_ptr->max_exp > PY_MAX_EXP) creature_ptr->max_exp = PY_MAX_EXP;
5509         if (creature_ptr->max_max_exp > PY_MAX_EXP) creature_ptr->max_max_exp = PY_MAX_EXP;
5510
5511         /* Hack -- maintain "max" experience */
5512         if (creature_ptr->exp > creature_ptr->max_exp) creature_ptr->max_exp = creature_ptr->exp;
5513
5514         /* Hack -- maintain "max max" experience */
5515         if (creature_ptr->max_exp > creature_ptr->max_max_exp) creature_ptr->max_max_exp = creature_ptr->max_exp;
5516
5517         /* Redraw experience */
5518         creature_ptr->redraw |= (PR_EXP);
5519         handle_stuff(creature_ptr);
5520
5521
5522         /* Lose levels while possible */
5523         while ((creature_ptr->lev > 1) &&
5524                 (creature_ptr->exp < ((android ? player_exp_a : player_exp)[creature_ptr->lev - 2] * creature_ptr->expfact / 100L)))
5525         {
5526                 /* Lose a level */
5527                 creature_ptr->lev--;
5528                 creature_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
5529                 creature_ptr->redraw |= (PR_LEV | PR_TITLE);
5530                 creature_ptr->window |= (PW_PLAYER);
5531                 handle_stuff(creature_ptr);
5532         }
5533
5534
5535         /* Gain levels while possible */
5536         while ((creature_ptr->lev < PY_MAX_LEVEL) &&
5537                 (creature_ptr->exp >= ((android ? player_exp_a : player_exp)[creature_ptr->lev - 1] * creature_ptr->expfact / 100L)))
5538         {
5539                 /* Gain a level */
5540                 creature_ptr->lev++;
5541
5542                 /* Save the highest level */
5543                 if (creature_ptr->lev > creature_ptr->max_plv)
5544                 {
5545                         creature_ptr->max_plv = creature_ptr->lev;
5546
5547                         if ((creature_ptr->pclass == CLASS_CHAOS_WARRIOR) ||
5548                                 (creature_ptr->muta2 & MUT2_CHAOS_GIFT))
5549                         {
5550                                 level_reward = TRUE;
5551                         }
5552                         if (creature_ptr->prace == RACE_BEASTMAN)
5553                         {
5554                                 if (one_in_(5)) level_mutation = TRUE;
5555                         }
5556                         level_inc_stat = TRUE;
5557
5558                         exe_write_diary(creature_ptr, DIARY_LEVELUP, creature_ptr->lev, NULL);
5559                 }
5560
5561                 sound(SOUND_LEVEL);
5562
5563                 msg_format(_("レベル %d にようこそ。", "Welcome to level %d."), creature_ptr->lev);
5564
5565                 creature_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
5566                 creature_ptr->redraw |= (PR_LEV | PR_TITLE | PR_EXP);
5567                 creature_ptr->window |= (PW_PLAYER | PW_SPELL | PW_INVEN);
5568
5569                 /* HPとMPの上昇量を表示 */
5570                 creature_ptr->level_up_message = TRUE;
5571                 handle_stuff(creature_ptr);
5572
5573                 creature_ptr->level_up_message = FALSE;
5574
5575                 if (level_inc_stat)
5576                 {
5577                         if (!(creature_ptr->max_plv % 10))
5578                         {
5579                                 int choice;
5580                                 screen_save();
5581                                 while (TRUE)
5582                                 {
5583                                         int n;
5584                                         char tmp[32];
5585
5586                                         cnv_stat(creature_ptr->stat_max[0], tmp);
5587                                         prt(format(_("        a) 腕力 (現在値 %s)", "        a) Str (cur %s)"), tmp), 2, 14);
5588                                         cnv_stat(creature_ptr->stat_max[1], tmp);
5589                                         prt(format(_("        b) 知能 (現在値 %s)", "        b) Int (cur %s)"), tmp), 3, 14);
5590                                         cnv_stat(creature_ptr->stat_max[2], tmp);
5591                                         prt(format(_("        c) 賢さ (現在値 %s)", "        c) Wis (cur %s)"), tmp), 4, 14);
5592                                         cnv_stat(creature_ptr->stat_max[3], tmp);
5593                                         prt(format(_("        d) 器用 (現在値 %s)", "        d) Dex (cur %s)"), tmp), 5, 14);
5594                                         cnv_stat(creature_ptr->stat_max[4], tmp);
5595                                         prt(format(_("        e) 耐久 (現在値 %s)", "        e) Con (cur %s)"), tmp), 6, 14);
5596                                         cnv_stat(creature_ptr->stat_max[5], tmp);
5597                                         prt(format(_("        f) 魅力 (現在値 %s)", "        f) Chr (cur %s)"), tmp), 7, 14);
5598
5599                                         prt("", 8, 14);
5600                                         prt(_("        どの能力値を上げますか?", "        Which stat do you want to raise?"), 1, 14);
5601
5602                                         while (TRUE)
5603                                         {
5604                                                 choice = inkey();
5605                                                 if ((choice >= 'a') && (choice <= 'f')) break;
5606                                         }
5607                                         for (n = 0; n < A_MAX; n++)
5608                                                 if (n != choice - 'a')
5609                                                         prt("", n + 2, 14);
5610                                         if (get_check(_("よろしいですか?", "Are you sure? "))) break;
5611                                 }
5612                                 do_inc_stat(creature_ptr, choice - 'a');
5613                                 screen_load();
5614                         }
5615                         else if (!(creature_ptr->max_plv % 2))
5616                                 do_inc_stat(creature_ptr, randint0(6));
5617                 }
5618
5619                 if (level_mutation)
5620                 {
5621                         msg_print(_("あなたは変わった気がする...", "You feel different..."));
5622                         (void)gain_mutation(creature_ptr, 0);
5623                         level_mutation = FALSE;
5624                 }
5625
5626                 /*
5627                  * 報酬でレベルが上ると再帰的に check_experience(creature_ptr) が
5628                  * 呼ばれるので順番を最後にする。
5629                  */
5630                 if (level_reward)
5631                 {
5632                         gain_level_reward(creature_ptr, 0);
5633                         level_reward = FALSE;
5634                 }
5635
5636                 creature_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
5637                 creature_ptr->redraw |= (PR_LEV | PR_TITLE);
5638                 creature_ptr->window |= (PW_PLAYER | PW_SPELL);
5639                 handle_stuff(creature_ptr);
5640         }
5641
5642         /* Load an autopick preference file */
5643         if (old_lev != creature_ptr->lev) autopick_load_pref(creature_ptr, FALSE);
5644 }
5645
5646
5647 /*!
5648  * @brief 現在の修正後能力値を3~17及び18/xxx形式に変換する / Converts stat num into a six-char (right justified) string
5649  * @param val 能力値
5650  * @param out_val 出力先文字列ポインタ
5651  * @return なし
5652  */
5653 void cnv_stat(int val, char *out_val)
5654 {
5655         /* Above 18 */
5656         if (val > 18)
5657         {
5658                 int bonus = (val - 18);
5659
5660                 if (bonus >= 220)
5661                 {
5662                         sprintf(out_val, "18/%3s", "***");
5663                 }
5664                 else if (bonus >= 100)
5665                 {
5666                         sprintf(out_val, "18/%03d", bonus);
5667                 }
5668                 else
5669                 {
5670                         sprintf(out_val, " 18/%02d", bonus);
5671                 }
5672         }
5673
5674         /* From 3 to 18 */
5675         else
5676         {
5677                 sprintf(out_val, "    %2d", val);
5678         }
5679 }
5680
5681
5682 /*!
5683  * @brief 能力値現在値から3~17及び18/xxx様式に基づく加減算を行う。
5684  * Modify a stat value by a "modifier", return new value
5685  * @param value 現在値
5686  * @param amount 加減算値
5687  * @return 加減算後の値
5688  * @details
5689  * <pre>
5690  * Stats go up: 3,4,...,17,18,18/10,18/20,...,18/220
5691  * Or even: 18/13, 18/23, 18/33, ..., 18/220
5692  * Stats go down: 18/220, 18/210,..., 18/10, 18, 17, ..., 3
5693  * Or even: 18/13, 18/03, 18, 17, ..., 3
5694  * </pre>
5695  */
5696 s16b modify_stat_value(int value, int amount)
5697 {
5698         int    i;
5699
5700         /* Reward */
5701         if (amount > 0)
5702         {
5703                 /* Apply each point */
5704                 for (i = 0; i < amount; i++)
5705                 {
5706                         /* One point at a time */
5707                         if (value < 18) value++;
5708
5709                         /* Ten "points" at a time */
5710                         else value += 10;
5711                 }
5712         }
5713
5714         /* Penalty */
5715         else if (amount < 0)
5716         {
5717                 /* Apply each point */
5718                 for (i = 0; i < (0 - amount); i++)
5719                 {
5720                         /* Ten points at a time */
5721                         if (value >= 18 + 10) value -= 10;
5722
5723                         /* Hack -- prevent weirdness */
5724                         else if (value > 18) value = 18;
5725
5726                         /* One point at a time */
5727                         else if (value > 3) value--;
5728                 }
5729         }
5730
5731         /* Return new value */
5732         return (s16b)(value);
5733 }
5734
5735
5736 /*!
5737  * @brief スコアを計算する /
5738  * Hack -- Calculates the total number of points earned         -JWT-
5739  * @return なし
5740  * @details
5741  */
5742 long calc_score(player_type *creature_ptr)
5743 {
5744         int i, mult = 100;
5745         DEPTH max_dl = 0;
5746         u32b point, point_h, point_l;
5747         int arena_win = MIN(creature_ptr->arena_number, MAX_ARENA_MONS);
5748
5749         if (!preserve_mode) mult += 10;
5750         if (!autoroller) mult += 10;
5751         if (!smart_learn) mult -= 20;
5752         if (smart_cheat) mult += 30;
5753         if (ironman_shops) mult += 50;
5754         if (ironman_small_levels) mult += 10;
5755         if (ironman_empty_levels) mult += 20;
5756         if (!powerup_home) mult += 50;
5757         if (ironman_rooms) mult += 100;
5758         if (ironman_nightmare) mult += 100;
5759
5760         if (mult < 5) mult = 5;
5761
5762         for (i = 0; i < current_world_ptr->max_d_idx; i++)
5763                 if (max_dlv[i] > max_dl)
5764                         max_dl = max_dlv[i];
5765
5766         point_l = (creature_ptr->max_max_exp + (100 * max_dl));
5767         point_h = point_l / 0x10000L;
5768         point_l = point_l % 0x10000L;
5769         point_h *= mult;
5770         point_l *= mult;
5771         point_h += point_l / 0x10000L;
5772         point_l %= 0x10000L;
5773
5774         point_l += ((point_h % 100) << 16);
5775         point_h /= 100;
5776         point_l /= 100;
5777
5778         point = (point_h << 16) + (point_l);
5779         if (creature_ptr->arena_number >= 0)
5780                 point += (arena_win * arena_win * (arena_win > 29 ? 1000 : 100));
5781
5782         if (ironman_downward) point *= 2;
5783         if (creature_ptr->pclass == CLASS_BERSERKER)
5784         {
5785                 if (creature_ptr->prace == RACE_SPECTRE)
5786                         point = point / 5;
5787         }
5788
5789         if ((creature_ptr->pseikaku == SEIKAKU_MUNCHKIN) && point)
5790         {
5791                 point = 1;
5792                 if (current_world_ptr->total_winner) point = 2;
5793         }
5794         if (easy_band) point = (0 - point);
5795
5796         return point;
5797 }
5798
5799
5800 void cheat_death(player_type *creature_ptr)
5801 {
5802         /* Mark social class, reset age, if needed */
5803         if (creature_ptr->sc) creature_ptr->sc = creature_ptr->age = 0;
5804
5805         /* Increase age */
5806         creature_ptr->age++;
5807
5808         /* Mark savefile */
5809         current_world_ptr->noscore |= 0x0001;
5810
5811         msg_print(_("ウィザードモードに念を送り、死を欺いた。", "You invoke wizard mode and cheat death."));
5812         msg_print(NULL);
5813
5814         (void)life_stream(creature_ptr, FALSE, FALSE);
5815
5816         if (creature_ptr->pclass == CLASS_MAGIC_EATER)
5817         {
5818                 int magic_idx;
5819                 for (magic_idx = 0; magic_idx < EATER_EXT * 2; magic_idx++)
5820                 {
5821                         creature_ptr->magic_num1[magic_idx] = creature_ptr->magic_num2[magic_idx] * EATER_CHARGE;
5822                 }
5823                 for (; magic_idx < EATER_EXT * 3; magic_idx++)
5824                 {
5825                         creature_ptr->magic_num1[magic_idx] = 0;
5826                 }
5827         }
5828
5829         /* Restore spell points */
5830         creature_ptr->csp = creature_ptr->msp;
5831         creature_ptr->csp_frac = 0;
5832
5833         /* Hack -- cancel recall */
5834         if (creature_ptr->word_recall)
5835         {
5836                 msg_print(_("張りつめた大気が流れ去った...", "A tension leaves the air around you..."));
5837                 msg_print(NULL);
5838
5839                 /* Hack -- Prevent recall */
5840                 creature_ptr->word_recall = 0;
5841                 creature_ptr->redraw |= (PR_STATUS);
5842         }
5843
5844         /* Hack -- cancel alter */
5845         if (creature_ptr->alter_reality)
5846         {
5847                 /* Hack -- Prevent alter */
5848                 creature_ptr->alter_reality = 0;
5849                 creature_ptr->redraw |= (PR_STATUS);
5850         }
5851
5852         /* Note cause of death */
5853         (void)strcpy(creature_ptr->died_from, _("死の欺き", "Cheating death"));
5854
5855         /* Do not die */
5856         creature_ptr->is_dead = FALSE;
5857
5858         /* Hack -- Prevent starvation */
5859         (void)set_food(creature_ptr, PY_FOOD_MAX - 1);
5860
5861         floor_type *floor_ptr = creature_ptr->current_floor_ptr;
5862         floor_ptr->dun_level = 0;
5863         floor_ptr->inside_arena = FALSE;
5864         creature_ptr->phase_out = FALSE;
5865         leaving_quest = 0;
5866         floor_ptr->inside_quest = 0;
5867         if (creature_ptr->dungeon_idx) creature_ptr->recall_dungeon = creature_ptr->dungeon_idx;
5868         creature_ptr->dungeon_idx = 0;
5869         if (lite_town || vanilla_town)
5870         {
5871                 creature_ptr->wilderness_y = 1;
5872                 creature_ptr->wilderness_x = 1;
5873                 if (vanilla_town)
5874                 {
5875                         creature_ptr->oldpy = 10;
5876                         creature_ptr->oldpx = 34;
5877                 }
5878                 else
5879                 {
5880                         creature_ptr->oldpy = 33;
5881                         creature_ptr->oldpx = 131;
5882                 }
5883         }
5884         else
5885         {
5886                 creature_ptr->wilderness_y = 48;
5887                 creature_ptr->wilderness_x = 5;
5888                 creature_ptr->oldpy = 33;
5889                 creature_ptr->oldpx = 131;
5890         }
5891         creature_ptr->wild_mode = FALSE;
5892         creature_ptr->leaving = TRUE;
5893
5894         exe_write_diary(creature_ptr, DIARY_DESCRIPTION, 1,
5895                 _("                            しかし、生き返った。",
5896                         "                            but revived."));
5897
5898         /* Prepare next floor */
5899         leave_floor(creature_ptr);
5900         wipe_m_list();
5901 }
5902
5903
5904 /*!
5905  * @param creature_ptr プレーヤーへの参照ポインタ
5906  * @return 祝福状態ならばTRUE
5907  */
5908 bool is_blessed(player_type *creature_ptr)
5909 {
5910         return creature_ptr->blessed || music_singing(creature_ptr, MUSIC_BLESS) || hex_spelling(HEX_BLESS);
5911 }
5912
5913
5914 bool is_oppose_acid(player_type *creature_ptr)
5915 {
5916         return creature_ptr->oppose_acid || music_singing(creature_ptr, MUSIC_RESIST) || (creature_ptr->special_defense & KATA_MUSOU);
5917 }
5918
5919
5920 bool is_oppose_elec(player_type *creature_ptr)
5921 {
5922         return creature_ptr->oppose_elec || music_singing(creature_ptr, MUSIC_RESIST) || (creature_ptr->special_defense & KATA_MUSOU);
5923 }
5924
5925
5926 bool is_oppose_fire(player_type *creature_ptr)
5927 {
5928         return creature_ptr->oppose_fire || music_singing(creature_ptr, MUSIC_RESIST) || (creature_ptr->special_defense & KATA_MUSOU);
5929 }
5930
5931
5932 bool is_oppose_cold(player_type *creature_ptr)
5933 {
5934         return creature_ptr->oppose_cold || music_singing(creature_ptr, MUSIC_RESIST) || (creature_ptr->special_defense & KATA_MUSOU);
5935 }
5936
5937
5938 bool is_oppose_pois(player_type *creature_ptr)
5939 {
5940         return creature_ptr->oppose_pois || music_singing(creature_ptr, MUSIC_RESIST) || (creature_ptr->special_defense & KATA_MUSOU);
5941 }
5942
5943
5944 bool is_tim_esp(player_type *creature_ptr)
5945 {
5946         return creature_ptr->tim_esp || music_singing(creature_ptr, MUSIC_MIND) || (creature_ptr->concent >= CONCENT_TELE_THRESHOLD);
5947 }
5948
5949
5950 bool is_tim_stealth(player_type *creature_ptr)
5951 {
5952         return creature_ptr->tim_stealth || music_singing(creature_ptr, MUSIC_STEALTH);
5953 }
5954
5955
5956 bool is_time_limit_esp(player_type *creature_ptr)
5957 {
5958         return creature_ptr->tim_esp || music_singing(creature_ptr, MUSIC_MIND) || (creature_ptr->concent >= CONCENT_TELE_THRESHOLD);
5959 }
5960
5961
5962 bool is_time_limit_stealth(player_type *creature_ptr)
5963 {
5964         return creature_ptr->tim_stealth || music_singing(creature_ptr, MUSIC_STEALTH);
5965 }
5966
5967
5968 bool can_two_hands_wielding(player_type *creature_ptr)
5969 {
5970         return !creature_ptr->riding || (creature_ptr->pet_extra_flags & PF_TWO_HANDS);
5971 }