OSDN Git Service

[Refactor] #37353 inside_arena を player_type から floor_type へ移動. / Move inside_arena...
[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 #if 0
1382         bool have_dd_s = FALSE, have_dd_t = FALSE;
1383 #endif
1384         bool have_sw = FALSE, have_kabe = FALSE;
1385         bool easy_2weapon = FALSE;
1386         bool riding_levitation = FALSE;
1387         OBJECT_IDX this_o_idx, next_o_idx = 0;
1388         const player_race *tmp_rp_ptr;
1389
1390         /* Save the old vision stuff */
1391         bool old_telepathy = creature_ptr->telepathy;
1392         bool old_esp_animal = creature_ptr->esp_animal;
1393         bool old_esp_undead = creature_ptr->esp_undead;
1394         bool old_esp_demon = creature_ptr->esp_demon;
1395         bool old_esp_orc = creature_ptr->esp_orc;
1396         bool old_esp_troll = creature_ptr->esp_troll;
1397         bool old_esp_giant = creature_ptr->esp_giant;
1398         bool old_esp_dragon = creature_ptr->esp_dragon;
1399         bool old_esp_human = creature_ptr->esp_human;
1400         bool old_esp_evil = creature_ptr->esp_evil;
1401         bool old_esp_good = creature_ptr->esp_good;
1402         bool old_esp_nonliving = creature_ptr->esp_nonliving;
1403         bool old_esp_unique = creature_ptr->esp_unique;
1404         bool old_see_inv = creature_ptr->see_inv;
1405         bool old_mighty_throw = creature_ptr->mighty_throw;
1406
1407         /* Current feature under player. */
1408         feature_type *f_ptr = &f_info[p_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].feat];
1409
1410         /* Save the old armor class */
1411         ARMOUR_CLASS old_dis_ac = creature_ptr->dis_ac;
1412         ARMOUR_CLASS old_dis_to_a = creature_ptr->dis_to_a;
1413
1414
1415         /* Clear extra blows/shots */
1416         extra_blows[0] = extra_blows[1] = 0;
1417
1418         /* Clear the stat modifiers */
1419         for (i = 0; i < A_MAX; i++) creature_ptr->stat_add[i] = 0;
1420
1421
1422         /* Clear the Displayed/Real armor class */
1423         creature_ptr->dis_ac = creature_ptr->ac = 0;
1424
1425         /* Clear the Displayed/Real Bonuses */
1426         creature_ptr->dis_to_h[0] = creature_ptr->to_h[0] = 0;
1427         creature_ptr->dis_to_h[1] = creature_ptr->to_h[1] = 0;
1428         creature_ptr->dis_to_d[0] = creature_ptr->to_d[0] = 0;
1429         creature_ptr->dis_to_d[1] = creature_ptr->to_d[1] = 0;
1430         creature_ptr->dis_to_h_b = creature_ptr->to_h_b = 0;
1431         creature_ptr->dis_to_a = creature_ptr->to_a = 0;
1432         creature_ptr->to_h_m = 0;
1433         creature_ptr->to_d_m = 0;
1434
1435         creature_ptr->to_m_chance = 0;
1436
1437         /* Clear the Extra Dice Bonuses */
1438         creature_ptr->to_dd[0] = creature_ptr->to_ds[0] = 0;
1439         creature_ptr->to_dd[1] = creature_ptr->to_ds[1] = 0;
1440
1441         /* Start with "normal" speed */
1442         new_speed = 110;
1443
1444         /* Start with a single blow per turn */
1445         creature_ptr->num_blow[0] = 1;
1446         creature_ptr->num_blow[1] = 1;
1447
1448         /* Start with a single shot per turn */
1449         creature_ptr->num_fire = 100;
1450
1451         /* Reset the "xtra" tval */
1452         creature_ptr->tval_xtra = 0;
1453
1454         /* Reset the "ammo" tval */
1455         creature_ptr->tval_ammo = 0;
1456
1457         /* Clear all the flags */
1458         creature_ptr->cursed = 0L;
1459         creature_ptr->bless_blade = FALSE;
1460         creature_ptr->xtra_might = FALSE;
1461         creature_ptr->impact[0] = FALSE;
1462         creature_ptr->impact[1] = FALSE;
1463         creature_ptr->pass_wall = FALSE;
1464         creature_ptr->kill_wall = FALSE;
1465         creature_ptr->dec_mana = FALSE;
1466         creature_ptr->easy_spell = FALSE;
1467         creature_ptr->heavy_spell = FALSE;
1468         creature_ptr->see_inv = FALSE;
1469         creature_ptr->free_act = FALSE;
1470         creature_ptr->slow_digest = FALSE;
1471         creature_ptr->regenerate = FALSE;
1472         creature_ptr->can_swim = FALSE;
1473         creature_ptr->levitation = FALSE;
1474         creature_ptr->hold_exp = FALSE;
1475         creature_ptr->telepathy = FALSE;
1476         creature_ptr->esp_animal = FALSE;
1477         creature_ptr->esp_undead = FALSE;
1478         creature_ptr->esp_demon = FALSE;
1479         creature_ptr->esp_orc = FALSE;
1480         creature_ptr->esp_troll = FALSE;
1481         creature_ptr->esp_giant = FALSE;
1482         creature_ptr->esp_dragon = FALSE;
1483         creature_ptr->esp_human = FALSE;
1484         creature_ptr->esp_evil = FALSE;
1485         creature_ptr->esp_good = FALSE;
1486         creature_ptr->esp_nonliving = FALSE;
1487         creature_ptr->esp_unique = FALSE;
1488         creature_ptr->lite = FALSE;
1489         creature_ptr->sustain_str = FALSE;
1490         creature_ptr->sustain_int = FALSE;
1491         creature_ptr->sustain_wis = FALSE;
1492         creature_ptr->sustain_con = FALSE;
1493         creature_ptr->sustain_dex = FALSE;
1494         creature_ptr->sustain_chr = FALSE;
1495         creature_ptr->resist_acid = FALSE;
1496         creature_ptr->resist_elec = FALSE;
1497         creature_ptr->resist_fire = FALSE;
1498         creature_ptr->resist_cold = FALSE;
1499         creature_ptr->resist_pois = FALSE;
1500         creature_ptr->resist_conf = FALSE;
1501         creature_ptr->resist_sound = FALSE;
1502         creature_ptr->resist_lite = FALSE;
1503         creature_ptr->resist_dark = FALSE;
1504         creature_ptr->resist_chaos = FALSE;
1505         creature_ptr->resist_disen = FALSE;
1506         creature_ptr->resist_shard = FALSE;
1507         creature_ptr->resist_nexus = FALSE;
1508         creature_ptr->resist_blind = FALSE;
1509         creature_ptr->resist_neth = FALSE;
1510         creature_ptr->resist_time = FALSE;
1511         creature_ptr->resist_water = FALSE;
1512         creature_ptr->resist_fear = FALSE;
1513         creature_ptr->reflect = FALSE;
1514         creature_ptr->sh_fire = FALSE;
1515         creature_ptr->sh_elec = FALSE;
1516         creature_ptr->sh_cold = FALSE;
1517         creature_ptr->anti_magic = FALSE;
1518         creature_ptr->anti_tele = FALSE;
1519         creature_ptr->warning = FALSE;
1520         creature_ptr->mighty_throw = FALSE;
1521         creature_ptr->see_nocto = FALSE;
1522
1523         creature_ptr->immune_acid = FALSE;
1524         creature_ptr->immune_elec = FALSE;
1525         creature_ptr->immune_fire = FALSE;
1526         creature_ptr->immune_cold = FALSE;
1527
1528         creature_ptr->ryoute = FALSE;
1529         creature_ptr->migite = FALSE;
1530         creature_ptr->hidarite = FALSE;
1531         creature_ptr->no_flowed = FALSE;
1532
1533         if (creature_ptr->mimic_form) tmp_rp_ptr = &mimic_info[creature_ptr->mimic_form];
1534         else tmp_rp_ptr = &race_info[creature_ptr->prace];
1535
1536         /* Base infravision (purely racial) */
1537         creature_ptr->see_infra = tmp_rp_ptr->infra;
1538
1539         /* Base skill -- disarming */
1540         creature_ptr->skill_dis = tmp_rp_ptr->r_dis + cp_ptr->c_dis + ap_ptr->a_dis;
1541
1542         /* Base skill -- magic devices */
1543         creature_ptr->skill_dev = tmp_rp_ptr->r_dev + cp_ptr->c_dev + ap_ptr->a_dev;
1544
1545         /* Base skill -- saving throw */
1546         creature_ptr->skill_sav = tmp_rp_ptr->r_sav + cp_ptr->c_sav + ap_ptr->a_sav;
1547
1548         /* Base skill -- stealth */
1549         creature_ptr->skill_stl = tmp_rp_ptr->r_stl + cp_ptr->c_stl + ap_ptr->a_stl;
1550
1551         /* Base skill -- searching ability */
1552         creature_ptr->skill_srh = tmp_rp_ptr->r_srh + cp_ptr->c_srh + ap_ptr->a_srh;
1553
1554         /* Base skill -- searching frequency */
1555         creature_ptr->skill_fos = tmp_rp_ptr->r_fos + cp_ptr->c_fos + ap_ptr->a_fos;
1556
1557         /* Base skill -- combat (normal) */
1558         creature_ptr->skill_thn = tmp_rp_ptr->r_thn + cp_ptr->c_thn + ap_ptr->a_thn;
1559
1560         /* Base skill -- combat (shooting) */
1561         creature_ptr->skill_thb = tmp_rp_ptr->r_thb + cp_ptr->c_thb + ap_ptr->a_thb;
1562
1563         /* Base skill -- combat (throwing) */
1564         creature_ptr->skill_tht = tmp_rp_ptr->r_thb + cp_ptr->c_thb + ap_ptr->a_thb;
1565
1566         /* Base skill -- digging */
1567         creature_ptr->skill_dig = 0;
1568
1569         if (has_melee_weapon(creature_ptr, INVEN_RARM)) creature_ptr->migite = TRUE;
1570         if (has_melee_weapon(creature_ptr, INVEN_LARM))
1571         {
1572                 creature_ptr->hidarite = TRUE;
1573                 if (!creature_ptr->migite) default_hand = 1;
1574         }
1575
1576         if (CAN_TWO_HANDS_WIELDING())
1577         {
1578                 if (creature_ptr->migite && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_LARM) &&
1579                         object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_RARM]))
1580                 {
1581                         creature_ptr->ryoute = TRUE;
1582                 }
1583                 else if (creature_ptr->hidarite && (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_RARM) &&
1584                         object_allow_two_hands_wielding(&creature_ptr->inventory_list[INVEN_LARM]))
1585                 {
1586                         creature_ptr->ryoute = TRUE;
1587                 }
1588                 else
1589                 {
1590                         switch (creature_ptr->pclass)
1591                         {
1592                         case CLASS_MONK:
1593                         case CLASS_FORCETRAINER:
1594                         case CLASS_BERSERKER:
1595                                 if (empty_hands(creature_ptr, FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))
1596                                 {
1597                                         creature_ptr->migite = TRUE;
1598                                         creature_ptr->ryoute = TRUE;
1599                                 }
1600                                 break;
1601                         }
1602                 }
1603         }
1604
1605         if (!creature_ptr->migite && !creature_ptr->hidarite)
1606         {
1607                 if (empty_hands_status & EMPTY_HAND_RARM) creature_ptr->migite = TRUE;
1608                 else if (empty_hands_status == EMPTY_HAND_LARM)
1609                 {
1610                         creature_ptr->hidarite = TRUE;
1611                         default_hand = 1;
1612                 }
1613         }
1614
1615         if (creature_ptr->special_defense & KAMAE_MASK)
1616         {
1617                 if (!(empty_hands_status & EMPTY_HAND_RARM))
1618                 {
1619                         set_action(creature_ptr, ACTION_NONE);
1620                 }
1621         }
1622
1623         switch (creature_ptr->pclass)
1624         {
1625         case CLASS_WARRIOR:
1626                 if (creature_ptr->lev > 29) creature_ptr->resist_fear = TRUE;
1627                 if (creature_ptr->lev > 44) creature_ptr->regenerate = TRUE;
1628                 break;
1629         case CLASS_PALADIN:
1630                 if (creature_ptr->lev > 39) creature_ptr->resist_fear = TRUE;
1631                 break;
1632         case CLASS_CHAOS_WARRIOR:
1633                 if (creature_ptr->lev > 29) creature_ptr->resist_chaos = TRUE;
1634                 if (creature_ptr->lev > 39) creature_ptr->resist_fear = TRUE;
1635                 break;
1636         case CLASS_MINDCRAFTER:
1637                 if (creature_ptr->lev > 9) creature_ptr->resist_fear = TRUE;
1638                 if (creature_ptr->lev > 19) creature_ptr->sustain_wis = TRUE;
1639                 if (creature_ptr->lev > 29) creature_ptr->resist_conf = TRUE;
1640                 if (creature_ptr->lev > 39) creature_ptr->telepathy = TRUE;
1641                 break;
1642         case CLASS_MONK:
1643         case CLASS_FORCETRAINER:
1644                 /* Unencumbered Monks become faster every 10 levels */
1645                 if (!(heavy_armor(creature_ptr)))
1646                 {
1647                         if (!(PRACE_IS_(creature_ptr, RACE_KLACKON) ||
1648                                 PRACE_IS_(creature_ptr, RACE_SPRITE) ||
1649                                 (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)))
1650                                 new_speed += (creature_ptr->lev) / 10;
1651
1652                         /* Free action if unencumbered at level 25 */
1653                         if (creature_ptr->lev > 24)
1654                                 creature_ptr->free_act = TRUE;
1655                 }
1656                 break;
1657         case CLASS_SORCERER:
1658                 creature_ptr->to_a -= 50;
1659                 creature_ptr->dis_to_a -= 50;
1660                 break;
1661         case CLASS_BARD:
1662                 creature_ptr->resist_sound = TRUE;
1663                 break;
1664         case CLASS_SAMURAI:
1665                 if (creature_ptr->lev > 29) creature_ptr->resist_fear = TRUE;
1666                 break;
1667         case CLASS_BERSERKER:
1668                 creature_ptr->shero = 1;
1669                 creature_ptr->sustain_str = TRUE;
1670                 creature_ptr->sustain_dex = TRUE;
1671                 creature_ptr->sustain_con = TRUE;
1672                 creature_ptr->regenerate = TRUE;
1673                 creature_ptr->free_act = TRUE;
1674                 new_speed += 2;
1675                 if (creature_ptr->lev > 29) new_speed++;
1676                 if (creature_ptr->lev > 39) new_speed++;
1677                 if (creature_ptr->lev > 44) new_speed++;
1678                 if (creature_ptr->lev > 49) new_speed++;
1679                 creature_ptr->to_a += 10 + creature_ptr->lev / 2;
1680                 creature_ptr->dis_to_a += 10 + creature_ptr->lev / 2;
1681                 creature_ptr->skill_dig += (100 + creature_ptr->lev * 8);
1682                 if (creature_ptr->lev > 39) creature_ptr->reflect = TRUE;
1683                 creature_ptr->redraw |= PR_STATUS;
1684                 break;
1685         case CLASS_MIRROR_MASTER:
1686                 if (creature_ptr->lev > 39) creature_ptr->reflect = TRUE;
1687                 break;
1688         case CLASS_NINJA:
1689                 /* Unencumbered Ninjas become faster every 10 levels */
1690                 if (heavy_armor(creature_ptr))
1691                 {
1692                         new_speed -= (creature_ptr->lev) / 10;
1693                         creature_ptr->skill_stl -= (creature_ptr->lev) / 10;
1694                 }
1695                 else if ((!creature_ptr->inventory_list[INVEN_RARM].k_idx || creature_ptr->migite) &&
1696                         (!creature_ptr->inventory_list[INVEN_LARM].k_idx || creature_ptr->hidarite))
1697                 {
1698                         new_speed += 3;
1699                         if (!(PRACE_IS_(creature_ptr, RACE_KLACKON) ||
1700                                 PRACE_IS_(creature_ptr, RACE_SPRITE) ||
1701                                 (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)))
1702                                 new_speed += (creature_ptr->lev) / 10;
1703                         creature_ptr->skill_stl += (creature_ptr->lev) / 10;
1704
1705                         /* Free action if unencumbered at level 25 */
1706                         if (creature_ptr->lev > 24)
1707                                 creature_ptr->free_act = TRUE;
1708                 }
1709                 if ((!creature_ptr->inventory_list[INVEN_RARM].k_idx || creature_ptr->migite) &&
1710                         (!creature_ptr->inventory_list[INVEN_LARM].k_idx || creature_ptr->hidarite))
1711                 {
1712                         creature_ptr->to_a += creature_ptr->lev / 2 + 5;
1713                         creature_ptr->dis_to_a += creature_ptr->lev / 2 + 5;
1714                 }
1715                 creature_ptr->slow_digest = TRUE;
1716                 creature_ptr->resist_fear = TRUE;
1717                 if (creature_ptr->lev > 19) creature_ptr->resist_pois = TRUE;
1718                 if (creature_ptr->lev > 24) creature_ptr->sustain_dex = TRUE;
1719                 if (creature_ptr->lev > 29) creature_ptr->see_inv = TRUE;
1720                 if (creature_ptr->lev > 44)
1721                 {
1722                         creature_ptr->oppose_pois = 1;
1723                         creature_ptr->redraw |= PR_STATUS;
1724                 }
1725                 creature_ptr->see_nocto = TRUE;
1726                 break;
1727         }
1728
1729         /***** Races ****/
1730         if (creature_ptr->mimic_form)
1731         {
1732                 switch (creature_ptr->mimic_form)
1733                 {
1734                 case MIMIC_DEMON:
1735                         creature_ptr->hold_exp = TRUE;
1736                         creature_ptr->resist_chaos = TRUE;
1737                         creature_ptr->resist_neth = TRUE;
1738                         creature_ptr->resist_fire = TRUE;
1739                         creature_ptr->oppose_fire = 1;
1740                         creature_ptr->see_inv = TRUE;
1741                         new_speed += 3;
1742                         creature_ptr->redraw |= PR_STATUS;
1743                         creature_ptr->to_a += 10;
1744                         creature_ptr->dis_to_a += 10;
1745                         break;
1746                 case MIMIC_DEMON_LORD:
1747                         creature_ptr->hold_exp = TRUE;
1748                         creature_ptr->resist_chaos = TRUE;
1749                         creature_ptr->resist_neth = TRUE;
1750                         creature_ptr->immune_fire = TRUE;
1751                         creature_ptr->resist_acid = TRUE;
1752                         creature_ptr->resist_fire = TRUE;
1753                         creature_ptr->resist_cold = TRUE;
1754                         creature_ptr->resist_elec = TRUE;
1755                         creature_ptr->resist_pois = TRUE;
1756                         creature_ptr->resist_conf = TRUE;
1757                         creature_ptr->resist_disen = TRUE;
1758                         creature_ptr->resist_nexus = TRUE;
1759                         creature_ptr->resist_fear = TRUE;
1760                         creature_ptr->sh_fire = TRUE;
1761                         creature_ptr->see_inv = TRUE;
1762                         creature_ptr->telepathy = TRUE;
1763                         creature_ptr->levitation = TRUE;
1764                         creature_ptr->kill_wall = TRUE;
1765                         new_speed += 5;
1766                         creature_ptr->to_a += 20;
1767                         creature_ptr->dis_to_a += 20;
1768                         break;
1769                 case MIMIC_VAMPIRE:
1770                         creature_ptr->resist_dark = TRUE;
1771                         creature_ptr->hold_exp = TRUE;
1772                         creature_ptr->resist_neth = TRUE;
1773                         creature_ptr->resist_cold = TRUE;
1774                         creature_ptr->resist_pois = TRUE;
1775                         creature_ptr->see_inv = TRUE;
1776                         new_speed += 3;
1777                         creature_ptr->to_a += 10;
1778                         creature_ptr->dis_to_a += 10;
1779                         if (creature_ptr->pclass != CLASS_NINJA) creature_ptr->lite = TRUE;
1780                         break;
1781                 }
1782         }
1783         else
1784         {
1785                 switch (creature_ptr->prace)
1786                 {
1787                 case RACE_ELF:
1788                         creature_ptr->resist_lite = TRUE;
1789                         break;
1790                 case RACE_HOBBIT:
1791                         creature_ptr->hold_exp = TRUE;
1792                         break;
1793                 case RACE_GNOME:
1794                         creature_ptr->free_act = TRUE;
1795                         break;
1796                 case RACE_DWARF:
1797                         creature_ptr->resist_blind = TRUE;
1798                         break;
1799                 case RACE_HALF_ORC:
1800                         creature_ptr->resist_dark = TRUE;
1801                         break;
1802                 case RACE_HALF_TROLL:
1803                         creature_ptr->sustain_str = TRUE;
1804
1805                         if (creature_ptr->lev > 14)
1806                         {
1807                                 /* High level trolls heal fast... */
1808                                 creature_ptr->regenerate = TRUE;
1809
1810                                 if (creature_ptr->pclass == CLASS_WARRIOR || creature_ptr->pclass == CLASS_BERSERKER)
1811                                 {
1812                                         creature_ptr->slow_digest = TRUE;
1813                                         /* Let's not make Regeneration
1814                                          * a disadvantage for the poor warriors who can
1815                                          * never learn a spell that satisfies hunger (actually
1816                                          * neither can rogues, but half-trolls are not
1817                                          * supposed to play rogues) */
1818                                 }
1819                         }
1820                         break;
1821                 case RACE_AMBERITE:
1822                         creature_ptr->sustain_con = TRUE;
1823                         creature_ptr->regenerate = TRUE;  /* Amberites heal fast... */
1824                         break;
1825                 case RACE_HIGH_ELF:
1826                         creature_ptr->resist_lite = TRUE;
1827                         creature_ptr->see_inv = TRUE;
1828                         break;
1829                 case RACE_BARBARIAN:
1830                         creature_ptr->resist_fear = TRUE;
1831                         break;
1832                 case RACE_HALF_OGRE:
1833                         creature_ptr->resist_dark = TRUE;
1834                         creature_ptr->sustain_str = TRUE;
1835                         break;
1836                 case RACE_HALF_GIANT:
1837                         creature_ptr->sustain_str = TRUE;
1838                         creature_ptr->resist_shard = TRUE;
1839                         break;
1840                 case RACE_HALF_TITAN:
1841                         creature_ptr->resist_chaos = TRUE;
1842                         break;
1843                 case RACE_CYCLOPS:
1844                         creature_ptr->resist_sound = TRUE;
1845                         break;
1846                 case RACE_YEEK:
1847                         creature_ptr->resist_acid = TRUE;
1848                         if (creature_ptr->lev > 19) creature_ptr->immune_acid = TRUE;
1849                         break;
1850                 case RACE_KLACKON:
1851                         creature_ptr->resist_conf = TRUE;
1852                         creature_ptr->resist_acid = TRUE;
1853
1854                         /* Klackons become faster */
1855                         new_speed += (creature_ptr->lev) / 10;
1856                         break;
1857                 case RACE_KOBOLD:
1858                         creature_ptr->resist_pois = TRUE;
1859                         break;
1860                 case RACE_NIBELUNG:
1861                         creature_ptr->resist_disen = TRUE;
1862                         creature_ptr->resist_dark = TRUE;
1863                         break;
1864                 case RACE_DARK_ELF:
1865                         creature_ptr->resist_dark = TRUE;
1866                         if (creature_ptr->lev > 19) creature_ptr->see_inv = TRUE;
1867                         break;
1868                 case RACE_DRACONIAN:
1869                         creature_ptr->levitation = TRUE;
1870                         if (creature_ptr->lev > 4) creature_ptr->resist_fire = TRUE;
1871                         if (creature_ptr->lev > 9) creature_ptr->resist_cold = TRUE;
1872                         if (creature_ptr->lev > 14) creature_ptr->resist_acid = TRUE;
1873                         if (creature_ptr->lev > 19) creature_ptr->resist_elec = TRUE;
1874                         if (creature_ptr->lev > 34) creature_ptr->resist_pois = TRUE;
1875                         break;
1876                 case RACE_MIND_FLAYER:
1877                         creature_ptr->sustain_int = TRUE;
1878                         creature_ptr->sustain_wis = TRUE;
1879                         if (creature_ptr->lev > 14) creature_ptr->see_inv = TRUE;
1880                         if (creature_ptr->lev > 29) creature_ptr->telepathy = TRUE;
1881                         break;
1882                 case RACE_IMP:
1883                         creature_ptr->resist_fire = TRUE;
1884                         if (creature_ptr->lev > 9) creature_ptr->see_inv = TRUE;
1885                         break;
1886                 case RACE_GOLEM:
1887                         creature_ptr->slow_digest = TRUE;
1888                         creature_ptr->free_act = TRUE;
1889                         creature_ptr->see_inv = TRUE;
1890                         creature_ptr->resist_pois = TRUE;
1891                         if (creature_ptr->lev > 34) creature_ptr->hold_exp = TRUE;
1892                         break;
1893                 case RACE_SKELETON:
1894                         creature_ptr->resist_shard = TRUE;
1895                         creature_ptr->hold_exp = TRUE;
1896                         creature_ptr->see_inv = TRUE;
1897                         creature_ptr->resist_pois = TRUE;
1898                         if (creature_ptr->lev > 9) creature_ptr->resist_cold = TRUE;
1899                         break;
1900                 case RACE_ZOMBIE:
1901                         creature_ptr->resist_neth = TRUE;
1902                         creature_ptr->hold_exp = TRUE;
1903                         creature_ptr->see_inv = TRUE;
1904                         creature_ptr->resist_pois = TRUE;
1905                         creature_ptr->slow_digest = TRUE;
1906                         if (creature_ptr->lev > 4) creature_ptr->resist_cold = TRUE;
1907                         break;
1908                 case RACE_VAMPIRE:
1909                         creature_ptr->resist_dark = TRUE;
1910                         creature_ptr->hold_exp = TRUE;
1911                         creature_ptr->resist_neth = TRUE;
1912                         creature_ptr->resist_cold = TRUE;
1913                         creature_ptr->resist_pois = TRUE;
1914                         if (creature_ptr->pclass != CLASS_NINJA) creature_ptr->lite = TRUE;
1915                         break;
1916                 case RACE_SPECTRE:
1917                         creature_ptr->levitation = TRUE;
1918                         creature_ptr->free_act = TRUE;
1919                         creature_ptr->resist_neth = TRUE;
1920                         creature_ptr->hold_exp = TRUE;
1921                         creature_ptr->see_inv = TRUE;
1922                         creature_ptr->resist_pois = TRUE;
1923                         creature_ptr->slow_digest = TRUE;
1924                         creature_ptr->resist_cold = TRUE;
1925                         creature_ptr->pass_wall = TRUE;
1926                         if (creature_ptr->lev > 34) creature_ptr->telepathy = TRUE;
1927                         break;
1928                 case RACE_SPRITE:
1929                         creature_ptr->levitation = TRUE;
1930                         creature_ptr->resist_lite = TRUE;
1931
1932                         /* Sprites become faster */
1933                         new_speed += (creature_ptr->lev) / 10;
1934                         break;
1935                 case RACE_BEASTMAN:
1936                         creature_ptr->resist_conf = TRUE;
1937                         creature_ptr->resist_sound = TRUE;
1938                         break;
1939                 case RACE_ENT:
1940                         /* Ents dig like maniacs, but only with their hands. */
1941                         if (!creature_ptr->inventory_list[INVEN_RARM].k_idx)
1942                                 creature_ptr->skill_dig += creature_ptr->lev * 10;
1943                         /* Ents get tougher and stronger as they age, but lose dexterity. */
1944                         if (creature_ptr->lev > 25) creature_ptr->stat_add[A_STR]++;
1945                         if (creature_ptr->lev > 40) creature_ptr->stat_add[A_STR]++;
1946                         if (creature_ptr->lev > 45) creature_ptr->stat_add[A_STR]++;
1947
1948                         if (creature_ptr->lev > 25) creature_ptr->stat_add[A_DEX]--;
1949                         if (creature_ptr->lev > 40) creature_ptr->stat_add[A_DEX]--;
1950                         if (creature_ptr->lev > 45) creature_ptr->stat_add[A_DEX]--;
1951
1952                         if (creature_ptr->lev > 25) creature_ptr->stat_add[A_CON]++;
1953                         if (creature_ptr->lev > 40) creature_ptr->stat_add[A_CON]++;
1954                         if (creature_ptr->lev > 45) creature_ptr->stat_add[A_CON]++;
1955                         break;
1956                 case RACE_ANGEL:
1957                         creature_ptr->levitation = TRUE;
1958                         creature_ptr->see_inv = TRUE;
1959                         break;
1960                 case RACE_DEMON:
1961                         creature_ptr->resist_fire = TRUE;
1962                         creature_ptr->resist_neth = TRUE;
1963                         creature_ptr->hold_exp = TRUE;
1964                         if (creature_ptr->lev > 9) creature_ptr->see_inv = TRUE;
1965                         if (creature_ptr->lev > 44)
1966                         {
1967                                 creature_ptr->oppose_fire = 1;
1968                                 creature_ptr->redraw |= PR_STATUS;
1969                         }
1970                         break;
1971                 case RACE_DUNADAN:
1972                         creature_ptr->sustain_con = TRUE;
1973                         break;
1974                 case RACE_S_FAIRY:
1975                         creature_ptr->levitation = TRUE;
1976                         break;
1977                 case RACE_KUTAR:
1978                         creature_ptr->resist_conf = TRUE;
1979                         break;
1980                 case RACE_ANDROID:
1981                         creature_ptr->slow_digest = TRUE;
1982                         creature_ptr->free_act = TRUE;
1983                         creature_ptr->resist_pois = TRUE;
1984                         creature_ptr->hold_exp = TRUE;
1985                         break;
1986                 case RACE_MERFOLK:
1987                         creature_ptr->resist_water = TRUE;
1988                         break;
1989                 default:
1990                         /* Do nothing */
1991                         ;
1992                 }
1993         }
1994
1995         if (creature_ptr->ult_res || (creature_ptr->special_defense & KATA_MUSOU))
1996         {
1997                 creature_ptr->see_inv = TRUE;
1998                 creature_ptr->free_act = TRUE;
1999                 creature_ptr->slow_digest = TRUE;
2000                 creature_ptr->regenerate = TRUE;
2001                 creature_ptr->levitation = TRUE;
2002                 creature_ptr->hold_exp = TRUE;
2003                 creature_ptr->telepathy = TRUE;
2004                 creature_ptr->lite = TRUE;
2005                 creature_ptr->sustain_str = TRUE;
2006                 creature_ptr->sustain_int = TRUE;
2007                 creature_ptr->sustain_wis = TRUE;
2008                 creature_ptr->sustain_con = TRUE;
2009                 creature_ptr->sustain_dex = TRUE;
2010                 creature_ptr->sustain_chr = TRUE;
2011                 creature_ptr->resist_acid = TRUE;
2012                 creature_ptr->resist_elec = TRUE;
2013                 creature_ptr->resist_fire = TRUE;
2014                 creature_ptr->resist_cold = TRUE;
2015                 creature_ptr->resist_pois = TRUE;
2016                 creature_ptr->resist_conf = TRUE;
2017                 creature_ptr->resist_sound = TRUE;
2018                 creature_ptr->resist_lite = TRUE;
2019                 creature_ptr->resist_dark = TRUE;
2020                 creature_ptr->resist_chaos = TRUE;
2021                 creature_ptr->resist_disen = TRUE;
2022                 creature_ptr->resist_shard = TRUE;
2023                 creature_ptr->resist_nexus = TRUE;
2024                 creature_ptr->resist_blind = TRUE;
2025                 creature_ptr->resist_neth = TRUE;
2026                 creature_ptr->resist_fear = TRUE;
2027                 creature_ptr->reflect = TRUE;
2028                 creature_ptr->sh_fire = TRUE;
2029                 creature_ptr->sh_elec = TRUE;
2030                 creature_ptr->sh_cold = TRUE;
2031                 creature_ptr->to_a += 100;
2032                 creature_ptr->dis_to_a += 100;
2033         }
2034         /* Temporary shield */
2035         else if (creature_ptr->tsubureru || creature_ptr->shield || creature_ptr->magicdef)
2036         {
2037                 creature_ptr->to_a += 50;
2038                 creature_ptr->dis_to_a += 50;
2039         }
2040
2041         if (creature_ptr->tim_res_nether)
2042         {
2043                 creature_ptr->resist_neth = TRUE;
2044         }
2045         if (creature_ptr->tim_sh_fire)
2046         {
2047                 creature_ptr->sh_fire = TRUE;
2048         }
2049         if (creature_ptr->tim_res_time)
2050         {
2051                 creature_ptr->resist_time = TRUE;
2052         }
2053
2054         /* Sexy Gal */
2055         if (creature_ptr->pseikaku == SEIKAKU_SEXY) creature_ptr->cursed |= (TRC_AGGRAVATE);
2056
2057         if (creature_ptr->pseikaku == SEIKAKU_NAMAKE) creature_ptr->to_m_chance += 10;
2058         if (creature_ptr->pseikaku == SEIKAKU_KIREMONO) creature_ptr->to_m_chance -= 3;
2059         if ((creature_ptr->pseikaku == SEIKAKU_GAMAN) || (creature_ptr->pseikaku == SEIKAKU_CHIKARA)) creature_ptr->to_m_chance++;
2060
2061         if (creature_ptr->pseikaku == SEIKAKU_CHARGEMAN)
2062         {
2063                 creature_ptr->to_m_chance += 5;
2064                 creature_ptr->resist_conf = TRUE;
2065         }
2066
2067         /* Lucky man */
2068         if (creature_ptr->pseikaku == SEIKAKU_LUCKY) creature_ptr->muta3 |= MUT3_GOOD_LUCK;
2069
2070         if (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)
2071         {
2072                 creature_ptr->resist_blind = TRUE;
2073                 creature_ptr->resist_conf = TRUE;
2074                 creature_ptr->hold_exp = TRUE;
2075                 if (creature_ptr->pclass != CLASS_NINJA) creature_ptr->lite = TRUE;
2076
2077                 if ((creature_ptr->prace != RACE_KLACKON) && (creature_ptr->prace != RACE_SPRITE))
2078                         /* Munchkin become faster */
2079                         new_speed += (creature_ptr->lev) / 10 + 5;
2080         }
2081
2082         if (music_singing(p_ptr, MUSIC_WALL))
2083         {
2084                 creature_ptr->kill_wall = TRUE;
2085         }
2086
2087         /* Hack -- apply racial/class stat maxes */
2088         /* Apply the racial modifiers */
2089         for (i = 0; i < A_MAX; i++)
2090         {
2091                 /* Modify the stats for "race" */
2092                 creature_ptr->stat_add[i] += (tmp_rp_ptr->r_adj[i] + cp_ptr->c_adj[i] + ap_ptr->a_adj[i]);
2093         }
2094
2095
2096         /* I'm adding the mutations here for the lack of a better place... */
2097         if (creature_ptr->muta3)
2098         {
2099                 /* Hyper Strength */
2100                 if (creature_ptr->muta3 & MUT3_HYPER_STR)
2101                 {
2102                         creature_ptr->stat_add[A_STR] += 4;
2103                 }
2104
2105                 /* Puny */
2106                 if (creature_ptr->muta3 & MUT3_PUNY)
2107                 {
2108                         creature_ptr->stat_add[A_STR] -= 4;
2109                 }
2110
2111                 /* Living computer */
2112                 if (creature_ptr->muta3 & MUT3_HYPER_INT)
2113                 {
2114                         creature_ptr->stat_add[A_INT] += 4;
2115                         creature_ptr->stat_add[A_WIS] += 4;
2116                 }
2117
2118                 /* Moronic */
2119                 if (creature_ptr->muta3 & MUT3_MORONIC)
2120                 {
2121                         creature_ptr->stat_add[A_INT] -= 4;
2122                         creature_ptr->stat_add[A_WIS] -= 4;
2123                 }
2124
2125                 if (creature_ptr->muta3 & MUT3_RESILIENT)
2126                 {
2127                         creature_ptr->stat_add[A_CON] += 4;
2128                 }
2129
2130                 if (creature_ptr->muta3 & MUT3_XTRA_FAT)
2131                 {
2132                         creature_ptr->stat_add[A_CON] += 2;
2133                         new_speed -= 2;
2134                 }
2135
2136                 if (creature_ptr->muta3 & MUT3_ALBINO)
2137                 {
2138                         creature_ptr->stat_add[A_CON] -= 4;
2139                 }
2140
2141                 if (creature_ptr->muta3 & MUT3_FLESH_ROT)
2142                 {
2143                         creature_ptr->stat_add[A_CON] -= 2;
2144                         creature_ptr->stat_add[A_CHR] -= 1;
2145                         creature_ptr->regenerate = FALSE;
2146                         /* Cancel innate regeneration */
2147                 }
2148
2149                 if (creature_ptr->muta3 & MUT3_SILLY_VOI)
2150                 {
2151                         creature_ptr->stat_add[A_CHR] -= 4;
2152                 }
2153
2154                 if (creature_ptr->muta3 & MUT3_BLANK_FAC)
2155                 {
2156                         creature_ptr->stat_add[A_CHR] -= 1;
2157                 }
2158
2159                 if (creature_ptr->muta3 & MUT3_XTRA_EYES)
2160                 {
2161                         creature_ptr->skill_fos += 15;
2162                         creature_ptr->skill_srh += 15;
2163                 }
2164
2165                 if (creature_ptr->muta3 & MUT3_MAGIC_RES)
2166                 {
2167                         creature_ptr->skill_sav += (15 + (creature_ptr->lev / 5));
2168                 }
2169
2170                 if (creature_ptr->muta3 & MUT3_XTRA_NOIS)
2171                 {
2172                         creature_ptr->skill_stl -= 3;
2173                 }
2174
2175                 if (creature_ptr->muta3 & MUT3_INFRAVIS)
2176                 {
2177                         creature_ptr->see_infra += 3;
2178                 }
2179
2180                 if (creature_ptr->muta3 & MUT3_XTRA_LEGS)
2181                 {
2182                         new_speed += 3;
2183                 }
2184
2185                 if (creature_ptr->muta3 & MUT3_SHORT_LEG)
2186                 {
2187                         new_speed -= 3;
2188                 }
2189
2190                 if (creature_ptr->muta3 & MUT3_ELEC_TOUC)
2191                 {
2192                         creature_ptr->sh_elec = TRUE;
2193                 }
2194
2195                 if (creature_ptr->muta3 & MUT3_FIRE_BODY)
2196                 {
2197                         creature_ptr->sh_fire = TRUE;
2198                         creature_ptr->lite = TRUE;
2199                 }
2200
2201                 if (creature_ptr->muta3 & MUT3_WART_SKIN)
2202                 {
2203                         creature_ptr->stat_add[A_CHR] -= 2;
2204                         creature_ptr->to_a += 5;
2205                         creature_ptr->dis_to_a += 5;
2206                 }
2207
2208                 if (creature_ptr->muta3 & MUT3_SCALES)
2209                 {
2210                         creature_ptr->stat_add[A_CHR] -= 1;
2211                         creature_ptr->to_a += 10;
2212                         creature_ptr->dis_to_a += 10;
2213                 }
2214
2215                 if (creature_ptr->muta3 & MUT3_IRON_SKIN)
2216                 {
2217                         creature_ptr->stat_add[A_DEX] -= 1;
2218                         creature_ptr->to_a += 25;
2219                         creature_ptr->dis_to_a += 25;
2220                 }
2221
2222                 if (creature_ptr->muta3 & MUT3_WINGS)
2223                 {
2224                         creature_ptr->levitation = TRUE;
2225                 }
2226
2227                 if (creature_ptr->muta3 & MUT3_FEARLESS)
2228                 {
2229                         creature_ptr->resist_fear = TRUE;
2230                 }
2231
2232                 if (creature_ptr->muta3 & MUT3_REGEN)
2233                 {
2234                         creature_ptr->regenerate = TRUE;
2235                 }
2236
2237                 if (creature_ptr->muta3 & MUT3_ESP)
2238                 {
2239                         creature_ptr->telepathy = TRUE;
2240                 }
2241
2242                 if (creature_ptr->muta3 & MUT3_LIMBER)
2243                 {
2244                         creature_ptr->stat_add[A_DEX] += 3;
2245                 }
2246
2247                 if (creature_ptr->muta3 & MUT3_ARTHRITIS)
2248                 {
2249                         creature_ptr->stat_add[A_DEX] -= 3;
2250                 }
2251
2252                 if (creature_ptr->muta3 & MUT3_MOTION)
2253                 {
2254                         creature_ptr->free_act = TRUE;
2255                         creature_ptr->skill_stl += 1;
2256                 }
2257
2258                 if (creature_ptr->muta3 & MUT3_ILL_NORM)
2259                 {
2260                         creature_ptr->stat_add[A_CHR] = 0;
2261                 }
2262         }
2263
2264         if (creature_ptr->tsuyoshi)
2265         {
2266                 creature_ptr->stat_add[A_STR] += 4;
2267                 creature_ptr->stat_add[A_CON] += 4;
2268         }
2269
2270         /* Scan the usable creature_ptr->inventory_list */
2271         for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
2272         {
2273                 int bonus_to_h, bonus_to_d;
2274                 o_ptr = &creature_ptr->inventory_list[i];
2275                 if (!o_ptr->k_idx) continue;
2276
2277                 object_flags(o_ptr, flgs);
2278
2279                 creature_ptr->cursed |= (o_ptr->curse_flags & (0xFFFFFFF0L));
2280                 if (o_ptr->name1 == ART_CHAINSWORD) creature_ptr->cursed |= TRC_CHAINSWORD;
2281
2282                 /* Affect stats */
2283                 if (have_flag(flgs, TR_STR)) creature_ptr->stat_add[A_STR] += o_ptr->pval;
2284                 if (have_flag(flgs, TR_INT)) creature_ptr->stat_add[A_INT] += o_ptr->pval;
2285                 if (have_flag(flgs, TR_WIS)) creature_ptr->stat_add[A_WIS] += o_ptr->pval;
2286                 if (have_flag(flgs, TR_DEX)) creature_ptr->stat_add[A_DEX] += o_ptr->pval;
2287                 if (have_flag(flgs, TR_CON)) creature_ptr->stat_add[A_CON] += o_ptr->pval;
2288                 if (have_flag(flgs, TR_CHR)) creature_ptr->stat_add[A_CHR] += o_ptr->pval;
2289
2290                 if (have_flag(flgs, TR_MAGIC_MASTERY))    creature_ptr->skill_dev += 8 * o_ptr->pval;
2291
2292                 /* Affect stealth */
2293                 if (have_flag(flgs, TR_STEALTH)) creature_ptr->skill_stl += o_ptr->pval;
2294
2295                 /* Affect searching ability (factor of five) */
2296                 if (have_flag(flgs, TR_SEARCH)) creature_ptr->skill_srh += (o_ptr->pval * 5);
2297
2298                 /* Affect searching frequency (factor of five) */
2299                 if (have_flag(flgs, TR_SEARCH)) creature_ptr->skill_fos += (o_ptr->pval * 5);
2300
2301                 /* Affect infravision */
2302                 if (have_flag(flgs, TR_INFRA)) creature_ptr->see_infra += o_ptr->pval;
2303
2304                 /* Affect digging (factor of 20) */
2305                 if (have_flag(flgs, TR_TUNNEL)) creature_ptr->skill_dig += (o_ptr->pval * 20);
2306
2307                 /* Affect speed */
2308                 if (have_flag(flgs, TR_SPEED)) new_speed += o_ptr->pval;
2309
2310                 /* Affect blows */
2311                 if (have_flag(flgs, TR_BLOWS))
2312                 {
2313                         if ((i == INVEN_RARM || i == INVEN_RIGHT) && !creature_ptr->ryoute) extra_blows[0] += o_ptr->pval;
2314                         else if ((i == INVEN_LARM || i == INVEN_LEFT) && !creature_ptr->ryoute) extra_blows[1] += o_ptr->pval;
2315                         else { extra_blows[0] += o_ptr->pval; extra_blows[1] += o_ptr->pval; }
2316                 }
2317
2318                 /* Hack -- cause earthquakes */
2319                 if (have_flag(flgs, TR_IMPACT)) creature_ptr->impact[(i == INVEN_RARM) ? 0 : 1] = TRUE;
2320
2321                 /* Various flags */
2322                 if (have_flag(flgs, TR_AGGRAVATE))   creature_ptr->cursed |= TRC_AGGRAVATE;
2323                 if (have_flag(flgs, TR_DRAIN_EXP))   creature_ptr->cursed |= TRC_DRAIN_EXP;
2324                 if (have_flag(flgs, TR_TY_CURSE))    creature_ptr->cursed |= TRC_TY_CURSE;
2325                 if (have_flag(flgs, TR_ADD_L_CURSE)) creature_ptr->cursed |= TRC_ADD_L_CURSE;
2326                 if (have_flag(flgs, TR_ADD_H_CURSE)) creature_ptr->cursed |= TRC_ADD_H_CURSE;
2327                 if (have_flag(flgs, TR_DRAIN_HP))    creature_ptr->cursed |= TRC_DRAIN_HP;
2328                 if (have_flag(flgs, TR_DRAIN_MANA))  creature_ptr->cursed |= TRC_DRAIN_MANA;
2329                 if (have_flag(flgs, TR_CALL_ANIMAL)) creature_ptr->cursed |= TRC_CALL_ANIMAL;
2330                 if (have_flag(flgs, TR_CALL_DEMON))  creature_ptr->cursed |= TRC_CALL_DEMON;
2331                 if (have_flag(flgs, TR_CALL_DRAGON)) creature_ptr->cursed |= TRC_CALL_DRAGON;
2332                 if (have_flag(flgs, TR_CALL_UNDEAD)) creature_ptr->cursed |= TRC_CALL_UNDEAD;
2333                 if (have_flag(flgs, TR_COWARDICE))   creature_ptr->cursed |= TRC_COWARDICE;
2334                 if (have_flag(flgs, TR_LOW_MELEE))   creature_ptr->cursed |= TRC_LOW_MELEE;
2335                 if (have_flag(flgs, TR_LOW_AC))      creature_ptr->cursed |= TRC_LOW_AC;
2336                 if (have_flag(flgs, TR_LOW_MAGIC))   creature_ptr->cursed |= TRC_LOW_MAGIC;
2337                 if (have_flag(flgs, TR_FAST_DIGEST)) creature_ptr->cursed |= TRC_FAST_DIGEST;
2338                 if (have_flag(flgs, TR_SLOW_REGEN))  creature_ptr->cursed |= TRC_SLOW_REGEN;
2339                 if (have_flag(flgs, TR_DEC_MANA))    creature_ptr->dec_mana = TRUE;
2340                 if (have_flag(flgs, TR_BLESSED))     creature_ptr->bless_blade = TRUE;
2341                 if (have_flag(flgs, TR_XTRA_MIGHT))  creature_ptr->xtra_might = TRUE;
2342                 if (have_flag(flgs, TR_SLOW_DIGEST)) creature_ptr->slow_digest = TRUE;
2343                 if (have_flag(flgs, TR_REGEN))       creature_ptr->regenerate = TRUE;
2344                 if (have_flag(flgs, TR_TELEPATHY))   creature_ptr->telepathy = TRUE;
2345                 if (have_flag(flgs, TR_ESP_ANIMAL))  creature_ptr->esp_animal = TRUE;
2346                 if (have_flag(flgs, TR_ESP_UNDEAD))  creature_ptr->esp_undead = TRUE;
2347                 if (have_flag(flgs, TR_ESP_DEMON))   creature_ptr->esp_demon = TRUE;
2348                 if (have_flag(flgs, TR_ESP_ORC))     creature_ptr->esp_orc = TRUE;
2349                 if (have_flag(flgs, TR_ESP_TROLL))   creature_ptr->esp_troll = TRUE;
2350                 if (have_flag(flgs, TR_ESP_GIANT))   creature_ptr->esp_giant = TRUE;
2351                 if (have_flag(flgs, TR_ESP_DRAGON))  creature_ptr->esp_dragon = TRUE;
2352                 if (have_flag(flgs, TR_ESP_HUMAN))   creature_ptr->esp_human = TRUE;
2353                 if (have_flag(flgs, TR_ESP_EVIL))    creature_ptr->esp_evil = TRUE;
2354                 if (have_flag(flgs, TR_ESP_GOOD))    creature_ptr->esp_good = TRUE;
2355                 if (have_flag(flgs, TR_ESP_NONLIVING)) creature_ptr->esp_nonliving = TRUE;
2356                 if (have_flag(flgs, TR_ESP_UNIQUE))  creature_ptr->esp_unique = TRUE;
2357
2358                 if (have_flag(flgs, TR_SEE_INVIS))   creature_ptr->see_inv = TRUE;
2359                 if (have_flag(flgs, TR_LEVITATION))     creature_ptr->levitation = TRUE;
2360                 if (have_flag(flgs, TR_FREE_ACT))    creature_ptr->free_act = TRUE;
2361                 if (have_flag(flgs, TR_HOLD_EXP))   creature_ptr->hold_exp = TRUE;
2362                 if (have_flag(flgs, TR_WARNING)) {
2363                         if (!o_ptr->inscription || !(my_strchr(quark_str(o_ptr->inscription), '$')))
2364                                 creature_ptr->warning = TRUE;
2365                 }
2366
2367                 if (have_flag(flgs, TR_TELEPORT))
2368                 {
2369                         if (object_is_cursed(o_ptr)) creature_ptr->cursed |= TRC_TELEPORT;
2370                         else
2371                         {
2372                                 concptr insc = quark_str(o_ptr->inscription);
2373
2374                                 if (o_ptr->inscription && my_strchr(insc, '.'))
2375                                 {
2376                                         /*
2377                                          * {.} will stop random teleportation.
2378                                          */
2379                                 }
2380                                 else
2381                                 {
2382                                         /* Controlled random teleportation */
2383                                         creature_ptr->cursed |= TRC_TELEPORT_SELF;
2384                                 }
2385                         }
2386                 }
2387
2388                 /* Immunity flags */
2389                 if (have_flag(flgs, TR_IM_FIRE)) creature_ptr->immune_fire = TRUE;
2390                 if (have_flag(flgs, TR_IM_ACID)) creature_ptr->immune_acid = TRUE;
2391                 if (have_flag(flgs, TR_IM_COLD)) creature_ptr->immune_cold = TRUE;
2392                 if (have_flag(flgs, TR_IM_ELEC)) creature_ptr->immune_elec = TRUE;
2393
2394                 /* Resistance flags */
2395                 if (have_flag(flgs, TR_RES_ACID))   creature_ptr->resist_acid = TRUE;
2396                 if (have_flag(flgs, TR_RES_ELEC))   creature_ptr->resist_elec = TRUE;
2397                 if (have_flag(flgs, TR_RES_FIRE))   creature_ptr->resist_fire = TRUE;
2398                 if (have_flag(flgs, TR_RES_COLD))   creature_ptr->resist_cold = TRUE;
2399                 if (have_flag(flgs, TR_RES_POIS))   creature_ptr->resist_pois = TRUE;
2400                 if (have_flag(flgs, TR_RES_FEAR))   creature_ptr->resist_fear = TRUE;
2401                 if (have_flag(flgs, TR_RES_CONF))   creature_ptr->resist_conf = TRUE;
2402                 if (have_flag(flgs, TR_RES_SOUND))  creature_ptr->resist_sound = TRUE;
2403                 if (have_flag(flgs, TR_RES_LITE))   creature_ptr->resist_lite = TRUE;
2404                 if (have_flag(flgs, TR_RES_DARK))   creature_ptr->resist_dark = TRUE;
2405                 if (have_flag(flgs, TR_RES_CHAOS))  creature_ptr->resist_chaos = TRUE;
2406                 if (have_flag(flgs, TR_RES_DISEN))  creature_ptr->resist_disen = TRUE;
2407                 if (have_flag(flgs, TR_RES_SHARDS)) creature_ptr->resist_shard = TRUE;
2408                 if (have_flag(flgs, TR_RES_NEXUS))  creature_ptr->resist_nexus = TRUE;
2409                 if (have_flag(flgs, TR_RES_BLIND))  creature_ptr->resist_blind = TRUE;
2410                 if (have_flag(flgs, TR_RES_NETHER)) creature_ptr->resist_neth = TRUE;
2411
2412                 if (have_flag(flgs, TR_REFLECT))  creature_ptr->reflect = TRUE;
2413                 if (have_flag(flgs, TR_SH_FIRE))  creature_ptr->sh_fire = TRUE;
2414                 if (have_flag(flgs, TR_SH_ELEC))  creature_ptr->sh_elec = TRUE;
2415                 if (have_flag(flgs, TR_SH_COLD))  creature_ptr->sh_cold = TRUE;
2416                 if (have_flag(flgs, TR_NO_MAGIC)) creature_ptr->anti_magic = TRUE;
2417                 if (have_flag(flgs, TR_NO_TELE))  creature_ptr->anti_tele = TRUE;
2418
2419                 /* Sustain flags */
2420                 if (have_flag(flgs, TR_SUST_STR)) creature_ptr->sustain_str = TRUE;
2421                 if (have_flag(flgs, TR_SUST_INT)) creature_ptr->sustain_int = TRUE;
2422                 if (have_flag(flgs, TR_SUST_WIS)) creature_ptr->sustain_wis = TRUE;
2423                 if (have_flag(flgs, TR_SUST_DEX)) creature_ptr->sustain_dex = TRUE;
2424                 if (have_flag(flgs, TR_SUST_CON)) creature_ptr->sustain_con = TRUE;
2425                 if (have_flag(flgs, TR_SUST_CHR)) creature_ptr->sustain_chr = TRUE;
2426
2427                 if (o_ptr->name2 == EGO_YOIYAMI) yoiyami = TRUE;
2428                 if (o_ptr->name2 == EGO_2WEAPON) easy_2weapon = TRUE;
2429                 if (o_ptr->name2 == EGO_RING_RES_TIME) creature_ptr->resist_time = TRUE;
2430                 if (o_ptr->name2 == EGO_RING_THROW) creature_ptr->mighty_throw = TRUE;
2431                 if (have_flag(flgs, TR_EASY_SPELL)) creature_ptr->easy_spell = TRUE;
2432                 if (o_ptr->name2 == EGO_AMU_FOOL) creature_ptr->heavy_spell = TRUE;
2433                 if (o_ptr->name2 == EGO_AMU_NAIVETY) down_saving = TRUE;
2434
2435                 if (o_ptr->curse_flags & TRC_LOW_MAGIC)
2436                 {
2437                         if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
2438                         {
2439                                 creature_ptr->to_m_chance += 10;
2440                         }
2441                         else
2442                         {
2443                                 creature_ptr->to_m_chance += 3;
2444                         }
2445                 }
2446
2447                 if (o_ptr->tval == TV_CAPTURE) continue;
2448
2449                 /* Modify the base armor class */
2450                 creature_ptr->ac += o_ptr->ac;
2451
2452                 /* The base armor class is always known */
2453                 creature_ptr->dis_ac += o_ptr->ac;
2454
2455                 /* Apply the bonuses to armor class */
2456                 creature_ptr->to_a += o_ptr->to_a;
2457
2458                 /* Apply the mental bonuses to armor class, if known */
2459                 if (object_is_known(o_ptr)) creature_ptr->dis_to_a += o_ptr->to_a;
2460
2461                 if (o_ptr->curse_flags & TRC_LOW_MELEE)
2462                 {
2463                         int slot = i - INVEN_RARM;
2464                         if (slot < 2)
2465                         {
2466                                 if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
2467                                 {
2468                                         creature_ptr->to_h[slot] -= 15;
2469                                         if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_h[slot] -= 15;
2470                                 }
2471                                 else
2472                                 {
2473                                         creature_ptr->to_h[slot] -= 5;
2474                                         if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_h[slot] -= 5;
2475                                 }
2476                         }
2477                         else
2478                         {
2479                                 if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
2480                                 {
2481                                         creature_ptr->to_h_b -= 15;
2482                                         if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_h_b -= 15;
2483                                 }
2484                                 else
2485                                 {
2486                                         creature_ptr->to_h_b -= 5;
2487                                         if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_h_b -= 5;
2488                                 }
2489                         }
2490                 }
2491
2492                 if (o_ptr->curse_flags & TRC_LOW_AC)
2493                 {
2494                         if (o_ptr->curse_flags & TRC_HEAVY_CURSE)
2495                         {
2496                                 creature_ptr->to_a -= 30;
2497                                 if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_a -= 30;
2498                         }
2499                         else
2500                         {
2501                                 creature_ptr->to_a -= 10;
2502                                 if (o_ptr->ident & IDENT_MENTAL) creature_ptr->dis_to_a -= 10;
2503                         }
2504                 }
2505
2506                 /* Hack -- do not apply "weapon" bonuses */
2507                 if (i == INVEN_RARM && has_melee_weapon(creature_ptr, i)) continue;
2508                 if (i == INVEN_LARM && has_melee_weapon(creature_ptr, i)) continue;
2509
2510                 /* Hack -- do not apply "bow" bonuses */
2511                 if (i == INVEN_BOW) continue;
2512
2513                 bonus_to_h = o_ptr->to_h;
2514                 bonus_to_d = o_ptr->to_d;
2515
2516                 if (creature_ptr->pclass == CLASS_NINJA)
2517                 {
2518                         if (o_ptr->to_h > 0) bonus_to_h = (o_ptr->to_h + 1) / 2;
2519                         if (o_ptr->to_d > 0) bonus_to_d = (o_ptr->to_d + 1) / 2;
2520                 }
2521
2522                 /* To Bow and Natural attack */
2523
2524                 /* Apply the bonuses to hit/damage */
2525                 creature_ptr->to_h_b += (s16b)bonus_to_h;
2526                 creature_ptr->to_h_m += (s16b)bonus_to_h;
2527                 creature_ptr->to_d_m += (s16b)bonus_to_d;
2528
2529                 /* Apply the mental bonuses tp hit/damage, if known */
2530                 if (object_is_known(o_ptr)) creature_ptr->dis_to_h_b += (s16b)bonus_to_h;
2531
2532                 /* To Melee */
2533                 if ((i == INVEN_LEFT || i == INVEN_RIGHT) && !creature_ptr->ryoute)
2534                 {
2535                         /* Apply the bonuses to hit/damage */
2536                         creature_ptr->to_h[i - INVEN_RIGHT] += (s16b)bonus_to_h;
2537                         creature_ptr->to_d[i - INVEN_RIGHT] += (s16b)bonus_to_d;
2538
2539                         /* Apply the mental bonuses tp hit/damage, if known */
2540                         if (object_is_known(o_ptr))
2541                         {
2542                                 creature_ptr->dis_to_h[i - INVEN_RIGHT] += (s16b)bonus_to_h;
2543                                 creature_ptr->dis_to_d[i - INVEN_RIGHT] += (s16b)bonus_to_d;
2544                         }
2545                 }
2546                 else if (creature_ptr->migite && creature_ptr->hidarite)
2547                 {
2548                         /* Apply the bonuses to hit/damage */
2549                         creature_ptr->to_h[0] += (bonus_to_h > 0) ? (bonus_to_h + 1) / 2 : bonus_to_h;
2550                         creature_ptr->to_h[1] += (bonus_to_h > 0) ? bonus_to_h / 2 : bonus_to_h;
2551                         creature_ptr->to_d[0] += (bonus_to_d > 0) ? (bonus_to_d + 1) / 2 : bonus_to_d;
2552                         creature_ptr->to_d[1] += (bonus_to_d > 0) ? bonus_to_d / 2 : bonus_to_d;
2553
2554                         /* Apply the mental bonuses tp hit/damage, if known */
2555                         if (object_is_known(o_ptr))
2556                         {
2557                                 creature_ptr->dis_to_h[0] += (bonus_to_h > 0) ? (bonus_to_h + 1) / 2 : bonus_to_h;
2558                                 creature_ptr->dis_to_h[1] += (bonus_to_h > 0) ? bonus_to_h / 2 : bonus_to_h;
2559                                 creature_ptr->dis_to_d[0] += (bonus_to_d > 0) ? (bonus_to_d + 1) / 2 : bonus_to_d;
2560                                 creature_ptr->dis_to_d[1] += (bonus_to_d > 0) ? bonus_to_d / 2 : bonus_to_d;
2561                         }
2562                 }
2563                 else
2564                 {
2565                         /* Apply the bonuses to hit/damage */
2566                         creature_ptr->to_h[default_hand] += (s16b)bonus_to_h;
2567                         creature_ptr->to_d[default_hand] += (s16b)bonus_to_d;
2568
2569                         /* Apply the mental bonuses to hit/damage, if known */
2570                         if (object_is_known(o_ptr))
2571                         {
2572                                 creature_ptr->dis_to_h[default_hand] += (s16b)bonus_to_h;
2573                                 creature_ptr->dis_to_d[default_hand] += (s16b)bonus_to_d;
2574                         }
2575                 }
2576         }
2577
2578         /* Shield skill bonus */
2579         if (object_is_armour(&creature_ptr->inventory_list[INVEN_RARM]) || object_is_armour(&creature_ptr->inventory_list[INVEN_LARM]))
2580         {
2581                 creature_ptr->ac += creature_ptr->skill_exp[GINOU_SHIELD] * (1 + creature_ptr->lev / 22) / 2000;
2582                 creature_ptr->dis_ac += creature_ptr->skill_exp[GINOU_SHIELD] * (1 + creature_ptr->lev / 22) / 2000;
2583         }
2584
2585         if (old_mighty_throw != creature_ptr->mighty_throw)
2586         {
2587                 /* Redraw average damege display of Shuriken */
2588                 creature_ptr->window |= PW_INVEN;
2589         }
2590
2591         if (creature_ptr->cursed & TRC_TELEPORT) creature_ptr->cursed &= ~(TRC_TELEPORT_SELF);
2592
2593         /* Monks get extra ac for armour _not worn_ */
2594         if (((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER)) && !heavy_armor(creature_ptr))
2595         {
2596                 if (!(creature_ptr->inventory_list[INVEN_BODY].k_idx))
2597                 {
2598                         creature_ptr->to_a += (creature_ptr->lev * 3) / 2;
2599                         creature_ptr->dis_to_a += (creature_ptr->lev * 3) / 2;
2600                 }
2601                 if (!(creature_ptr->inventory_list[INVEN_OUTER].k_idx) && (creature_ptr->lev > 15))
2602                 {
2603                         creature_ptr->to_a += ((creature_ptr->lev - 13) / 3);
2604                         creature_ptr->dis_to_a += ((creature_ptr->lev - 13) / 3);
2605                 }
2606                 if (!(creature_ptr->inventory_list[INVEN_LARM].k_idx) && (creature_ptr->lev > 10))
2607                 {
2608                         creature_ptr->to_a += ((creature_ptr->lev - 8) / 3);
2609                         creature_ptr->dis_to_a += ((creature_ptr->lev - 8) / 3);
2610                 }
2611                 if (!(creature_ptr->inventory_list[INVEN_HEAD].k_idx) && (creature_ptr->lev > 4))
2612                 {
2613                         creature_ptr->to_a += (creature_ptr->lev - 2) / 3;
2614                         creature_ptr->dis_to_a += (creature_ptr->lev - 2) / 3;
2615                 }
2616                 if (!(creature_ptr->inventory_list[INVEN_HANDS].k_idx))
2617                 {
2618                         creature_ptr->to_a += (creature_ptr->lev / 2);
2619                         creature_ptr->dis_to_a += (creature_ptr->lev / 2);
2620                 }
2621                 if (!(creature_ptr->inventory_list[INVEN_FEET].k_idx))
2622                 {
2623                         creature_ptr->to_a += (creature_ptr->lev / 3);
2624                         creature_ptr->dis_to_a += (creature_ptr->lev / 3);
2625                 }
2626                 if (creature_ptr->special_defense & KAMAE_BYAKKO)
2627                 {
2628                         creature_ptr->stat_add[A_STR] += 2;
2629                         creature_ptr->stat_add[A_DEX] += 2;
2630                         creature_ptr->stat_add[A_CON] -= 3;
2631                 }
2632                 else if (creature_ptr->special_defense & KAMAE_SEIRYU)
2633                 {
2634                 }
2635                 else if (creature_ptr->special_defense & KAMAE_GENBU)
2636                 {
2637                         creature_ptr->stat_add[A_INT] -= 1;
2638                         creature_ptr->stat_add[A_WIS] -= 1;
2639                         creature_ptr->stat_add[A_DEX] -= 2;
2640                         creature_ptr->stat_add[A_CON] += 3;
2641                 }
2642                 else if (creature_ptr->special_defense & KAMAE_SUZAKU)
2643                 {
2644                         creature_ptr->stat_add[A_STR] -= 2;
2645                         creature_ptr->stat_add[A_INT] += 1;
2646                         creature_ptr->stat_add[A_WIS] += 1;
2647                         creature_ptr->stat_add[A_DEX] += 2;
2648                         creature_ptr->stat_add[A_CON] -= 2;
2649                 }
2650         }
2651
2652         if (creature_ptr->special_defense & KATA_KOUKIJIN)
2653         {
2654                 for (i = 0; i < A_MAX; i++)
2655                         creature_ptr->stat_add[i] += 5;
2656                 creature_ptr->to_a -= 50;
2657                 creature_ptr->dis_to_a -= 50;
2658         }
2659
2660         /* Hack -- aura of fire also provides light */
2661         if (creature_ptr->sh_fire) creature_ptr->lite = TRUE;
2662
2663         /* Golems also get an intrinsic AC bonus */
2664         if (PRACE_IS_(creature_ptr, RACE_GOLEM) || PRACE_IS_(creature_ptr, RACE_ANDROID))
2665         {
2666                 creature_ptr->to_a += 10 + (creature_ptr->lev * 2 / 5);
2667                 creature_ptr->dis_to_a += 10 + (creature_ptr->lev * 2 / 5);
2668         }
2669
2670         /* Hex bonuses */
2671         if (creature_ptr->realm1 == REALM_HEX)
2672         {
2673                 if (hex_spelling_any(p_ptr)) creature_ptr->skill_stl -= (1 + CASTING_HEX_NUM(creature_ptr));
2674                 if (hex_spelling(HEX_DETECT_EVIL)) creature_ptr->esp_evil = TRUE;
2675                 if (hex_spelling(HEX_XTRA_MIGHT)) creature_ptr->stat_add[A_STR] += 4;
2676                 if (hex_spelling(HEX_BUILDING))
2677                 {
2678                         creature_ptr->stat_add[A_STR] += 4;
2679                         creature_ptr->stat_add[A_DEX] += 4;
2680                         creature_ptr->stat_add[A_CON] += 4;
2681                 }
2682                 if (hex_spelling(HEX_DEMON_AURA))
2683                 {
2684                         creature_ptr->sh_fire = TRUE;
2685                         creature_ptr->regenerate = TRUE;
2686                 }
2687                 if (hex_spelling(HEX_ICE_ARMOR))
2688                 {
2689                         creature_ptr->sh_cold = TRUE;
2690                         creature_ptr->to_a += 30;
2691                         creature_ptr->dis_to_a += 30;
2692                 }
2693                 if (hex_spelling(HEX_SHOCK_CLOAK))
2694                 {
2695                         creature_ptr->sh_elec = TRUE;
2696                         new_speed += 3;
2697                 }
2698                 for (i = INVEN_RARM; i <= INVEN_FEET; i++)
2699                 {
2700                         ARMOUR_CLASS ac = 0;
2701                         o_ptr = &creature_ptr->inventory_list[i];
2702                         if (!o_ptr->k_idx) continue;
2703                         if (!object_is_armour(o_ptr)) continue;
2704                         if (!object_is_cursed(o_ptr)) continue;
2705                         ac += 5;
2706                         if (o_ptr->curse_flags & TRC_HEAVY_CURSE) ac += 7;
2707                         if (o_ptr->curse_flags & TRC_PERMA_CURSE) ac += 13;
2708                         creature_ptr->to_a += (s16b)ac;
2709                         creature_ptr->dis_to_a += (s16b)ac;
2710                 }
2711         }
2712
2713         /* Calculate stats */
2714         for (i = 0; i < A_MAX; i++)
2715         {
2716                 int top, use, ind;
2717
2718                 /* Extract the new "stat_use" value for the stat */
2719                 top = modify_stat_value(creature_ptr->stat_max[i], creature_ptr->stat_add[i]);
2720
2721                 /* Notice changes */
2722                 if (creature_ptr->stat_top[i] != top)
2723                 {
2724                         /* Save the new value */
2725                         creature_ptr->stat_top[i] = (s16b)top;
2726                         creature_ptr->redraw |= (PR_STATS);
2727                         creature_ptr->window |= (PW_PLAYER);
2728                 }
2729
2730
2731                 /* Extract the new "stat_use" value for the stat */
2732                 use = modify_stat_value(creature_ptr->stat_cur[i], creature_ptr->stat_add[i]);
2733
2734                 if ((i == A_CHR) && (creature_ptr->muta3 & MUT3_ILL_NORM))
2735                 {
2736                         /* 10 to 18/90 charisma, guaranteed, based on level */
2737                         if (use < 8 + 2 * creature_ptr->lev)
2738                         {
2739                                 use = 8 + 2 * creature_ptr->lev;
2740                         }
2741                 }
2742
2743                 /* Notice changes */
2744                 if (creature_ptr->stat_use[i] != use)
2745                 {
2746                         /* Save the new value */
2747                         creature_ptr->stat_use[i] = (s16b)use;
2748                         creature_ptr->redraw |= (PR_STATS);
2749                         creature_ptr->window |= (PW_PLAYER);
2750                 }
2751
2752
2753                 /* Values: 3, 4, ..., 17 */
2754                 if (use <= 18) ind = (use - 3);
2755
2756                 /* Ranges: 18/00-18/09, ..., 18/210-18/219 */
2757                 else if (use <= 18 + 219) ind = (15 + (use - 18) / 10);
2758
2759                 /* Range: 18/220+ */
2760                 else ind = (37);
2761
2762                 /* Notice changes */
2763                 if (creature_ptr->stat_ind[i] != ind)
2764                 {
2765                         /* Save the new index */
2766                         creature_ptr->stat_ind[i] = (s16b)ind;
2767
2768                         /* Change in CON affects Hitpoints */
2769                         if (i == A_CON)
2770                         {
2771                                 creature_ptr->update |= (PU_HP);
2772                         }
2773
2774                         /* Change in INT may affect Mana/Spells */
2775                         else if (i == A_INT)
2776                         {
2777                                 if (mp_ptr->spell_stat == A_INT)
2778                                 {
2779                                         creature_ptr->update |= (PU_MANA | PU_SPELLS);
2780                                 }
2781                         }
2782
2783                         /* Change in WIS may affect Mana/Spells */
2784                         else if (i == A_WIS)
2785                         {
2786                                 if (mp_ptr->spell_stat == A_WIS)
2787                                 {
2788                                         creature_ptr->update |= (PU_MANA | PU_SPELLS);
2789                                 }
2790                         }
2791
2792                         /* Change in WIS may affect Mana/Spells */
2793                         else if (i == A_CHR)
2794                         {
2795                                 if (mp_ptr->spell_stat == A_CHR)
2796                                 {
2797                                         creature_ptr->update |= (PU_MANA | PU_SPELLS);
2798                                 }
2799                         }
2800
2801                         creature_ptr->window |= (PW_PLAYER);
2802                 }
2803         }
2804
2805
2806         /* Apply temporary "stun" */
2807         if (creature_ptr->stun > 50)
2808         {
2809                 creature_ptr->to_h[0] -= 20;
2810                 creature_ptr->to_h[1] -= 20;
2811                 creature_ptr->to_h_b -= 20;
2812                 creature_ptr->to_h_m -= 20;
2813                 creature_ptr->dis_to_h[0] -= 20;
2814                 creature_ptr->dis_to_h[1] -= 20;
2815                 creature_ptr->dis_to_h_b -= 20;
2816                 creature_ptr->to_d[0] -= 20;
2817                 creature_ptr->to_d[1] -= 20;
2818                 creature_ptr->to_d_m -= 20;
2819                 creature_ptr->dis_to_d[0] -= 20;
2820                 creature_ptr->dis_to_d[1] -= 20;
2821         }
2822         else if (creature_ptr->stun)
2823         {
2824                 creature_ptr->to_h[0] -= 5;
2825                 creature_ptr->to_h[1] -= 5;
2826                 creature_ptr->to_h_b -= 5;
2827                 creature_ptr->to_h_m -= 5;
2828                 creature_ptr->dis_to_h[0] -= 5;
2829                 creature_ptr->dis_to_h[1] -= 5;
2830                 creature_ptr->dis_to_h_b -= 5;
2831                 creature_ptr->to_d[0] -= 5;
2832                 creature_ptr->to_d[1] -= 5;
2833                 creature_ptr->to_d_m -= 5;
2834                 creature_ptr->dis_to_d[0] -= 5;
2835                 creature_ptr->dis_to_d[1] -= 5;
2836         }
2837
2838         /* Wraith form */
2839         if (creature_ptr->wraith_form)
2840         {
2841                 creature_ptr->reflect = TRUE;
2842                 creature_ptr->pass_wall = TRUE;
2843         }
2844
2845         if (creature_ptr->kabenuke)
2846         {
2847                 creature_ptr->pass_wall = TRUE;
2848         }
2849
2850         /* Temporary blessing */
2851         if (IS_BLESSED())
2852         {
2853                 creature_ptr->to_a += 5;
2854                 creature_ptr->dis_to_a += 5;
2855                 creature_ptr->to_h[0] += 10;
2856                 creature_ptr->to_h[1] += 10;
2857                 creature_ptr->to_h_b += 10;
2858                 creature_ptr->to_h_m += 10;
2859                 creature_ptr->dis_to_h[0] += 10;
2860                 creature_ptr->dis_to_h[1] += 10;
2861                 creature_ptr->dis_to_h_b += 10;
2862         }
2863
2864         if (creature_ptr->magicdef)
2865         {
2866                 creature_ptr->resist_blind = TRUE;
2867                 creature_ptr->resist_conf = TRUE;
2868                 creature_ptr->reflect = TRUE;
2869                 creature_ptr->free_act = TRUE;
2870                 creature_ptr->levitation = TRUE;
2871         }
2872
2873         /* Temporary "Hero" */
2874         if (IS_HERO())
2875         {
2876                 creature_ptr->to_h[0] += 12;
2877                 creature_ptr->to_h[1] += 12;
2878                 creature_ptr->to_h_b += 12;
2879                 creature_ptr->to_h_m += 12;
2880                 creature_ptr->dis_to_h[0] += 12;
2881                 creature_ptr->dis_to_h[1] += 12;
2882                 creature_ptr->dis_to_h_b += 12;
2883         }
2884
2885         /* Temporary "Beserk" */
2886         if (creature_ptr->shero)
2887         {
2888                 creature_ptr->to_h[0] += 12;
2889                 creature_ptr->to_h[1] += 12;
2890                 creature_ptr->to_h_b -= 12;
2891                 creature_ptr->to_h_m += 12;
2892                 creature_ptr->to_d[0] += 3 + (creature_ptr->lev / 5);
2893                 creature_ptr->to_d[1] += 3 + (creature_ptr->lev / 5);
2894                 creature_ptr->to_d_m += 3 + (creature_ptr->lev / 5);
2895                 creature_ptr->dis_to_h[0] += 12;
2896                 creature_ptr->dis_to_h[1] += 12;
2897                 creature_ptr->dis_to_h_b -= 12;
2898                 creature_ptr->dis_to_d[0] += 3 + (creature_ptr->lev / 5);
2899                 creature_ptr->dis_to_d[1] += 3 + (creature_ptr->lev / 5);
2900                 creature_ptr->to_a -= 10;
2901                 creature_ptr->dis_to_a -= 10;
2902                 creature_ptr->skill_stl -= 7;
2903                 creature_ptr->skill_dev -= 20;
2904                 creature_ptr->skill_sav -= 30;
2905                 creature_ptr->skill_srh -= 15;
2906                 creature_ptr->skill_fos -= 15;
2907                 creature_ptr->skill_tht -= 20;
2908                 creature_ptr->skill_dig += 30;
2909         }
2910
2911         /* Temporary "fast" */
2912         if (IS_FAST())
2913         {
2914                 new_speed += 10;
2915         }
2916
2917         /* Temporary "slow" */
2918         if (creature_ptr->slow)
2919         {
2920                 new_speed -= 10;
2921         }
2922
2923         /* Temporary "telepathy" */
2924         if (IS_TIM_ESP())
2925         {
2926                 creature_ptr->telepathy = TRUE;
2927         }
2928
2929         if (creature_ptr->ele_immune)
2930         {
2931                 if (creature_ptr->special_defense & DEFENSE_ACID)
2932                         creature_ptr->immune_acid = TRUE;
2933                 else if (creature_ptr->special_defense & DEFENSE_ELEC)
2934                         creature_ptr->immune_elec = TRUE;
2935                 else if (creature_ptr->special_defense & DEFENSE_FIRE)
2936                         creature_ptr->immune_fire = TRUE;
2937                 else if (creature_ptr->special_defense & DEFENSE_COLD)
2938                         creature_ptr->immune_cold = TRUE;
2939         }
2940
2941         /* Temporary see invisible */
2942         if (creature_ptr->tim_invis)
2943         {
2944                 creature_ptr->see_inv = TRUE;
2945         }
2946
2947         /* Temporary infravision boost */
2948         if (creature_ptr->tim_infra)
2949         {
2950                 creature_ptr->see_infra += 3;
2951         }
2952
2953         /* Temporary regeneration boost */
2954         if (creature_ptr->tim_regen)
2955         {
2956                 creature_ptr->regenerate = TRUE;
2957         }
2958
2959         /* Temporary levitation */
2960         if (creature_ptr->tim_levitation)
2961         {
2962                 creature_ptr->levitation = TRUE;
2963         }
2964
2965         /* Temporary reflection */
2966         if (creature_ptr->tim_reflect)
2967         {
2968                 creature_ptr->reflect = TRUE;
2969         }
2970
2971         /* Hack -- Hero/Shero -> Res fear */
2972         if (IS_HERO() || creature_ptr->shero)
2973         {
2974                 creature_ptr->resist_fear = TRUE;
2975         }
2976
2977
2978         /* Hack -- Telepathy Change */
2979         if (creature_ptr->telepathy != old_telepathy)
2980         {
2981                 creature_ptr->update |= (PU_MONSTERS);
2982         }
2983
2984         if ((creature_ptr->esp_animal != old_esp_animal) ||
2985                 (creature_ptr->esp_undead != old_esp_undead) ||
2986                 (creature_ptr->esp_demon != old_esp_demon) ||
2987                 (creature_ptr->esp_orc != old_esp_orc) ||
2988                 (creature_ptr->esp_troll != old_esp_troll) ||
2989                 (creature_ptr->esp_giant != old_esp_giant) ||
2990                 (creature_ptr->esp_dragon != old_esp_dragon) ||
2991                 (creature_ptr->esp_human != old_esp_human) ||
2992                 (creature_ptr->esp_evil != old_esp_evil) ||
2993                 (creature_ptr->esp_good != old_esp_good) ||
2994                 (creature_ptr->esp_nonliving != old_esp_nonliving) ||
2995                 (creature_ptr->esp_unique != old_esp_unique))
2996         {
2997                 creature_ptr->update |= (PU_MONSTERS);
2998         }
2999
3000         /* Hack -- See Invis Change */
3001         if (creature_ptr->see_inv != old_see_inv)
3002         {
3003                 creature_ptr->update |= (PU_MONSTERS);
3004         }
3005
3006         /* Bloating slows the player down (a little) */
3007         if (creature_ptr->food >= PY_FOOD_MAX) new_speed -= 10;
3008
3009         if (creature_ptr->special_defense & KAMAE_SUZAKU) new_speed += 10;
3010
3011         if ((creature_ptr->migite && (empty_hands_status & EMPTY_HAND_RARM)) ||
3012                 (creature_ptr->hidarite && (empty_hands_status & EMPTY_HAND_LARM)))
3013         {
3014                 creature_ptr->to_h[default_hand] += (creature_ptr->skill_exp[GINOU_SUDE] - WEAPON_EXP_BEGINNER) / 200;
3015                 creature_ptr->dis_to_h[default_hand] += (creature_ptr->skill_exp[GINOU_SUDE] - WEAPON_EXP_BEGINNER) / 200;
3016         }
3017
3018         if (has_melee_weapon(creature_ptr, INVEN_RARM) && has_melee_weapon(creature_ptr, INVEN_LARM))
3019         {
3020                 int penalty1, penalty2;
3021                 penalty1 = ((100 - creature_ptr->skill_exp[GINOU_NITOURYU] / 160) - (130 - creature_ptr->inventory_list[INVEN_RARM].weight) / 8);
3022                 penalty2 = ((100 - creature_ptr->skill_exp[GINOU_NITOURYU] / 160) - (130 - creature_ptr->inventory_list[INVEN_LARM].weight) / 8);
3023                 if ((creature_ptr->inventory_list[INVEN_RARM].name1 == ART_QUICKTHORN) && (creature_ptr->inventory_list[INVEN_LARM].name1 == ART_TINYTHORN))
3024                 {
3025                         penalty1 = penalty1 / 2 - 5;
3026                         penalty2 = penalty2 / 2 - 5;
3027                         new_speed += 7;
3028                         creature_ptr->to_a += 10;
3029                         creature_ptr->dis_to_a += 10;
3030                 }
3031                 if (easy_2weapon)
3032                 {
3033                         if (penalty1 > 0) penalty1 /= 2;
3034                         if (penalty2 > 0) penalty2 /= 2;
3035                 }
3036                 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)))
3037                 {
3038                         penalty1 = MAX(0, penalty1 - 10);
3039                         penalty2 = MAX(0, penalty2 - 10);
3040                 }
3041                 if ((creature_ptr->inventory_list[INVEN_RARM].name1 == ART_MUSASI_KATANA) && (creature_ptr->inventory_list[INVEN_LARM].name1 == ART_MUSASI_WAKIZASI))
3042                 {
3043                         penalty1 = MIN(0, penalty1);
3044                         penalty2 = MIN(0, penalty2);
3045                         creature_ptr->to_a += 10;
3046                         creature_ptr->dis_to_a += 10;
3047                 }
3048                 else
3049                 {
3050                         if ((creature_ptr->inventory_list[INVEN_RARM].name1 == ART_MUSASI_KATANA) && (penalty1 > 0))
3051                                 penalty1 /= 2;
3052                         if ((creature_ptr->inventory_list[INVEN_LARM].name1 == ART_MUSASI_WAKIZASI) && (penalty2 > 0))
3053                                 penalty2 /= 2;
3054                 }
3055                 if (creature_ptr->inventory_list[INVEN_RARM].tval == TV_POLEARM) penalty1 += 10;
3056                 if (creature_ptr->inventory_list[INVEN_LARM].tval == TV_POLEARM) penalty2 += 10;
3057                 creature_ptr->to_h[0] -= (s16b)penalty1;
3058                 creature_ptr->to_h[1] -= (s16b)penalty2;
3059                 creature_ptr->dis_to_h[0] -= (s16b)penalty1;
3060                 creature_ptr->dis_to_h[1] -= (s16b)penalty2;
3061         }
3062
3063         /* Extract the current weight (in tenth pounds) */
3064         j = creature_ptr->total_weight;
3065
3066         if (!creature_ptr->riding)
3067         {
3068                 /* Extract the "weight limit" (in tenth pounds) */
3069                 i = (int)weight_limit(creature_ptr);
3070         }
3071         else
3072         {
3073                 monster_type *riding_m_ptr = &p_ptr->current_floor_ptr->m_list[creature_ptr->riding];
3074                 monster_race *riding_r_ptr = &r_info[riding_m_ptr->r_idx];
3075                 SPEED speed = riding_m_ptr->mspeed;
3076
3077                 if (riding_m_ptr->mspeed > 110)
3078                 {
3079                         new_speed = 110 + (s16b)((speed - 110) * (creature_ptr->skill_exp[GINOU_RIDING] * 3 + creature_ptr->lev * 160L - 10000L) / (22000L));
3080                         if (new_speed < 110) new_speed = 110;
3081                 }
3082                 else
3083                 {
3084                         new_speed = speed;
3085                 }
3086                 new_speed += (creature_ptr->skill_exp[GINOU_RIDING] + creature_ptr->lev * 160L) / 3200;
3087                 if (MON_FAST(riding_m_ptr)) new_speed += 10;
3088                 if (MON_SLOW(riding_m_ptr)) new_speed -= 10;
3089                 riding_levitation = (riding_r_ptr->flags7 & RF7_CAN_FLY) ? TRUE : FALSE;
3090                 if (riding_r_ptr->flags7 & (RF7_CAN_SWIM | RF7_AQUATIC)) creature_ptr->can_swim = TRUE;
3091
3092                 if (!(riding_r_ptr->flags2 & RF2_PASS_WALL)) creature_ptr->pass_wall = FALSE;
3093                 if (riding_r_ptr->flags2 & RF2_KILL_WALL) creature_ptr->kill_wall = TRUE;
3094
3095                 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;
3096
3097                 /* Extract the "weight limit" */
3098                 i = 1500 + riding_r_ptr->level * 25;
3099         }
3100
3101         /* Apply "encumbrance" from weight */
3102         if (j > i) new_speed -= ((j - i) / (i / 5));
3103
3104         /* Searching slows the player down */
3105         if (creature_ptr->action == ACTION_SEARCH) new_speed -= 10;
3106
3107         /* Feature bonus */
3108         if (creature_ptr->prace == RACE_MERFOLK)
3109         {
3110                 if (have_flag(f_ptr->flags, FF_WATER))
3111                 {
3112                         new_speed += (2 + creature_ptr->lev / 10);
3113                 }
3114                 else if (!creature_ptr->levitation)
3115                 {
3116                         new_speed -= 2;
3117                 }
3118         }
3119
3120
3121         /* Actual Modifier Bonuses (Un-inflate stat bonuses) */
3122         creature_ptr->to_a += ((int)(adj_dex_ta[creature_ptr->stat_ind[A_DEX]]) - 128);
3123         creature_ptr->to_d[0] += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3124         creature_ptr->to_d[1] += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3125         creature_ptr->to_d_m += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3126         creature_ptr->to_h[0] += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3127         creature_ptr->to_h[1] += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3128         creature_ptr->to_h_b += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3129         creature_ptr->to_h_m += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3130         creature_ptr->to_h[0] += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3131         creature_ptr->to_h[1] += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3132         creature_ptr->to_h_b += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3133         creature_ptr->to_h_m += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3134
3135         /* Displayed Modifier Bonuses (Un-inflate stat bonuses) */
3136         creature_ptr->dis_to_a += ((int)(adj_dex_ta[creature_ptr->stat_ind[A_DEX]]) - 128);
3137         creature_ptr->dis_to_d[0] += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3138         creature_ptr->dis_to_d[1] += ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128);
3139         creature_ptr->dis_to_h[0] += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3140         creature_ptr->dis_to_h[1] += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3141         creature_ptr->dis_to_h_b += ((int)(adj_dex_th[creature_ptr->stat_ind[A_DEX]]) - 128);
3142         creature_ptr->dis_to_h[0] += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3143         creature_ptr->dis_to_h[1] += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3144         creature_ptr->dis_to_h_b += ((int)(adj_str_th[creature_ptr->stat_ind[A_STR]]) - 128);
3145
3146
3147         /* Obtain the "hold" value */
3148         hold = adj_str_hold[creature_ptr->stat_ind[A_STR]];
3149
3150
3151         /* Examine the "current bow" */
3152         o_ptr = &creature_ptr->inventory_list[INVEN_BOW];
3153
3154         /* It is hard to carholdry a heavy bow */
3155         creature_ptr->heavy_shoot = is_heavy_shoot(creature_ptr, o_ptr);
3156         if (creature_ptr->heavy_shoot)
3157         {
3158                 /* Hard to wield a heavy bow */
3159                 creature_ptr->to_h_b += 2 * (hold - o_ptr->weight / 10);
3160                 creature_ptr->dis_to_h_b += 2 * (hold - o_ptr->weight / 10);
3161         }
3162
3163         /* Compute "extra shots" if needed */
3164         if (o_ptr->k_idx)
3165         {
3166                 creature_ptr->tval_ammo = (byte_hack)bow_tval_ammo(o_ptr);
3167
3168                 /* Apply special flags */
3169                 if (o_ptr->k_idx && !creature_ptr->heavy_shoot)
3170                 {
3171                         /* Extra shots */
3172                         creature_ptr->num_fire = calc_num_fire(creature_ptr, o_ptr);
3173
3174                         /* Snipers love Cross bows */
3175                         if ((creature_ptr->pclass == CLASS_SNIPER) &&
3176                                 (creature_ptr->tval_ammo == TV_BOLT))
3177                         {
3178                                 creature_ptr->to_h_b += (10 + (creature_ptr->lev / 5));
3179                                 creature_ptr->dis_to_h_b += (10 + (creature_ptr->lev / 5));
3180                         }
3181                 }
3182         }
3183
3184         if (creature_ptr->ryoute) hold *= 2;
3185
3186         for (i = 0; i < 2; i++)
3187         {
3188                 /* Examine the "main weapon" */
3189                 o_ptr = &creature_ptr->inventory_list[INVEN_RARM + i];
3190
3191                 object_flags(o_ptr, flgs);
3192
3193                 /* Assume not heavy */
3194                 creature_ptr->heavy_wield[i] = FALSE;
3195                 creature_ptr->icky_wield[i] = FALSE;
3196                 creature_ptr->riding_wield[i] = FALSE;
3197
3198                 if (!has_melee_weapon(creature_ptr, INVEN_RARM + i))
3199                 {
3200                         creature_ptr->num_blow[i] = 1;
3201                         continue;
3202                 }
3203                 /* It is hard to hold a heavy weapon */
3204                 if (hold < o_ptr->weight / 10)
3205                 {
3206                         /* Hard to wield a heavy weapon */
3207                         creature_ptr->to_h[i] += 2 * (hold - o_ptr->weight / 10);
3208                         creature_ptr->dis_to_h[i] += 2 * (hold - o_ptr->weight / 10);
3209
3210                         /* Heavy weapon */
3211                         creature_ptr->heavy_wield[i] = TRUE;
3212                 }
3213                 else if (creature_ptr->ryoute && (hold < o_ptr->weight / 5)) omoi = TRUE;
3214
3215                 if ((i == 1) && (o_ptr->tval == TV_SWORD) && ((o_ptr->sval == SV_MAIN_GAUCHE) || (o_ptr->sval == SV_WAKIZASHI)))
3216                 {
3217                         creature_ptr->to_a += 5;
3218                         creature_ptr->dis_to_a += 5;
3219                 }
3220
3221                 /* Normal weapons */
3222                 if (o_ptr->k_idx && !creature_ptr->heavy_wield[i])
3223                 {
3224                         int str_index, dex_index;
3225
3226                         int num = 0, wgt = 0, mul = 0, div = 0;
3227
3228                         /* Analyze the class */
3229                         switch (creature_ptr->pclass)
3230                         {
3231                         case CLASS_WARRIOR:
3232                                 num = 6; wgt = 70; mul = 5; break;
3233
3234                         case CLASS_BERSERKER:
3235                                 num = 6; wgt = 70; mul = 7; break;
3236
3237                         case CLASS_MAGE:
3238                         case CLASS_HIGH_MAGE:
3239                         case CLASS_BLUE_MAGE:
3240                                 num = 3; wgt = 100; mul = 2; break;
3241
3242                         case CLASS_PRIEST:
3243                         case CLASS_MAGIC_EATER:
3244                         case CLASS_MINDCRAFTER:
3245                                 num = 5; wgt = 100; mul = 3; break;
3246
3247                         case CLASS_ROGUE:
3248                                 num = 5; wgt = 40; mul = 3; break;
3249
3250                         case CLASS_RANGER:
3251                                 num = 5; wgt = 70; mul = 4; break;
3252
3253                         case CLASS_PALADIN:
3254                         case CLASS_SAMURAI:
3255                                 num = 5; wgt = 70; mul = 4; break;
3256
3257                         case CLASS_SMITH:
3258                                 num = 5; wgt = 150; mul = 5; break;
3259
3260                         case CLASS_WARRIOR_MAGE:
3261                         case CLASS_RED_MAGE:
3262                                 num = 5; wgt = 70; mul = 3; break;
3263
3264                         case CLASS_CHAOS_WARRIOR:
3265                                 num = 5; wgt = 70; mul = 4; break;
3266
3267                         case CLASS_MONK:
3268                                 num = 5; wgt = 60; mul = 3; break;
3269
3270                         case CLASS_TOURIST:
3271                                 num = 4; wgt = 100; mul = 3; break;
3272
3273                         case CLASS_IMITATOR:
3274                                 num = 5; wgt = 70; mul = 4; break;
3275
3276                         case CLASS_BEASTMASTER:
3277                                 num = 5; wgt = 70; mul = 3; break;
3278
3279                         case CLASS_CAVALRY:
3280                                 if ((creature_ptr->riding) && (have_flag(flgs, TR_RIDING))) { num = 5; wgt = 70; mul = 4; }
3281                                 else { num = 5; wgt = 100; mul = 3; }
3282                                 break;
3283
3284                         case CLASS_SORCERER:
3285                                 num = 1; wgt = 1; mul = 1; break;
3286
3287                         case CLASS_ARCHER:
3288                         case CLASS_BARD:
3289                         case CLASS_SNIPER:
3290                                 num = 4; wgt = 70; mul = 2; break;
3291
3292                         case CLASS_FORCETRAINER:
3293                                 num = 4; wgt = 60; mul = 2; break;
3294
3295                         case CLASS_MIRROR_MASTER:
3296                                 num = 3; wgt = 100; mul = 3; break;
3297
3298                         case CLASS_NINJA:
3299                                 num = 4; wgt = 20; mul = 1; break;
3300                         }
3301
3302                         /* Hex - extra mights gives +1 bonus to max blows */
3303                         if (hex_spelling(HEX_XTRA_MIGHT) || hex_spelling(HEX_BUILDING)) { num++; wgt /= 2; mul += 2; }
3304
3305                         /* Enforce a minimum "weight" (tenth pounds) */
3306                         div = ((o_ptr->weight < wgt) ? wgt : o_ptr->weight);
3307
3308                         /* Access the strength vs weight */
3309                         str_index = (adj_str_blow[creature_ptr->stat_ind[A_STR]] * mul / div);
3310
3311                         if (creature_ptr->ryoute && !omoi) str_index++;
3312                         if (creature_ptr->pclass == CLASS_NINJA) str_index = MAX(0, str_index - 1);
3313
3314                         /* Maximal value */
3315                         if (str_index > 11) str_index = 11;
3316
3317                         /* Index by dexterity */
3318                         dex_index = (adj_dex_blow[creature_ptr->stat_ind[A_DEX]]);
3319
3320                         /* Maximal value */
3321                         if (dex_index > 11) dex_index = 11;
3322
3323                         /* Use the blows table */
3324                         creature_ptr->num_blow[i] = blows_table[str_index][dex_index];
3325
3326                         /* Maximal value */
3327                         if (creature_ptr->num_blow[i] > num) creature_ptr->num_blow[i] = (s16b)num;
3328
3329                         /* Add in the "bonus blows" */
3330                         creature_ptr->num_blow[i] += (s16b)extra_blows[i];
3331
3332
3333                         if (creature_ptr->pclass == CLASS_WARRIOR) creature_ptr->num_blow[i] += (creature_ptr->lev / 40);
3334                         else if (creature_ptr->pclass == CLASS_BERSERKER)
3335                         {
3336                                 creature_ptr->num_blow[i] += (creature_ptr->lev / 23);
3337                         }
3338                         else if ((creature_ptr->pclass == CLASS_ROGUE) && (o_ptr->weight < 50) && (creature_ptr->stat_ind[A_DEX] >= 30)) creature_ptr->num_blow[i] ++;
3339
3340                         if (creature_ptr->special_defense & KATA_FUUJIN) creature_ptr->num_blow[i] -= 1;
3341
3342                         if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DOKUBARI)) creature_ptr->num_blow[i] = 1;
3343
3344
3345                         /* Require at least one blow */
3346                         if (creature_ptr->num_blow[i] < 1) creature_ptr->num_blow[i] = 1;
3347
3348                         /* Boost digging skill by weapon weight */
3349                         creature_ptr->skill_dig += (o_ptr->weight / 10);
3350                 }
3351
3352                 /* Assume okay */
3353                 /* Priest weapon penalty for non-blessed edged weapons */
3354                 if ((creature_ptr->pclass == CLASS_PRIEST) && (!(have_flag(flgs, TR_BLESSED))) &&
3355                         ((o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM)))
3356                 {
3357                         /* Reduce the real bonuses */
3358                         creature_ptr->to_h[i] -= 2;
3359                         creature_ptr->to_d[i] -= 2;
3360
3361                         /* Reduce the mental bonuses */
3362                         creature_ptr->dis_to_h[i] -= 2;
3363                         creature_ptr->dis_to_d[i] -= 2;
3364
3365                         /* Icky weapon */
3366                         creature_ptr->icky_wield[i] = TRUE;
3367                 }
3368                 else if (creature_ptr->pclass == CLASS_BERSERKER)
3369                 {
3370                         creature_ptr->to_h[i] += creature_ptr->lev / 5;
3371                         creature_ptr->to_d[i] += creature_ptr->lev / 6;
3372                         creature_ptr->dis_to_h[i] += creature_ptr->lev / 5;
3373                         creature_ptr->dis_to_d[i] += creature_ptr->lev / 6;
3374                         if (((i == 0) && !creature_ptr->hidarite) || creature_ptr->ryoute)
3375                         {
3376                                 creature_ptr->to_h[i] += creature_ptr->lev / 5;
3377                                 creature_ptr->to_d[i] += creature_ptr->lev / 6;
3378                                 creature_ptr->dis_to_h[i] += creature_ptr->lev / 5;
3379                                 creature_ptr->dis_to_d[i] += creature_ptr->lev / 6;
3380                         }
3381                 }
3382                 else if (creature_ptr->pclass == CLASS_SORCERER)
3383                 {
3384                         if (!((o_ptr->tval == TV_HAFTED) && ((o_ptr->sval == SV_WIZSTAFF) || (o_ptr->sval == SV_NAMAKE_HAMMER))))
3385                         {
3386                                 /* Reduce the real bonuses */
3387                                 creature_ptr->to_h[i] -= 200;
3388                                 creature_ptr->to_d[i] -= 200;
3389
3390                                 /* Reduce the mental bonuses */
3391                                 creature_ptr->dis_to_h[i] -= 200;
3392                                 creature_ptr->dis_to_d[i] -= 200;
3393
3394                                 /* Icky weapon */
3395                                 creature_ptr->icky_wield[i] = TRUE;
3396                         }
3397                         else
3398                         {
3399                                 /* Reduce the real bonuses */
3400                                 creature_ptr->to_h[i] -= 30;
3401                                 creature_ptr->to_d[i] -= 10;
3402
3403                                 /* Reduce the mental bonuses */
3404                                 creature_ptr->dis_to_h[i] -= 30;
3405                                 creature_ptr->dis_to_d[i] -= 10;
3406                         }
3407                 }
3408                 /* Hex bonuses */
3409                 if (creature_ptr->realm1 == REALM_HEX)
3410                 {
3411                         if (object_is_cursed(o_ptr))
3412                         {
3413                                 if (o_ptr->curse_flags & (TRC_CURSED)) { creature_ptr->to_h[i] += 5; creature_ptr->dis_to_h[i] += 5; }
3414                                 if (o_ptr->curse_flags & (TRC_HEAVY_CURSE)) { creature_ptr->to_h[i] += 7; creature_ptr->dis_to_h[i] += 7; }
3415                                 if (o_ptr->curse_flags & (TRC_PERMA_CURSE)) { creature_ptr->to_h[i] += 13; creature_ptr->dis_to_h[i] += 13; }
3416                                 if (o_ptr->curse_flags & (TRC_TY_CURSE)) { creature_ptr->to_h[i] += 5; creature_ptr->dis_to_h[i] += 5; }
3417                                 if (hex_spelling(HEX_RUNESWORD))
3418                                 {
3419                                         if (o_ptr->curse_flags & (TRC_CURSED)) { creature_ptr->to_d[i] += 5; creature_ptr->dis_to_d[i] += 5; }
3420                                         if (o_ptr->curse_flags & (TRC_HEAVY_CURSE)) { creature_ptr->to_d[i] += 7; creature_ptr->dis_to_d[i] += 7; }
3421                                         if (o_ptr->curse_flags & (TRC_PERMA_CURSE)) { creature_ptr->to_d[i] += 13; creature_ptr->dis_to_d[i] += 13; }
3422                                 }
3423                         }
3424                 }
3425                 if (creature_ptr->riding)
3426                 {
3427                         if ((o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE)))
3428                         {
3429                                 creature_ptr->to_h[i] += 15;
3430                                 creature_ptr->dis_to_h[i] += 15;
3431                                 creature_ptr->to_dd[i] += 2;
3432                         }
3433                         else if (!(have_flag(flgs, TR_RIDING)))
3434                         {
3435                                 int penalty;
3436                                 if ((creature_ptr->pclass == CLASS_BEASTMASTER) || (creature_ptr->pclass == CLASS_CAVALRY))
3437                                 {
3438                                         penalty = 5;
3439                                 }
3440                                 else
3441                                 {
3442                                         penalty = r_info[p_ptr->current_floor_ptr->m_list[creature_ptr->riding].r_idx].level - creature_ptr->skill_exp[GINOU_RIDING] / 80;
3443                                         penalty += 30;
3444                                         if (penalty < 30) penalty = 30;
3445                                 }
3446                                 creature_ptr->to_h[i] -= (s16b)penalty;
3447                                 creature_ptr->dis_to_h[i] -= (s16b)penalty;
3448
3449                                 /* Riding weapon */
3450                                 creature_ptr->riding_wield[i] = TRUE;
3451                         }
3452                 }
3453         }
3454
3455         if (creature_ptr->riding)
3456         {
3457                 int penalty = 0;
3458
3459                 creature_ptr->riding_ryoute = FALSE;
3460
3461                 if (creature_ptr->ryoute || (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_NONE)) creature_ptr->riding_ryoute = TRUE;
3462                 else if (creature_ptr->pet_extra_flags & PF_RYOUTE)
3463                 {
3464                         switch (creature_ptr->pclass)
3465                         {
3466                         case CLASS_MONK:
3467                         case CLASS_FORCETRAINER:
3468                         case CLASS_BERSERKER:
3469                                 if ((empty_hands(creature_ptr, FALSE) != EMPTY_HAND_NONE) && !has_melee_weapon(creature_ptr, INVEN_RARM) && !has_melee_weapon(creature_ptr, INVEN_LARM))
3470                                         creature_ptr->riding_ryoute = TRUE;
3471                                 break;
3472                         }
3473                 }
3474
3475                 if ((creature_ptr->pclass == CLASS_BEASTMASTER) || (creature_ptr->pclass == CLASS_CAVALRY))
3476                 {
3477                         if (creature_ptr->tval_ammo != TV_ARROW) penalty = 5;
3478                 }
3479                 else
3480                 {
3481                         penalty = r_info[p_ptr->current_floor_ptr->m_list[creature_ptr->riding].r_idx].level - creature_ptr->skill_exp[GINOU_RIDING] / 80;
3482                         penalty += 30;
3483                         if (penalty < 30) penalty = 30;
3484                 }
3485                 if (creature_ptr->tval_ammo == TV_BOLT) penalty *= 2;
3486                 creature_ptr->to_h_b -= (s16b)penalty;
3487                 creature_ptr->dis_to_h_b -= (s16b)penalty;
3488         }
3489
3490         /* Different calculation for monks with empty hands */
3491         if (((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER) || (creature_ptr->pclass == CLASS_BERSERKER)) &&
3492                 (empty_hands_status & EMPTY_HAND_RARM) && !creature_ptr->hidarite)
3493         {
3494                 int blow_base = creature_ptr->lev + adj_dex_blow[creature_ptr->stat_ind[A_DEX]];
3495                 creature_ptr->num_blow[0] = 0;
3496
3497                 if (creature_ptr->pclass == CLASS_FORCETRAINER)
3498                 {
3499                         if (blow_base > 18) creature_ptr->num_blow[0]++;
3500                         if (blow_base > 31) creature_ptr->num_blow[0]++;
3501                         if (blow_base > 44) creature_ptr->num_blow[0]++;
3502                         if (blow_base > 58) creature_ptr->num_blow[0]++;
3503                         if (P_PTR_KI)
3504                         {
3505                                 creature_ptr->to_d[0] += P_PTR_KI / 5;
3506                                 creature_ptr->dis_to_d[0] += P_PTR_KI / 5;
3507                         }
3508                 }
3509                 else
3510                 {
3511                         if (blow_base > 12) creature_ptr->num_blow[0]++;
3512                         if (blow_base > 22) creature_ptr->num_blow[0]++;
3513                         if (blow_base > 31) creature_ptr->num_blow[0]++;
3514                         if (blow_base > 39) creature_ptr->num_blow[0]++;
3515                         if (blow_base > 46) creature_ptr->num_blow[0]++;
3516                         if (blow_base > 53) creature_ptr->num_blow[0]++;
3517                         if (blow_base > 59) creature_ptr->num_blow[0]++;
3518                 }
3519
3520                 if (heavy_armor(creature_ptr) && (creature_ptr->pclass != CLASS_BERSERKER))
3521                         creature_ptr->num_blow[0] /= 2;
3522                 else
3523                 {
3524                         creature_ptr->to_h[0] += (creature_ptr->lev / 3);
3525                         creature_ptr->dis_to_h[0] += (creature_ptr->lev / 3);
3526
3527                         creature_ptr->to_d[0] += (creature_ptr->lev / 6);
3528                         creature_ptr->dis_to_d[0] += (creature_ptr->lev / 6);
3529                 }
3530
3531                 if (creature_ptr->special_defense & KAMAE_BYAKKO)
3532                 {
3533                         creature_ptr->to_a -= 40;
3534                         creature_ptr->dis_to_a -= 40;
3535
3536                 }
3537                 else if (creature_ptr->special_defense & KAMAE_SEIRYU)
3538                 {
3539                         creature_ptr->to_a -= 50;
3540                         creature_ptr->dis_to_a -= 50;
3541                         creature_ptr->resist_acid = TRUE;
3542                         creature_ptr->resist_fire = TRUE;
3543                         creature_ptr->resist_elec = TRUE;
3544                         creature_ptr->resist_cold = TRUE;
3545                         creature_ptr->resist_pois = TRUE;
3546                         creature_ptr->sh_fire = TRUE;
3547                         creature_ptr->sh_elec = TRUE;
3548                         creature_ptr->sh_cold = TRUE;
3549                         creature_ptr->levitation = TRUE;
3550                 }
3551                 else if (creature_ptr->special_defense & KAMAE_GENBU)
3552                 {
3553                         creature_ptr->to_a += (creature_ptr->lev*creature_ptr->lev) / 50;
3554                         creature_ptr->dis_to_a += (creature_ptr->lev*creature_ptr->lev) / 50;
3555                         creature_ptr->reflect = TRUE;
3556                         creature_ptr->num_blow[0] -= 2;
3557                         if ((creature_ptr->pclass == CLASS_MONK) && (creature_ptr->lev > 42)) creature_ptr->num_blow[0]--;
3558                         if (creature_ptr->num_blow[0] < 0) creature_ptr->num_blow[0] = 0;
3559                 }
3560                 else if (creature_ptr->special_defense & KAMAE_SUZAKU)
3561                 {
3562                         creature_ptr->to_h[0] -= (creature_ptr->lev / 3);
3563                         creature_ptr->to_d[0] -= (creature_ptr->lev / 6);
3564
3565                         creature_ptr->dis_to_h[0] -= (creature_ptr->lev / 3);
3566                         creature_ptr->dis_to_d[0] -= (creature_ptr->lev / 6);
3567                         creature_ptr->num_blow[0] /= 2;
3568                         creature_ptr->levitation = TRUE;
3569                 }
3570
3571                 creature_ptr->num_blow[0] += 1 + extra_blows[0];
3572         }
3573
3574         if (creature_ptr->riding) creature_ptr->levitation = riding_levitation;
3575
3576         creature_ptr->monk_armour_aux = FALSE;
3577
3578         if (heavy_armor(creature_ptr))
3579         {
3580                 creature_ptr->monk_armour_aux = TRUE;
3581         }
3582
3583         for (i = 0; i < 2; i++)
3584         {
3585                 if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3586                 {
3587                         OBJECT_TYPE_VALUE tval = creature_ptr->inventory_list[INVEN_RARM + i].tval - TV_WEAPON_BEGIN;
3588                         OBJECT_SUBTYPE_VALUE sval = creature_ptr->inventory_list[INVEN_RARM + i].sval;
3589
3590                         creature_ptr->to_h[i] += (creature_ptr->weapon_exp[tval][sval] - WEAPON_EXP_BEGINNER) / 200;
3591                         creature_ptr->dis_to_h[i] += (creature_ptr->weapon_exp[tval][sval] - WEAPON_EXP_BEGINNER) / 200;
3592                         if ((creature_ptr->pclass == CLASS_MONK) || (creature_ptr->pclass == CLASS_FORCETRAINER))
3593                         {
3594                                 if (!s_info[creature_ptr->pclass].w_max[tval][sval])
3595                                 {
3596                                         creature_ptr->to_h[i] -= 40;
3597                                         creature_ptr->dis_to_h[i] -= 40;
3598                                         creature_ptr->icky_wield[i] = TRUE;
3599                                 }
3600                         }
3601                         else if (creature_ptr->pclass == CLASS_NINJA)
3602                         {
3603                                 if ((s_info[CLASS_NINJA].w_max[tval][sval] <= WEAPON_EXP_BEGINNER) || (creature_ptr->inventory_list[INVEN_LARM - i].tval == TV_SHIELD))
3604                                 {
3605                                         creature_ptr->to_h[i] -= 40;
3606                                         creature_ptr->dis_to_h[i] -= 40;
3607                                         creature_ptr->icky_wield[i] = TRUE;
3608                                         creature_ptr->num_blow[i] /= 2;
3609                                         if (creature_ptr->num_blow[i] < 1) creature_ptr->num_blow[i] = 1;
3610                                 }
3611                         }
3612                 }
3613         }
3614
3615         /* Maximum speed is (+99). (internally it's 110 + 99) */
3616         /* Temporary lightspeed forces to be maximum speed */
3617         if ((creature_ptr->lightspeed && !creature_ptr->riding) || (new_speed > 209))
3618         {
3619                 new_speed = 209;
3620         }
3621
3622         /* Minimum speed is (-99). (internally it's 110 - 99) */
3623         if (new_speed < 11) new_speed = 11;
3624
3625         /* Display the speed (if needed) */
3626         if (creature_ptr->pspeed != (byte)new_speed)
3627         {
3628                 creature_ptr->pspeed = (byte)new_speed;
3629                 creature_ptr->redraw |= (PR_SPEED);
3630         }
3631
3632         if (yoiyami)
3633         {
3634                 if (creature_ptr->to_a > (0 - creature_ptr->ac))
3635                         creature_ptr->to_a = 0 - creature_ptr->ac;
3636                 if (creature_ptr->dis_to_a > (0 - creature_ptr->dis_ac))
3637                         creature_ptr->dis_to_a = 0 - creature_ptr->dis_ac;
3638         }
3639
3640         /* Redraw armor (if needed) */
3641         if ((creature_ptr->dis_ac != old_dis_ac) || (creature_ptr->dis_to_a != old_dis_to_a))
3642         {
3643                 creature_ptr->redraw |= (PR_ARMOR);
3644                 creature_ptr->window |= (PW_PLAYER);
3645         }
3646
3647         if (creature_ptr->ryoute && !omoi)
3648         {
3649                 int bonus_to_h = 0, bonus_to_d = 0;
3650                 bonus_to_d = ((int)(adj_str_td[creature_ptr->stat_ind[A_STR]]) - 128) / 2;
3651                 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);
3652
3653                 creature_ptr->to_h[default_hand] += MAX(bonus_to_h, 1);
3654                 creature_ptr->dis_to_h[default_hand] += MAX(bonus_to_h, 1);
3655                 creature_ptr->to_d[default_hand] += MAX(bonus_to_d, 1);
3656                 creature_ptr->dis_to_d[default_hand] += MAX(bonus_to_d, 1);
3657         }
3658
3659         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;
3660
3661         /* Affect Skill -- stealth (bonus one) */
3662         creature_ptr->skill_stl += 1;
3663
3664         if (IS_TIM_STEALTH()) creature_ptr->skill_stl += 99;
3665
3666         /* Affect Skill -- disarming (DEX and INT) */
3667         creature_ptr->skill_dis += adj_dex_dis[creature_ptr->stat_ind[A_DEX]];
3668         creature_ptr->skill_dis += adj_int_dis[creature_ptr->stat_ind[A_INT]];
3669
3670         /* Affect Skill -- magic devices (INT) */
3671         creature_ptr->skill_dev += adj_int_dev[creature_ptr->stat_ind[A_INT]];
3672
3673         /* Affect Skill -- saving throw (WIS) */
3674         creature_ptr->skill_sav += adj_wis_sav[creature_ptr->stat_ind[A_WIS]];
3675
3676         /* Affect Skill -- digging (STR) */
3677         creature_ptr->skill_dig += adj_str_dig[creature_ptr->stat_ind[A_STR]];
3678
3679         /* Affect Skill -- disarming (Level, by Class) */
3680         creature_ptr->skill_dis += ((cp_ptr->x_dis * creature_ptr->lev / 10) + (ap_ptr->a_dis * creature_ptr->lev / 50));
3681
3682         /* Affect Skill -- magic devices (Level, by Class) */
3683         creature_ptr->skill_dev += ((cp_ptr->x_dev * creature_ptr->lev / 10) + (ap_ptr->a_dev * creature_ptr->lev / 50));
3684
3685         /* Affect Skill -- saving throw (Level, by Class) */
3686         creature_ptr->skill_sav += ((cp_ptr->x_sav * creature_ptr->lev / 10) + (ap_ptr->a_sav * creature_ptr->lev / 50));
3687
3688         /* Affect Skill -- stealth (Level, by Class) */
3689         creature_ptr->skill_stl += (cp_ptr->x_stl * creature_ptr->lev / 10);
3690
3691         /* Affect Skill -- search ability (Level, by Class) */
3692         creature_ptr->skill_srh += (cp_ptr->x_srh * creature_ptr->lev / 10);
3693
3694         /* Affect Skill -- search frequency (Level, by Class) */
3695         creature_ptr->skill_fos += (cp_ptr->x_fos * creature_ptr->lev / 10);
3696
3697         /* Affect Skill -- combat (normal) (Level, by Class) */
3698         creature_ptr->skill_thn += ((cp_ptr->x_thn * creature_ptr->lev / 10) + (ap_ptr->a_thn * creature_ptr->lev / 50));
3699
3700         /* Affect Skill -- combat (shooting) (Level, by Class) */
3701         creature_ptr->skill_thb += ((cp_ptr->x_thb * creature_ptr->lev / 10) + (ap_ptr->a_thb * creature_ptr->lev / 50));
3702
3703         /* Affect Skill -- combat (throwing) (Level, by Class) */
3704         creature_ptr->skill_tht += ((cp_ptr->x_thb * creature_ptr->lev / 10) + (ap_ptr->a_thb * creature_ptr->lev / 50));
3705
3706
3707         if ((PRACE_IS_(creature_ptr, RACE_S_FAIRY)) && (creature_ptr->pseikaku != SEIKAKU_SEXY) && (creature_ptr->cursed & TRC_AGGRAVATE))
3708         {
3709                 creature_ptr->cursed &= ~(TRC_AGGRAVATE);
3710                 creature_ptr->skill_stl = MIN(creature_ptr->skill_stl - 3, (creature_ptr->skill_stl + 2) / 2);
3711         }
3712
3713         /* Limit Skill -- stealth from 0 to 30 */
3714         if (creature_ptr->skill_stl > 30) creature_ptr->skill_stl = 30;
3715         if (creature_ptr->skill_stl < 0) creature_ptr->skill_stl = 0;
3716
3717         /* Limit Skill -- digging from 1 up */
3718         if (creature_ptr->skill_dig < 1) creature_ptr->skill_dig = 1;
3719
3720         if (creature_ptr->anti_magic && (creature_ptr->skill_sav < (90 + creature_ptr->lev))) creature_ptr->skill_sav = 90 + creature_ptr->lev;
3721
3722         if (creature_ptr->tsubureru) creature_ptr->skill_sav = 10;
3723
3724         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;
3725
3726         if (down_saving) creature_ptr->skill_sav /= 2;
3727
3728         /* Hack -- Each elemental immunity includes resistance */
3729         if (creature_ptr->immune_acid) creature_ptr->resist_acid = TRUE;
3730         if (creature_ptr->immune_elec) creature_ptr->resist_elec = TRUE;
3731         if (creature_ptr->immune_fire) creature_ptr->resist_fire = TRUE;
3732         if (creature_ptr->immune_cold) creature_ptr->resist_cold = TRUE;
3733
3734
3735         /* Hack -- handle "xtra" mode */
3736         if (current_world_ptr->character_xtra) return;
3737
3738         /* Take note when "heavy bow" changes */
3739         if (creature_ptr->old_heavy_shoot != creature_ptr->heavy_shoot)
3740         {
3741                 if (creature_ptr->heavy_shoot)
3742                 {
3743                         msg_print(_("こんな重い弓を装備しているのは大変だ。", "You have trouble wielding such a heavy bow."));
3744                 }
3745                 else if (creature_ptr->inventory_list[INVEN_BOW].k_idx)
3746                 {
3747                         msg_print(_("この弓なら装備していても辛くない。", "You have no trouble wielding your bow."));
3748                 }
3749                 else
3750                 {
3751                         msg_print(_("重い弓を装備からはずして体が楽になった。", "You feel relieved to put down your heavy bow."));
3752                 }
3753
3754                 /* Save it */
3755                 creature_ptr->old_heavy_shoot = creature_ptr->heavy_shoot;
3756         }
3757
3758         for (i = 0; i < 2; i++)
3759         {
3760                 /* Take note when "heavy weapon" changes */
3761                 if (creature_ptr->old_heavy_wield[i] != creature_ptr->heavy_wield[i])
3762                 {
3763                         if (creature_ptr->heavy_wield[i])
3764                         {
3765                                 msg_print(_("こんな重い武器を装備しているのは大変だ。", "You have trouble wielding such a heavy weapon."));
3766                         }
3767                         else if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3768                         {
3769                                 msg_print(_("これなら装備していても辛くない。", "You have no trouble wielding your weapon."));
3770                         }
3771                         else if (creature_ptr->heavy_wield[1 - i])
3772                         {
3773                                 msg_print(_("まだ武器が重い。", "You have still trouble wielding a heavy weapon."));
3774                         }
3775                         else
3776                         {
3777                                 msg_print(_("重い武器を装備からはずして体が楽になった。", "You feel relieved to put down your heavy weapon."));
3778                         }
3779
3780                         /* Save it */
3781                         creature_ptr->old_heavy_wield[i] = creature_ptr->heavy_wield[i];
3782                 }
3783
3784                 /* Take note when "heavy weapon" changes */
3785                 if (creature_ptr->old_riding_wield[i] != creature_ptr->riding_wield[i])
3786                 {
3787                         if (creature_ptr->riding_wield[i])
3788                         {
3789                                 msg_print(_("この武器は乗馬中に使うにはむかないようだ。", "This weapon is not suitable for use while riding."));
3790                         }
3791                         else if (!creature_ptr->riding)
3792                         {
3793                                 msg_print(_("この武器は徒歩で使いやすい。", "This weapon was not suitable for use while riding."));
3794                         }
3795                         else if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3796                         {
3797                                 msg_print(_("これなら乗馬中にぴったりだ。", "This weapon is suitable for use while riding."));
3798                         }
3799                         /* Save it */
3800                         creature_ptr->old_riding_wield[i] = creature_ptr->riding_wield[i];
3801                 }
3802
3803                 /* Take note when "illegal weapon" changes */
3804                 if (creature_ptr->old_icky_wield[i] != creature_ptr->icky_wield[i])
3805                 {
3806                         if (creature_ptr->icky_wield[i])
3807                         {
3808                                 msg_print(_("今の装備はどうも自分にふさわしくない気がする。", "You do not feel comfortable with your weapon."));
3809                                 if (current_world_ptr->is_loading_now)
3810                                 {
3811                                         chg_virtue(creature_ptr, V_FAITH, -1);
3812                                 }
3813                         }
3814                         else if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3815                         {
3816                                 msg_print(_("今の装備は自分にふさわしい気がする。", "You feel comfortable with your weapon."));
3817                         }
3818                         else
3819                         {
3820                                 msg_print(_("装備をはずしたら随分と気が楽になった。", "You feel more comfortable after removing your weapon."));
3821                         }
3822
3823                         /* Save it */
3824                         creature_ptr->old_icky_wield[i] = creature_ptr->icky_wield[i];
3825                 }
3826         }
3827
3828         if (creature_ptr->riding && (creature_ptr->old_riding_ryoute != creature_ptr->riding_ryoute))
3829         {
3830                 if (creature_ptr->riding_ryoute)
3831                 {
3832 #ifdef JP
3833                         msg_format("%s馬を操れない。", (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_NONE) ? "両手がふさがっていて" : "");
3834 #else
3835                         msg_print("You are using both hand for fighting, and you can't control a riding pet.");
3836 #endif
3837                 }
3838                 else
3839                 {
3840 #ifdef JP
3841                         msg_format("%s馬を操れるようになった。", (empty_hands(creature_ptr, FALSE) == EMPTY_HAND_NONE) ? "手が空いて" : "");
3842 #else
3843                         msg_print("You began to control riding pet with one hand.");
3844 #endif
3845                 }
3846
3847                 creature_ptr->old_riding_ryoute = creature_ptr->riding_ryoute;
3848         }
3849
3850         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))
3851         {
3852                 if (heavy_armor(creature_ptr))
3853                 {
3854                         msg_print(_("装備が重くてバランスを取れない。", "The weight of your armor disrupts your balance."));
3855                         if (current_world_ptr->is_loading_now)
3856                         {
3857                                 chg_virtue(creature_ptr, V_HARMONY, -1);
3858                         }
3859                 }
3860                 else
3861                 {
3862                         msg_print(_("バランスがとれるようになった。", "You regain your balance."));
3863                 }
3864
3865                 creature_ptr->monk_notify_aux = creature_ptr->monk_armour_aux;
3866         }
3867
3868         for (i = 0; i < INVEN_PACK; i++)
3869         {
3870 #if 0
3871                 if ((creature_ptr->inventory_list[i].tval == TV_SORCERY_BOOK) && (creature_ptr->inventory_list[i].sval == 2)) have_dd_s = TRUE;
3872                 if ((creature_ptr->inventory_list[i].tval == TV_TRUMP_BOOK) && (creature_ptr->inventory_list[i].sval == 1)) have_dd_t = TRUE;
3873 #endif
3874                 if ((creature_ptr->inventory_list[i].tval == TV_NATURE_BOOK) && (creature_ptr->inventory_list[i].sval == 2)) have_sw = TRUE;
3875                 if ((creature_ptr->inventory_list[i].tval == TV_CRAFT_BOOK) && (creature_ptr->inventory_list[i].sval == 2)) have_kabe = TRUE;
3876         }
3877
3878         for (this_o_idx = p_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].o_idx; this_o_idx; this_o_idx = next_o_idx)
3879         {
3880                 o_ptr = &p_ptr->current_floor_ptr->o_list[this_o_idx];
3881                 next_o_idx = o_ptr->next_o_idx;
3882
3883 #if 0
3884                 if ((o_ptr->tval == TV_SORCERY_BOOK) && (o_ptr->sval == 3)) have_dd_s = TRUE;
3885                 if ((o_ptr->tval == TV_TRUMP_BOOK) && (o_ptr->sval == 1)) have_dd_t = TRUE;
3886 #endif
3887                 if ((o_ptr->tval == TV_NATURE_BOOK) && (o_ptr->sval == 2)) have_sw = TRUE;
3888                 if ((o_ptr->tval == TV_CRAFT_BOOK) && (o_ptr->sval == 2)) have_kabe = TRUE;
3889         }
3890
3891         if (creature_ptr->pass_wall && !creature_ptr->kill_wall) creature_ptr->no_flowed = TRUE;
3892 #if 0
3893         if (have_dd_s && ((creature_ptr->realm1 == REALM_SORCERY) || (creature_ptr->realm2 == REALM_SORCERY) || (creature_ptr->pclass == CLASS_SORCERER)))
3894         {
3895                 const magic_type *s_ptr = &mp_ptr->info[REALM_SORCERY - 1][SPELL_DD_S];
3896                 if (creature_ptr->lev >= s_ptr->slevel) creature_ptr->no_flowed = TRUE;
3897         }
3898
3899         if (have_dd_t && ((creature_ptr->realm1 == REALM_TRUMP) || (creature_ptr->realm2 == REALM_TRUMP) || (creature_ptr->pclass == CLASS_SORCERER) || (creature_ptr->pclass == CLASS_RED_MAGE)))
3900         {
3901                 const magic_type *s_ptr = &mp_ptr->info[REALM_TRUMP - 1][SPELL_DD_T];
3902                 if (creature_ptr->lev >= s_ptr->slevel) creature_ptr->no_flowed = TRUE;
3903         }
3904 #endif
3905         if (have_sw && ((creature_ptr->realm1 == REALM_NATURE) || (creature_ptr->realm2 == REALM_NATURE) || (creature_ptr->pclass == CLASS_SORCERER)))
3906         {
3907                 const magic_type *s_ptr = &mp_ptr->info[REALM_NATURE - 1][SPELL_SW];
3908                 if (creature_ptr->lev >= s_ptr->slevel) creature_ptr->no_flowed = TRUE;
3909         }
3910
3911         if (have_kabe && ((creature_ptr->realm1 == REALM_CRAFT) || (creature_ptr->realm2 == REALM_CRAFT) || (creature_ptr->pclass == CLASS_SORCERER)))
3912         {
3913                 const magic_type *s_ptr = &mp_ptr->info[REALM_CRAFT - 1][SPELL_KABE];
3914                 if (creature_ptr->lev >= s_ptr->slevel) creature_ptr->no_flowed = TRUE;
3915         }
3916 }
3917
3918
3919 static void calc_alignment(player_type *creature_ptr)
3920 {
3921         MONSTER_IDX m_idx;
3922         creature_ptr->align = 0;
3923         int i, j, neutral[2];
3924
3925         for (m_idx = p_ptr->current_floor_ptr->m_max - 1; m_idx >= 1; m_idx--)
3926         {
3927                 monster_type *m_ptr;
3928                 monster_race *r_ptr;
3929                 m_ptr = &p_ptr->current_floor_ptr->m_list[m_idx];
3930                 if (!monster_is_valid(m_ptr)) continue;
3931                 r_ptr = &r_info[m_ptr->r_idx];
3932
3933                 if (is_pet(m_ptr))
3934                 {
3935                         if (r_ptr->flags3 & RF3_GOOD) creature_ptr->align += r_ptr->level;
3936                         if (r_ptr->flags3 & RF3_EVIL) creature_ptr->align -= r_ptr->level;
3937                 }
3938         }
3939
3940         if (creature_ptr->mimic_form)
3941         {
3942                 switch (creature_ptr->mimic_form)
3943                 {
3944                 case MIMIC_DEMON:
3945                         creature_ptr->align -= 200;
3946                         break;
3947                 case MIMIC_DEMON_LORD:
3948                         creature_ptr->align -= 200;
3949                         break;
3950                 }
3951         }
3952         else
3953         {
3954                 switch (creature_ptr->prace)
3955                 {
3956                 case RACE_ANGEL:
3957                         creature_ptr->align += 200;
3958                         break;
3959                 case RACE_DEMON:
3960                         creature_ptr->align -= 200;
3961                         break;
3962                 }
3963         }
3964
3965         for (i = 0; i < 2; i++)
3966         {
3967                 if (has_melee_weapon(creature_ptr, INVEN_RARM + i))
3968                 {
3969                         if (creature_ptr->inventory_list[INVEN_RARM + i].name1 == ART_IRON_BALL) creature_ptr->align -= 1000;
3970                 }
3971         }
3972
3973         /* Determine player alignment */
3974         for (i = 0, j = 0; i < 8; i++)
3975         {
3976                 switch (creature_ptr->vir_types[i])
3977                 {
3978                 case V_JUSTICE:
3979                         creature_ptr->align += creature_ptr->virtues[i] * 2;
3980                         break;
3981                 case V_CHANCE:
3982                         /* Do nothing */
3983                         break;
3984                 case V_NATURE:
3985                 case V_HARMONY:
3986                         neutral[j++] = i;
3987                         break;
3988                 case V_UNLIFE:
3989                         creature_ptr->align -= creature_ptr->virtues[i];
3990                         break;
3991                 default:
3992                         creature_ptr->align += creature_ptr->virtues[i];
3993                         break;
3994                 }
3995         }
3996
3997         for (i = 0; i < j; i++)
3998         {
3999                 if (creature_ptr->align > 0)
4000                 {
4001                         creature_ptr->align -= creature_ptr->virtues[neutral[i]] / 2;
4002                         if (creature_ptr->align < 0) creature_ptr->align = 0;
4003                 }
4004                 else if (creature_ptr->align < 0)
4005                 {
4006                         creature_ptr->align += creature_ptr->virtues[neutral[i]] / 2;
4007                         if (creature_ptr->align > 0) creature_ptr->align = 0;
4008                 }
4009         }
4010 }
4011
4012 /*!
4013  * @brief プレイヤーの最大HPを計算する /
4014  * Calculate the players (maximal) hit points
4015  * Adjust current hitpoints if necessary
4016  * @return なし
4017  * @details
4018  */
4019 static void calc_hitpoints(player_type *creature_ptr)
4020 {
4021         int bonus, mhp;
4022         byte tmp_hitdie;
4023
4024         /* Un-inflate "half-hitpoint bonus per level" value */
4025         bonus = ((int)(adj_con_mhp[creature_ptr->stat_ind[A_CON]]) - 128) * creature_ptr->lev / 4;
4026
4027         /* Calculate hitpoints */
4028         mhp = creature_ptr->player_hp[creature_ptr->lev - 1];
4029
4030         if (creature_ptr->mimic_form)
4031         {
4032                 if (creature_ptr->pclass == CLASS_SORCERER)
4033                         tmp_hitdie = mimic_info[creature_ptr->mimic_form].r_mhp / 2 + cp_ptr->c_mhp + ap_ptr->a_mhp;
4034                 else
4035                         tmp_hitdie = mimic_info[creature_ptr->mimic_form].r_mhp + cp_ptr->c_mhp + ap_ptr->a_mhp;
4036                 mhp = mhp * tmp_hitdie / creature_ptr->hitdie;
4037         }
4038
4039         if (creature_ptr->pclass == CLASS_SORCERER)
4040         {
4041                 if (creature_ptr->lev < 30)
4042                         mhp = (mhp * (45 + creature_ptr->lev) / 100);
4043                 else
4044                         mhp = (mhp * 75 / 100);
4045                 bonus = (bonus * 65 / 100);
4046         }
4047
4048         mhp += bonus;
4049
4050         if (creature_ptr->pclass == CLASS_BERSERKER)
4051         {
4052                 mhp = mhp * (110 + (((creature_ptr->lev + 40) * (creature_ptr->lev + 40) - 1550) / 110)) / 100;
4053         }
4054
4055         /* Always have at least one hitpoint per level */
4056         if (mhp < creature_ptr->lev + 1) mhp = creature_ptr->lev + 1;
4057
4058         /* Factor in the hero / superhero settings */
4059         if (IS_HERO()) mhp += 10;
4060         if (creature_ptr->shero && (creature_ptr->pclass != CLASS_BERSERKER)) mhp += 30;
4061         if (creature_ptr->tsuyoshi) mhp += 50;
4062
4063         /* Factor in the hex spell settings */
4064         if (hex_spelling(HEX_XTRA_MIGHT)) mhp += 15;
4065         if (hex_spelling(HEX_BUILDING)) mhp += 60;
4066
4067         /* New maximum hitpoints */
4068         if (creature_ptr->mhp != mhp)
4069         {
4070                 /* Enforce maximum */
4071                 if (creature_ptr->chp >= mhp)
4072                 {
4073                         creature_ptr->chp = mhp;
4074                         creature_ptr->chp_frac = 0;
4075                 }
4076
4077 #ifdef JP
4078                 /* レベルアップの時は上昇量を表示する */
4079                 if (creature_ptr->level_up_message && (mhp > creature_ptr->mhp))
4080                 {
4081                         msg_format("最大ヒット・ポイントが %d 増加した!", (mhp - creature_ptr->mhp));
4082                 }
4083 #endif
4084                 /* Save the new max-hitpoints */
4085                 creature_ptr->mhp = mhp;
4086
4087                 /* Display hitpoints (later) */
4088                 creature_ptr->redraw |= (PR_HP);
4089                 creature_ptr->window |= (PW_PLAYER);
4090         }
4091 }
4092
4093 /*!
4094  * @brief プレイヤーの光源半径を計算する / Extract and set the current "lite radius"
4095  * @return なし
4096  * @details
4097  * SWD: Experimental modification: multiple light sources have additive effect.
4098  */
4099 static void calc_torch(player_type *creature_ptr)
4100 {
4101         int i;
4102         POSITION rad;
4103         object_type *o_ptr;
4104         BIT_FLAGS flgs[TR_FLAG_SIZE];
4105
4106         /* Assume no light */
4107         creature_ptr->cur_lite = 0;
4108
4109         /* Loop through all wielded items */
4110         for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
4111         {
4112                 o_ptr = &creature_ptr->inventory_list[i];
4113                 /* Skip empty slots */
4114                 if (!o_ptr->k_idx) continue;
4115
4116                 if (o_ptr->name2 == EGO_LITE_SHINE) creature_ptr->cur_lite++;
4117
4118                 /* Need Fuels */
4119                 if (o_ptr->name2 != EGO_LITE_DARKNESS)
4120                 {
4121                         if (o_ptr->tval == TV_LITE)
4122                         {
4123                                 if ((o_ptr->sval == SV_LITE_TORCH) && !(o_ptr->xtra4 > 0)) continue;
4124                                 if ((o_ptr->sval == SV_LITE_LANTERN) && !(o_ptr->xtra4 > 0)) continue;
4125                         }
4126                 }
4127                 object_flags(o_ptr, flgs);
4128
4129                 /* calc the lite_radius */
4130
4131                 rad = 0;
4132                 if (have_flag(flgs, TR_LITE_1) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 1;
4133                 if (have_flag(flgs, TR_LITE_2) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 2;
4134                 if (have_flag(flgs, TR_LITE_3) && o_ptr->name2 != EGO_LITE_DARKNESS)  rad += 3;
4135                 if (have_flag(flgs, TR_LITE_M1)) rad -= 1;
4136                 if (have_flag(flgs, TR_LITE_M2)) rad -= 2;
4137                 if (have_flag(flgs, TR_LITE_M3)) rad -= 3;
4138                 creature_ptr->cur_lite += rad;
4139         }
4140
4141         /* max radius is 14 (was 5) without rewriting other code -- */
4142         if (d_info[creature_ptr->dungeon_idx].flags1 & DF1_DARKNESS && creature_ptr->cur_lite > 1)
4143                 creature_ptr->cur_lite = 1;
4144
4145         /*
4146          * check if the player doesn't have light radius,
4147          * but does weakly glow as an intrinsic.
4148          */
4149         if (creature_ptr->cur_lite <= 0 && creature_ptr->lite) creature_ptr->cur_lite++;
4150
4151         if (creature_ptr->cur_lite > 14) creature_ptr->cur_lite = 14;
4152         if (creature_ptr->cur_lite < 0) creature_ptr->cur_lite = 0;
4153
4154         /* end experimental mods */
4155
4156         /* Notice changes in the "lite radius" */
4157         if (creature_ptr->old_lite != creature_ptr->cur_lite)
4158         {
4159                 /* Hack -- PU_MON_LITE for monsters' darkness */
4160                 creature_ptr->update |= (PU_LITE | PU_MON_LITE | PU_MONSTERS);
4161
4162                 /* Remember the old lite */
4163                 creature_ptr->old_lite = creature_ptr->cur_lite;
4164
4165                 if ((creature_ptr->cur_lite > 0) && (creature_ptr->special_defense & NINJA_S_STEALTH))
4166                         set_superstealth(creature_ptr, FALSE);
4167         }
4168 }
4169
4170 /*!
4171  * @brief プレイヤーの現在学習可能な魔法数を計算し、増減に応じて魔法の忘却、再学習を処置する。 /
4172  * Calculate number of spells player should have, and forget,
4173  * or remember, spells until that number is properly reflected.
4174  * @return なし
4175  * @details
4176  * Note that this function induces various "status" messages,
4177  * which must be bypasses until the character is created.
4178  */
4179 static void calc_spells(player_type *creature_ptr)
4180 {
4181         int i, j, k, levels;
4182         int num_allowed;
4183         int num_boukyaku = 0;
4184
4185         const magic_type        *s_ptr;
4186         REALM_IDX which;
4187         int bonus = 0;
4188
4189         concptr p;
4190
4191         /* Hack -- must be literate */
4192         if (!mp_ptr->spell_book) return;
4193
4194         /* Hack -- wait for creation */
4195         if (!current_world_ptr->character_generated) return;
4196
4197         /* Hack -- handle "xtra" mode */
4198         if (current_world_ptr->character_xtra) return;
4199
4200         if ((creature_ptr->pclass == CLASS_SORCERER) || (creature_ptr->pclass == CLASS_RED_MAGE))
4201         {
4202                 creature_ptr->new_spells = 0;
4203                 return;
4204         }
4205
4206         p = spell_category_name(mp_ptr->spell_book);
4207
4208         /* Determine the number of spells allowed */
4209         levels = creature_ptr->lev - mp_ptr->spell_first + 1;
4210
4211         /* Hack -- no negative spells */
4212         if (levels < 0) levels = 0;
4213
4214         /* Extract total allowed spells */
4215         num_allowed = (adj_mag_study[creature_ptr->stat_ind[mp_ptr->spell_stat]] * levels / 2);
4216
4217         if ((creature_ptr->pclass != CLASS_SAMURAI) && (mp_ptr->spell_book != TV_LIFE_BOOK))
4218         {
4219                 bonus = 4;
4220         }
4221         if (creature_ptr->pclass == CLASS_SAMURAI)
4222         {
4223                 num_allowed = 32;
4224         }
4225         else if (creature_ptr->realm2 == REALM_NONE)
4226         {
4227                 num_allowed = (num_allowed + 1) / 2;
4228                 if (num_allowed > (32 + bonus)) num_allowed = 32 + bonus;
4229         }
4230         else if ((creature_ptr->pclass == CLASS_MAGE) || (creature_ptr->pclass == CLASS_PRIEST))
4231         {
4232                 if (num_allowed > (96 + bonus)) num_allowed = 96 + bonus;
4233         }
4234         else
4235         {
4236                 if (num_allowed > (80 + bonus)) num_allowed = 80 + bonus;
4237         }
4238
4239         /* Count the number of spells we know */
4240         for (j = 0; j < 64; j++)
4241         {
4242                 /* Count known spells */
4243                 if ((j < 32) ?
4244                         (creature_ptr->spell_forgotten1 & (1L << j)) :
4245                         (creature_ptr->spell_forgotten2 & (1L << (j - 32))))
4246                 {
4247                         num_boukyaku++;
4248                 }
4249         }
4250
4251         /* See how many spells we must forget or may learn */
4252         creature_ptr->new_spells = num_allowed + creature_ptr->add_spells + num_boukyaku - creature_ptr->learned_spells;
4253
4254         /* Forget spells which are too hard */
4255         for (i = 63; i >= 0; i--)
4256         {
4257                 /* Efficiency -- all done */
4258                 if (!creature_ptr->spell_learned1 && !creature_ptr->spell_learned2) break;
4259
4260                 /* Access the spell */
4261                 j = creature_ptr->spell_order[i];
4262
4263                 /* Skip non-spells */
4264                 if (j >= 99) continue;
4265
4266
4267                 /* Get the spell */
4268                 if (!is_magic((j < 32) ? creature_ptr->realm1 : creature_ptr->realm2))
4269                 {
4270                         if (j < 32)
4271                                 s_ptr = &technic_info[creature_ptr->realm1 - MIN_TECHNIC][j];
4272                         else
4273                                 s_ptr = &technic_info[creature_ptr->realm2 - MIN_TECHNIC][j % 32];
4274                 }
4275                 else if (j < 32)
4276                         s_ptr = &mp_ptr->info[creature_ptr->realm1 - 1][j];
4277                 else
4278                         s_ptr = &mp_ptr->info[creature_ptr->realm2 - 1][j % 32];
4279
4280                 /* Skip spells we are allowed to know */
4281                 if (s_ptr->slevel <= creature_ptr->lev) continue;
4282
4283                 /* Is it known? */
4284                 if ((j < 32) ?
4285                         (creature_ptr->spell_learned1 & (1L << j)) :
4286                         (creature_ptr->spell_learned2 & (1L << (j - 32))))
4287                 {
4288                         /* Mark as forgotten */
4289                         if (j < 32)
4290                         {
4291                                 creature_ptr->spell_forgotten1 |= (1L << j);
4292                                 which = creature_ptr->realm1;
4293                         }
4294                         else
4295                         {
4296                                 creature_ptr->spell_forgotten2 |= (1L << (j - 32));
4297                                 which = creature_ptr->realm2;
4298                         }
4299
4300                         /* No longer known */
4301                         if (j < 32)
4302                         {
4303                                 creature_ptr->spell_learned1 &= ~(1L << j);
4304                                 which = creature_ptr->realm1;
4305                         }
4306                         else
4307                         {
4308                                 creature_ptr->spell_learned2 &= ~(1L << (j - 32));
4309                                 which = creature_ptr->realm2;
4310                         }
4311
4312 #ifdef JP
4313                         msg_format("%sの%sを忘れてしまった。", exe_spell(p_ptr, which, j % 32, SPELL_NAME), p);
4314 #else
4315                         msg_format("You have forgotten the %s of %s.", p, exe_spell(p_ptr, which, j % 32, SPELL_NAME));
4316 #endif
4317
4318
4319                         /* One more can be learned */
4320                         creature_ptr->new_spells++;
4321                 }
4322         }
4323
4324
4325         /* Forget spells if we know too many spells */
4326         for (i = 63; i >= 0; i--)
4327         {
4328                 /* Stop when possible */
4329                 if (creature_ptr->new_spells >= 0) break;
4330
4331                 /* Efficiency -- all done */
4332                 if (!creature_ptr->spell_learned1 && !creature_ptr->spell_learned2) break;
4333
4334                 /* Get the (i+1)th spell learned */
4335                 j = creature_ptr->spell_order[i];
4336
4337                 /* Skip unknown spells */
4338                 if (j >= 99) continue;
4339
4340                 /* Forget it (if learned) */
4341                 if ((j < 32) ?
4342                         (creature_ptr->spell_learned1 & (1L << j)) :
4343                         (creature_ptr->spell_learned2 & (1L << (j - 32))))
4344                 {
4345                         /* Mark as forgotten */
4346                         if (j < 32)
4347                         {
4348                                 creature_ptr->spell_forgotten1 |= (1L << j);
4349                                 which = creature_ptr->realm1;
4350                         }
4351                         else
4352                         {
4353                                 creature_ptr->spell_forgotten2 |= (1L << (j - 32));
4354                                 which = creature_ptr->realm2;
4355                         }
4356
4357                         /* No longer known */
4358                         if (j < 32)
4359                         {
4360                                 creature_ptr->spell_learned1 &= ~(1L << j);
4361                                 which = creature_ptr->realm1;
4362                         }
4363                         else
4364                         {
4365                                 creature_ptr->spell_learned2 &= ~(1L << (j - 32));
4366                                 which = creature_ptr->realm2;
4367                         }
4368
4369 #ifdef JP
4370                         msg_format("%sの%sを忘れてしまった。", exe_spell(p_ptr, which, j % 32, SPELL_NAME), p);
4371 #else
4372                         msg_format("You have forgotten the %s of %s.", p, exe_spell(p_ptr, which, j % 32, SPELL_NAME));
4373 #endif
4374
4375
4376                         /* One more can be learned */
4377                         creature_ptr->new_spells++;
4378                 }
4379         }
4380
4381
4382         /* Check for spells to remember */
4383         for (i = 0; i < 64; i++)
4384         {
4385                 /* None left to remember */
4386                 if (creature_ptr->new_spells <= 0) break;
4387
4388                 /* Efficiency -- all done */
4389                 if (!creature_ptr->spell_forgotten1 && !creature_ptr->spell_forgotten2) break;
4390
4391                 /* Get the next spell we learned */
4392                 j = creature_ptr->spell_order[i];
4393
4394                 /* Skip unknown spells */
4395                 if (j >= 99) break;
4396
4397                 /* Access the spell */
4398                 if (!is_magic((j < 32) ? creature_ptr->realm1 : creature_ptr->realm2))
4399                 {
4400                         if (j < 32)
4401                                 s_ptr = &technic_info[creature_ptr->realm1 - MIN_TECHNIC][j];
4402                         else
4403                                 s_ptr = &technic_info[creature_ptr->realm2 - MIN_TECHNIC][j % 32];
4404                 }
4405                 else if (j < 32)
4406                         s_ptr = &mp_ptr->info[creature_ptr->realm1 - 1][j];
4407                 else
4408                         s_ptr = &mp_ptr->info[creature_ptr->realm2 - 1][j % 32];
4409
4410                 /* Skip spells we cannot remember */
4411                 if (s_ptr->slevel > creature_ptr->lev) continue;
4412
4413                 /* First set of spells */
4414                 if ((j < 32) ?
4415                         (creature_ptr->spell_forgotten1 & (1L << j)) :
4416                         (creature_ptr->spell_forgotten2 & (1L << (j - 32))))
4417                 {
4418                         /* No longer forgotten */
4419                         if (j < 32)
4420                         {
4421                                 creature_ptr->spell_forgotten1 &= ~(1L << j);
4422                                 which = creature_ptr->realm1;
4423                         }
4424                         else
4425                         {
4426                                 creature_ptr->spell_forgotten2 &= ~(1L << (j - 32));
4427                                 which = creature_ptr->realm2;
4428                         }
4429
4430                         /* Known once more */
4431                         if (j < 32)
4432                         {
4433                                 creature_ptr->spell_learned1 |= (1L << j);
4434                                 which = creature_ptr->realm1;
4435                         }
4436                         else
4437                         {
4438                                 creature_ptr->spell_learned2 |= (1L << (j - 32));
4439                                 which = creature_ptr->realm2;
4440                         }
4441
4442 #ifdef JP
4443                         msg_format("%sの%sを思い出した。", exe_spell(p_ptr, which, j % 32, SPELL_NAME), p);
4444 #else
4445                         msg_format("You have remembered the %s of %s.", p, exe_spell(p_ptr, which, j % 32, SPELL_NAME));
4446 #endif
4447
4448
4449                         /* One less can be learned */
4450                         creature_ptr->new_spells--;
4451                 }
4452         }
4453
4454         k = 0;
4455
4456         if (creature_ptr->realm2 == REALM_NONE)
4457         {
4458                 /* Count spells that can be learned */
4459                 for (j = 0; j < 32; j++)
4460                 {
4461                         if (!is_magic(creature_ptr->realm1)) s_ptr = &technic_info[creature_ptr->realm1 - MIN_TECHNIC][j];
4462                         else s_ptr = &mp_ptr->info[creature_ptr->realm1 - 1][j];
4463
4464                         /* Skip spells we cannot remember */
4465                         if (s_ptr->slevel > creature_ptr->lev) continue;
4466
4467                         /* Skip spells we already know */
4468                         if (creature_ptr->spell_learned1 & (1L << j))
4469                         {
4470                                 continue;
4471                         }
4472
4473                         /* Count it */
4474                         k++;
4475                 }
4476                 if (k > 32) k = 32;
4477                 if ((creature_ptr->new_spells > k) &&
4478                         ((mp_ptr->spell_book == TV_LIFE_BOOK) || (mp_ptr->spell_book == TV_HISSATSU_BOOK)))
4479                 {
4480                         creature_ptr->new_spells = (s16b)k;
4481                 }
4482         }
4483
4484         if (creature_ptr->new_spells < 0) creature_ptr->new_spells = 0;
4485
4486         /* Spell count changed */
4487         if (creature_ptr->old_spells != creature_ptr->new_spells)
4488         {
4489                 /* Message if needed */
4490                 if (creature_ptr->new_spells)
4491                 {
4492 #ifdef JP
4493                         if (creature_ptr->new_spells < 10) {
4494                                 msg_format("あと %d つの%sを学べる。", creature_ptr->new_spells, p);
4495                         }
4496                         else {
4497                                 msg_format("あと %d 個の%sを学べる。", creature_ptr->new_spells, p);
4498                         }
4499 #else
4500                         msg_format("You can learn %d more %s%s.",
4501                                 creature_ptr->new_spells, p,
4502                                 (creature_ptr->new_spells != 1) ? "s" : "");
4503 #endif
4504
4505                 }
4506
4507                 /* Save the new_spells value */
4508                 creature_ptr->old_spells = creature_ptr->new_spells;
4509
4510                 /* Redraw Study Status */
4511                 creature_ptr->redraw |= (PR_STUDY);
4512
4513                 /* Redraw object recall */
4514                 creature_ptr->window |= (PW_OBJECT);
4515         }
4516 }
4517
4518 /*!
4519  * @brief プレイヤーの最大MPを計算する /
4520  * Calculate maximum mana.  You do not need to know any spells.
4521  * Note that mana is lowered by heavy (or inappropriate) armor.
4522  * @return なし
4523  * @details
4524  * This function induces status messages.
4525  */
4526 static void calc_mana(player_type *creature_ptr)
4527 {
4528         int msp, levels, cur_wgt, max_wgt;
4529
4530         object_type *o_ptr;
4531
4532
4533         /* Hack -- Must be literate */
4534         if (!mp_ptr->spell_book) return;
4535
4536         if ((creature_ptr->pclass == CLASS_MINDCRAFTER) ||
4537                 (creature_ptr->pclass == CLASS_MIRROR_MASTER) ||
4538                 (creature_ptr->pclass == CLASS_BLUE_MAGE))
4539         {
4540                 levels = creature_ptr->lev;
4541         }
4542         else
4543         {
4544                 if (mp_ptr->spell_first > creature_ptr->lev)
4545                 {
4546                         /* Save new mana */
4547                         creature_ptr->msp = 0;
4548
4549                         /* Display mana later */
4550                         creature_ptr->redraw |= (PR_MANA);
4551                         return;
4552                 }
4553
4554                 /* Extract "effective" player level */
4555                 levels = (creature_ptr->lev - mp_ptr->spell_first) + 1;
4556         }
4557
4558         if (creature_ptr->pclass == CLASS_SAMURAI)
4559         {
4560                 msp = (adj_mag_mana[creature_ptr->stat_ind[mp_ptr->spell_stat]] + 10) * 2;
4561                 if (msp) msp += (msp * rp_ptr->r_adj[mp_ptr->spell_stat] / 20);
4562         }
4563         else
4564         {
4565                 /* Extract total mana */
4566                 msp = adj_mag_mana[creature_ptr->stat_ind[mp_ptr->spell_stat]] * (levels + 3) / 4;
4567
4568                 /* Hack -- usually add one mana */
4569                 if (msp) msp++;
4570
4571                 if (msp) msp += (msp * rp_ptr->r_adj[mp_ptr->spell_stat] / 20);
4572
4573                 if (msp && (creature_ptr->pseikaku == SEIKAKU_MUNCHKIN)) msp += msp / 2;
4574
4575                 /* Hack: High mages have a 25% mana bonus */
4576                 if (msp && (creature_ptr->pclass == CLASS_HIGH_MAGE)) msp += msp / 4;
4577
4578                 if (msp && (creature_ptr->pclass == CLASS_SORCERER)) msp += msp * (25 + creature_ptr->lev) / 100;
4579         }
4580
4581         /* Only mages are affected */
4582         if (mp_ptr->spell_xtra & MAGIC_GLOVE_REDUCE_MANA)
4583         {
4584                 BIT_FLAGS flgs[TR_FLAG_SIZE];
4585
4586                 /* Assume player is not encumbered by gloves */
4587                 creature_ptr->cumber_glove = FALSE;
4588
4589                 /* Get the gloves */
4590                 o_ptr = &creature_ptr->inventory_list[INVEN_HANDS];
4591
4592                 /* Examine the gloves */
4593                 object_flags(o_ptr, flgs);
4594
4595                 /* Normal gloves hurt mage-type spells */
4596                 if (o_ptr->k_idx &&
4597                         !(have_flag(flgs, TR_FREE_ACT)) &&
4598                         !(have_flag(flgs, TR_DEC_MANA)) &&
4599                         !(have_flag(flgs, TR_EASY_SPELL)) &&
4600                         !((have_flag(flgs, TR_MAGIC_MASTERY)) && (o_ptr->pval > 0)) &&
4601                         !((have_flag(flgs, TR_DEX)) && (o_ptr->pval > 0)))
4602                 {
4603                         /* Encumbered */
4604                         creature_ptr->cumber_glove = TRUE;
4605
4606                         /* Reduce mana */
4607                         msp = (3 * msp) / 4;
4608                 }
4609         }
4610
4611
4612         /* Assume player not encumbered by armor */
4613         creature_ptr->cumber_armor = FALSE;
4614
4615         /* Weigh the armor */
4616         cur_wgt = 0;
4617         if (creature_ptr->inventory_list[INVEN_RARM].tval > TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight;
4618         if (creature_ptr->inventory_list[INVEN_LARM].tval > TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight;
4619         cur_wgt += creature_ptr->inventory_list[INVEN_BODY].weight;
4620         cur_wgt += creature_ptr->inventory_list[INVEN_HEAD].weight;
4621         cur_wgt += creature_ptr->inventory_list[INVEN_OUTER].weight;
4622         cur_wgt += creature_ptr->inventory_list[INVEN_HANDS].weight;
4623         cur_wgt += creature_ptr->inventory_list[INVEN_FEET].weight;
4624
4625         /* Subtract a percentage of maximum mana. */
4626         switch (creature_ptr->pclass)
4627         {
4628                 /* For these classes, mana is halved if armour
4629                  * is 30 pounds over their weight limit. */
4630         case CLASS_MAGE:
4631         case CLASS_HIGH_MAGE:
4632         case CLASS_BLUE_MAGE:
4633         case CLASS_MONK:
4634         case CLASS_FORCETRAINER:
4635         case CLASS_SORCERER:
4636         {
4637                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight;
4638                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight;
4639                 break;
4640         }
4641
4642         /* Mana halved if armour is 40 pounds over weight limit. */
4643         case CLASS_PRIEST:
4644         case CLASS_BARD:
4645         case CLASS_TOURIST:
4646         {
4647                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight * 2 / 3;
4648                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight * 2 / 3;
4649                 break;
4650         }
4651
4652         case CLASS_MINDCRAFTER:
4653         case CLASS_BEASTMASTER:
4654         case CLASS_MIRROR_MASTER:
4655         {
4656                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight / 2;
4657                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight / 2;
4658                 break;
4659         }
4660
4661         /* Mana halved if armour is 50 pounds over weight limit. */
4662         case CLASS_ROGUE:
4663         case CLASS_RANGER:
4664         case CLASS_RED_MAGE:
4665         case CLASS_WARRIOR_MAGE:
4666         {
4667                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight / 3;
4668                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight / 3;
4669                 break;
4670         }
4671
4672         /* Mana halved if armour is 60 pounds over weight limit. */
4673         case CLASS_PALADIN:
4674         case CLASS_CHAOS_WARRIOR:
4675         {
4676                 if (creature_ptr->inventory_list[INVEN_RARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_RARM].weight / 5;
4677                 if (creature_ptr->inventory_list[INVEN_LARM].tval <= TV_SWORD) cur_wgt += creature_ptr->inventory_list[INVEN_LARM].weight / 5;
4678                 break;
4679         }
4680
4681         /* For new classes created, but not yet added to this formula. */
4682         default:
4683         {
4684                 break;
4685         }
4686         }
4687
4688         /* Determine the weight allowance */
4689         max_wgt = mp_ptr->spell_weight;
4690
4691         /* Heavy armor penalizes mana by a percentage.  -LM- */
4692         if ((cur_wgt - max_wgt) > 0)
4693         {
4694                 /* Encumbered */
4695                 creature_ptr->cumber_armor = TRUE;
4696
4697                 /* Subtract a percentage of maximum mana. */
4698                 switch (creature_ptr->pclass)
4699                 {
4700                         /* For these classes, mana is halved if armour
4701                          * is 30 pounds over their weight limit. */
4702                 case CLASS_MAGE:
4703                 case CLASS_HIGH_MAGE:
4704                 case CLASS_BLUE_MAGE:
4705                 {
4706                         msp -= msp * (cur_wgt - max_wgt) / 600;
4707                         break;
4708                 }
4709
4710                 /* Mana halved if armour is 40 pounds over weight limit. */
4711                 case CLASS_PRIEST:
4712                 case CLASS_MINDCRAFTER:
4713                 case CLASS_BEASTMASTER:
4714                 case CLASS_BARD:
4715                 case CLASS_FORCETRAINER:
4716                 case CLASS_TOURIST:
4717                 case CLASS_MIRROR_MASTER:
4718                 {
4719                         msp -= msp * (cur_wgt - max_wgt) / 800;
4720                         break;
4721                 }
4722
4723                 case CLASS_SORCERER:
4724                 {
4725                         msp -= msp * (cur_wgt - max_wgt) / 900;
4726                         break;
4727                 }
4728
4729                 /* Mana halved if armour is 50 pounds over weight limit. */
4730                 case CLASS_ROGUE:
4731                 case CLASS_RANGER:
4732                 case CLASS_MONK:
4733                 case CLASS_RED_MAGE:
4734                 {
4735                         msp -= msp * (cur_wgt - max_wgt) / 1000;
4736                         break;
4737                 }
4738
4739                 /* Mana halved if armour is 60 pounds over weight limit. */
4740                 case CLASS_PALADIN:
4741                 case CLASS_CHAOS_WARRIOR:
4742                 case CLASS_WARRIOR_MAGE:
4743                 {
4744                         msp -= msp * (cur_wgt - max_wgt) / 1200;
4745                         break;
4746                 }
4747
4748                 case CLASS_SAMURAI:
4749                 {
4750                         creature_ptr->cumber_armor = FALSE;
4751                         break;
4752                 }
4753
4754                 /* For new classes created, but not yet added to this formula. */
4755                 default:
4756                 {
4757                         msp -= msp * (cur_wgt - max_wgt) / 800;
4758                         break;
4759                 }
4760                 }
4761         }
4762
4763         /* Mana can never be negative */
4764         if (msp < 0) msp = 0;
4765
4766
4767         /* Maximum mana has changed */
4768         if (creature_ptr->msp != msp)
4769         {
4770                 /* Enforce maximum */
4771                 if ((creature_ptr->csp >= msp) && (creature_ptr->pclass != CLASS_SAMURAI))
4772                 {
4773                         creature_ptr->csp = msp;
4774                         creature_ptr->csp_frac = 0;
4775                 }
4776
4777 #ifdef JP
4778                 /* レベルアップの時は上昇量を表示する */
4779                 if (creature_ptr->level_up_message && (msp > creature_ptr->msp))
4780                 {
4781                         msg_format("最大マジック・ポイントが %d 増加した!", (msp - creature_ptr->msp));
4782                 }
4783 #endif
4784                 /* Save new mana */
4785                 creature_ptr->msp = msp;
4786
4787                 /* Display mana later */
4788                 creature_ptr->redraw |= (PR_MANA);
4789                 creature_ptr->window |= (PW_PLAYER | PW_SPELL);
4790         }
4791
4792
4793         /* Hack -- handle "xtra" mode */
4794         if (current_world_ptr->character_xtra) return;
4795
4796         /* Take note when "glove state" changes */
4797         if (creature_ptr->old_cumber_glove != creature_ptr->cumber_glove)
4798         {
4799                 if (creature_ptr->cumber_glove)
4800                 {
4801                         msg_print(_("手が覆われて呪文が唱えにくい感じがする。", "Your covered hands feel unsuitable for spellcasting."));
4802                 }
4803                 else
4804                 {
4805                         msg_print(_("この手の状態なら、ぐっと呪文が唱えやすい感じだ。", "Your hands feel more suitable for spellcasting."));
4806                 }
4807
4808                 /* Save it */
4809                 creature_ptr->old_cumber_glove = creature_ptr->cumber_glove;
4810         }
4811
4812
4813         /* Take note when "armor state" changes */
4814         if (creature_ptr->old_cumber_armor != creature_ptr->cumber_armor)
4815         {
4816                 if (creature_ptr->cumber_armor)
4817                 {
4818                         msg_print(_("装備の重さで動きが鈍くなってしまっている。", "The weight of your equipment encumbers your movement."));
4819                 }
4820                 else
4821                 {
4822                         msg_print(_("ぐっと楽に体を動かせるようになった。", "You feel able to move more freely."));
4823                 }
4824
4825                 /* Save it */
4826                 creature_ptr->old_cumber_armor = creature_ptr->cumber_armor;
4827         }
4828 }
4829
4830 /*!
4831  * @brief 装備中の射撃武器の威力倍率を返す /
4832  * calcurate the fire rate of target object
4833  * @param o_ptr 計算する射撃武器のアイテム情報参照ポインタ
4834  * @return 射撃倍率の値(100で1.00倍)
4835  */
4836 s16b calc_num_fire(player_type *creature_ptr, object_type *o_ptr)
4837 {
4838         int extra_shots = 0;
4839         int i;
4840         int num = 0;
4841         OBJECT_TYPE_VALUE tval_ammo = bow_tval_ammo(o_ptr);
4842         object_type *q_ptr;
4843         BIT_FLAGS flgs[TR_FLAG_SIZE];
4844
4845         /* Scan the usable creature_ptr->inventory_list */
4846         for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
4847         {
4848                 q_ptr = &creature_ptr->inventory_list[i];
4849                 if (!q_ptr->k_idx) continue;
4850
4851                 /* Do not apply current equip */
4852                 if (i == INVEN_BOW) continue;
4853
4854                 object_flags(q_ptr, flgs);
4855
4856                 /* Boost shots */
4857                 if (have_flag(flgs, TR_XTRA_SHOTS)) extra_shots++;
4858         }
4859
4860         object_flags(o_ptr, flgs);
4861         if (have_flag(flgs, TR_XTRA_SHOTS)) extra_shots++;
4862
4863         if (o_ptr->k_idx && !is_heavy_shoot(creature_ptr, o_ptr))
4864         {
4865                 num = 100;
4866                 /* Extra shots */
4867                 num += (extra_shots * 100);
4868
4869                 /* Hack -- Rangers love Bows */
4870                 if ((creature_ptr->pclass == CLASS_RANGER) &&
4871                         (tval_ammo == TV_ARROW))
4872                 {
4873                         num += (creature_ptr->lev * 4);
4874                 }
4875
4876                 if ((creature_ptr->pclass == CLASS_CAVALRY) &&
4877                         (tval_ammo == TV_ARROW))
4878                 {
4879                         num += (creature_ptr->lev * 3);
4880                 }
4881
4882                 if (creature_ptr->pclass == CLASS_ARCHER)
4883                 {
4884                         if (tval_ammo == TV_ARROW)
4885                                 num += ((creature_ptr->lev * 5) + 50);
4886                         else if ((tval_ammo == TV_BOLT) || (tval_ammo == TV_SHOT))
4887                                 num += (creature_ptr->lev * 4);
4888                 }
4889
4890                 /*
4891                  * Addendum -- also "Reward" high level warriors,
4892                  * with _any_ missile weapon -- TY
4893                  */
4894                 if (creature_ptr->pclass == CLASS_WARRIOR &&
4895                         (tval_ammo <= TV_BOLT) &&
4896                         (tval_ammo >= TV_SHOT))
4897                 {
4898                         num += (creature_ptr->lev * 2);
4899                 }
4900                 if ((creature_ptr->pclass == CLASS_ROGUE) &&
4901                         (tval_ammo == TV_SHOT))
4902                 {
4903                         num += (creature_ptr->lev * 4);
4904                 }
4905         }
4906         return (s16b)num;
4907 }
4908
4909 /*!
4910  * @brief プレイヤーの所持重量制限を計算する /
4911  * Computes current weight limit.
4912  * @return 制限重量(ポンド)
4913  */
4914 WEIGHT weight_limit(player_type *creature_ptr)
4915 {
4916         WEIGHT i;
4917
4918         /* Weight limit based only on strength */
4919         i = (WEIGHT)adj_str_wgt[creature_ptr->stat_ind[A_STR]] * 50; /* Constant was 100 */
4920         if (creature_ptr->pclass == CLASS_BERSERKER) i = i * 3 / 2;
4921
4922         /* Return the result */
4923         return i;
4924 }
4925
4926 /*!
4927  * @brief プレイヤーが現在右手/左手に武器を持っているか判定する /
4928  * @param i 判定する手のID(右手:0 左手:1)
4929  * @return 持っているならばTRUE
4930  */
4931 bool has_melee_weapon(player_type *creature_ptr, int i)
4932 {
4933         return ((creature_ptr->inventory_list[i].k_idx && object_is_melee_weapon(&creature_ptr->inventory_list[i])) ? TRUE : FALSE);
4934 }
4935
4936 /*!
4937  * @brief プレイヤーの現在開いている手の状態を返す
4938  * @param riding_control 乗馬中により片手を必要としている状態ならばTRUEを返す。
4939  * @return 開いている手のビットフラグ
4940  */
4941 BIT_FLAGS16 empty_hands(player_type *creature_ptr, bool riding_control)
4942 {
4943         BIT_FLAGS16 status = EMPTY_HAND_NONE;
4944
4945         if (!creature_ptr->inventory_list[INVEN_RARM].k_idx) status |= EMPTY_HAND_RARM;
4946         if (!creature_ptr->inventory_list[INVEN_LARM].k_idx) status |= EMPTY_HAND_LARM;
4947
4948         if (riding_control && (status != EMPTY_HAND_NONE) && creature_ptr->riding && !(creature_ptr->pet_extra_flags & PF_RYOUTE))
4949         {
4950                 if (status & EMPTY_HAND_LARM) status &= ~(EMPTY_HAND_LARM);
4951                 else if (status & EMPTY_HAND_RARM) status &= ~(EMPTY_HAND_RARM);
4952         }
4953
4954         return status;
4955 }
4956
4957
4958 /*!
4959  * @brief プレイヤーが防具重量制限のある職業時にペナルティを受ける状態にあるかどうかを返す。
4960  * @return ペナルティが適用されるならばTRUE。
4961  */
4962 bool heavy_armor(player_type *creature_ptr)
4963 {
4964         WEIGHT monk_arm_wgt = 0;
4965
4966         if ((creature_ptr->pclass != CLASS_MONK) && (creature_ptr->pclass != CLASS_FORCETRAINER) && (creature_ptr->pclass != CLASS_NINJA)) return FALSE;
4967
4968         /* Weight the armor */
4969         if (creature_ptr->inventory_list[INVEN_RARM].tval > TV_SWORD) monk_arm_wgt += creature_ptr->inventory_list[INVEN_RARM].weight;
4970         if (creature_ptr->inventory_list[INVEN_LARM].tval > TV_SWORD) monk_arm_wgt += creature_ptr->inventory_list[INVEN_LARM].weight;
4971         monk_arm_wgt += creature_ptr->inventory_list[INVEN_BODY].weight;
4972         monk_arm_wgt += creature_ptr->inventory_list[INVEN_HEAD].weight;
4973         monk_arm_wgt += creature_ptr->inventory_list[INVEN_OUTER].weight;
4974         monk_arm_wgt += creature_ptr->inventory_list[INVEN_HANDS].weight;
4975         monk_arm_wgt += creature_ptr->inventory_list[INVEN_FEET].weight;
4976
4977         return (monk_arm_wgt > (100 + (creature_ptr->lev * 4)));
4978 }
4979
4980 /*!
4981  * @brief update のフラグに応じた更新をまとめて行う / Handle "update"
4982  * @return なし
4983  * @details 更新処理の対象はプレイヤーの能力修正/光源寿命/HP/MP/魔法の学習状態、他多数の外界の状態判定。
4984  */
4985 void update_creature(player_type *creature_ptr)
4986 {
4987         if (!creature_ptr->update) return;
4988
4989         /* Actually do auto-destroy */
4990         if (creature_ptr->update & (PU_AUTODESTROY))
4991         {
4992                 creature_ptr->update &= ~(PU_AUTODESTROY);
4993                 autopick_delayed_alter();
4994         }
4995         if (creature_ptr->update & (PU_COMBINE))
4996         {
4997                 creature_ptr->update &= ~(PU_COMBINE);
4998                 combine_pack(creature_ptr);
4999         }
5000
5001         /* Reorder the pack */
5002         if (creature_ptr->update & (PU_REORDER))
5003         {
5004                 creature_ptr->update &= ~(PU_REORDER);
5005                 reorder_pack();
5006         }
5007
5008         if (creature_ptr->update & (PU_BONUS))
5009         {
5010                 creature_ptr->update &= ~(PU_BONUS);
5011                 calc_alignment(creature_ptr);
5012                 calc_bonuses(creature_ptr);
5013         }
5014
5015         if (creature_ptr->update & (PU_TORCH))
5016         {
5017                 creature_ptr->update &= ~(PU_TORCH);
5018                 calc_torch(creature_ptr);
5019         }
5020
5021         if (creature_ptr->update & (PU_HP))
5022         {
5023                 creature_ptr->update &= ~(PU_HP);
5024                 calc_hitpoints(creature_ptr);
5025         }
5026
5027         if (creature_ptr->update & (PU_MANA))
5028         {
5029                 creature_ptr->update &= ~(PU_MANA);
5030                 calc_mana(creature_ptr);
5031         }
5032
5033         if (creature_ptr->update & (PU_SPELLS))
5034         {
5035                 creature_ptr->update &= ~(PU_SPELLS);
5036                 calc_spells(creature_ptr);
5037         }
5038
5039         /* Character is not ready yet, no screen updates */
5040         if (!current_world_ptr->character_generated) return;
5041
5042         /* Character is in "icky" mode, no screen updates */
5043         if (current_world_ptr->character_icky) return;
5044
5045         if (creature_ptr->update & (PU_UN_LITE))
5046         {
5047                 creature_ptr->update &= ~(PU_UN_LITE);
5048                 forget_lite(p_ptr->current_floor_ptr);
5049         }
5050
5051         if (creature_ptr->update & (PU_UN_VIEW))
5052         {
5053                 creature_ptr->update &= ~(PU_UN_VIEW);
5054                 forget_view(creature_ptr->current_floor_ptr);
5055         }
5056
5057         if (creature_ptr->update & (PU_VIEW))
5058         {
5059                 creature_ptr->update &= ~(PU_VIEW);
5060                 update_view(creature_ptr, p_ptr->current_floor_ptr);
5061         }
5062
5063         if (creature_ptr->update & (PU_LITE))
5064         {
5065                 creature_ptr->update &= ~(PU_LITE);
5066                 update_lite(creature_ptr, p_ptr->current_floor_ptr);
5067         }
5068
5069
5070         if (creature_ptr->update & (PU_FLOW))
5071         {
5072                 creature_ptr->update &= ~(PU_FLOW);
5073                 update_flow();
5074         }
5075
5076         if (creature_ptr->update & (PU_DISTANCE))
5077         {
5078                 creature_ptr->update &= ~(PU_DISTANCE);
5079
5080                 /* Still need to call update_monsters(FALSE) after update_mon_lite() */
5081                 /* creature_ptr->update &= ~(PU_MONSTERS); */
5082
5083                 update_monsters(TRUE);
5084         }
5085
5086         if (creature_ptr->update & (PU_MON_LITE))
5087         {
5088                 creature_ptr->update &= ~(PU_MON_LITE);
5089                 update_mon_lite(p_ptr, p_ptr->current_floor_ptr);
5090         }
5091
5092         /*
5093          * Mega-Hack -- Delayed visual update
5094          * Only used if update_view(), update_lite() or update_mon_lite() was called
5095          */
5096         if (creature_ptr->update & (PU_DELAY_VIS))
5097         {
5098                 creature_ptr->update &= ~(PU_DELAY_VIS);
5099                 delayed_visual_update();
5100         }
5101
5102         if (creature_ptr->update & (PU_MONSTERS))
5103         {
5104                 creature_ptr->update &= ~(PU_MONSTERS);
5105                 update_monsters(FALSE);
5106         }
5107 }
5108
5109 /*!
5110  * @brief プレイヤーが魔道書を一冊も持っていないかを判定する
5111  * @return 魔道書を一冊も持っていないならTRUEを返す
5112  */
5113 bool player_has_no_spellbooks(player_type *creature_ptr)
5114 {
5115         int i;
5116         object_type *o_ptr;
5117
5118         for (i = 0; i < INVEN_PACK; i++)
5119         {
5120                 o_ptr = &creature_ptr->inventory_list[i];
5121                 if (o_ptr->k_idx && check_book_realm(o_ptr->tval, o_ptr->sval)) return FALSE;
5122         }
5123
5124         for (i = p_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].o_idx; i; i = o_ptr->next_o_idx)
5125         {
5126                 o_ptr = &p_ptr->current_floor_ptr->o_list[i];
5127                 if (o_ptr->k_idx && (o_ptr->marked & OM_FOUND) && check_book_realm(o_ptr->tval, o_ptr->sval)) return FALSE;
5128         }
5129
5130         return TRUE;
5131 }
5132
5133 void take_turn(player_type *creature_ptr, PERCENTAGE need_cost)
5134 {
5135         creature_ptr->energy_use = (ENERGY)need_cost;
5136 }
5137
5138 void free_turn(player_type *creature_ptr)
5139 {
5140         creature_ptr->energy_use = 0;
5141 }
5142
5143 /*!
5144  * @brief プレイヤーを指定座標に配置する / Place the player in the dungeon XXX XXX
5145  * @param x 配置先X座標
5146  * @param y 配置先Y座標
5147  * @return 配置に成功したらTRUE
5148  */
5149 bool player_place(player_type *creature_ptr, POSITION y, POSITION x)
5150 {
5151         /* Paranoia XXX XXX */
5152         if (creature_ptr->current_floor_ptr->grid_array[y][x].m_idx != 0) return FALSE;
5153
5154         /* Save player location */
5155         creature_ptr->y = y;
5156         creature_ptr->x = x;
5157
5158         /* Success */
5159         return TRUE;
5160 }
5161
5162 /*!
5163  * @brief 種族アンバライトが出血時パターンの上に乗った際のペナルティ処理
5164  * @return なし
5165  */
5166 void wreck_the_pattern(player_type *creature_ptr)
5167 {
5168         int to_ruin = 0;
5169         POSITION r_y, r_x;
5170         int pattern_type = f_info[p_ptr->current_floor_ptr->grid_array[creature_ptr->y][creature_ptr->x].feat].subtype;
5171
5172         if (pattern_type == PATTERN_TILE_WRECKED)
5173         {
5174                 /* Ruined already */
5175                 return;
5176         }
5177
5178         msg_print(_("パターンを血で汚してしまった!", "You bleed on the Pattern!"));
5179         msg_print(_("何か恐ろしい事が起こった!", "Something terrible happens!"));
5180
5181         if (!IS_INVULN()) take_hit(creature_ptr, DAMAGE_NOESCAPE, damroll(10, 8), _("パターン損壊", "corrupting the Pattern"), -1);
5182         to_ruin = randint1(45) + 35;
5183
5184         while (to_ruin--)
5185         {
5186                 scatter(&r_y, &r_x, creature_ptr->y, creature_ptr->x, 4, 0);
5187
5188                 if (pattern_tile(r_y, r_x) &&
5189                         (f_info[p_ptr->current_floor_ptr->grid_array[r_y][r_x].feat].subtype != PATTERN_TILE_WRECKED))
5190                 {
5191                         cave_set_feat(p_ptr->current_floor_ptr, r_y, r_x, feat_pattern_corrupted);
5192                 }
5193         }
5194
5195         cave_set_feat(p_ptr->current_floor_ptr, creature_ptr->y, creature_ptr->x, feat_pattern_corrupted);
5196 }
5197
5198
5199 /*!
5200  * @brief ELDRITCH_HORRORによるプレイヤーの精神破壊処理
5201  * @param m_ptr ELDRITCH_HORRORを引き起こしたモンスターの参照ポインタ
5202  * @param necro 暗黒領域魔法の詠唱失敗によるものならばTRUEを返す
5203  * @return なし
5204  */
5205 void sanity_blast(player_type *creature_ptr, monster_type *m_ptr, bool necro)
5206 {
5207         int power = 100;
5208
5209         if (creature_ptr->phase_out || !current_world_ptr->character_dungeon) return;
5210
5211         if (!necro && m_ptr)
5212         {
5213                 GAME_TEXT m_name[MAX_NLEN];
5214                 monster_race *r_ptr = &r_info[m_ptr->ap_r_idx];
5215
5216                 power = r_ptr->level / 2;
5217
5218                 monster_desc(m_name, m_ptr, 0);
5219
5220                 if (!(r_ptr->flags1 & RF1_UNIQUE))
5221                 {
5222                         if (r_ptr->flags1 & RF1_FRIENDS)
5223                                 power /= 2;
5224                 }
5225                 else power *= 2;
5226
5227                 if (!current_world_ptr->is_loading_now)
5228                         return; /* No effect yet, just loaded... */
5229
5230                 if (!m_ptr->ml)
5231                         return; /* Cannot see it for some reason */
5232
5233                 if (!(r_ptr->flags2 & RF2_ELDRITCH_HORROR))
5234                         return;
5235
5236                 if (is_pet(m_ptr))
5237                         return; /* Pet eldritch horrors are safe most of the time */
5238
5239                 if (randint1(100) > power) return;
5240
5241                 if (saving_throw(creature_ptr->skill_sav - power))
5242                 {
5243                         return; /* Save, no adverse effects */
5244                 }
5245
5246                 if (creature_ptr->image)
5247                 {
5248                         /* Something silly happens... */
5249                         msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
5250                                 funny_desc[randint0(MAX_SAN_FUNNY)], m_name);
5251
5252                         if (one_in_(3))
5253                         {
5254                                 msg_print(funny_comments[randint0(MAX_SAN_COMMENT)]);
5255                                 creature_ptr->image = creature_ptr->image + randint1(r_ptr->level);
5256                         }
5257
5258                         return; /* Never mind; we can't see it clearly enough */
5259                 }
5260
5261                 /* Something frightening happens... */
5262                 msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
5263                         horror_desc[randint0(MAX_SAN_HORROR)], m_name);
5264
5265                 r_ptr->r_flags2 |= RF2_ELDRITCH_HORROR;
5266
5267                 /* Demon characters are unaffected */
5268                 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;
5269                 if (current_world_ptr->wizard) return;
5270
5271                 /* Undead characters are 50% likely to be unaffected */
5272                 if (PRACE_IS_(creature_ptr, RACE_SKELETON) || PRACE_IS_(creature_ptr, RACE_ZOMBIE)
5273                         || PRACE_IS_(creature_ptr, RACE_VAMPIRE) || PRACE_IS_(creature_ptr, RACE_SPECTRE) ||
5274                         (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_UNDEAD))
5275                 {
5276                         if (saving_throw(25 + creature_ptr->lev)) return;
5277                 }
5278         }
5279         else if (!necro)
5280         {
5281                 monster_race *r_ptr;
5282                 GAME_TEXT m_name[MAX_NLEN];
5283                 concptr desc;
5284
5285                 get_mon_num_prep(get_nightmare, NULL);
5286
5287                 r_ptr = &r_info[get_mon_num(MAX_DEPTH)];
5288                 power = r_ptr->level + 10;
5289                 desc = r_name + r_ptr->name;
5290
5291                 get_mon_num_prep(NULL, NULL);
5292
5293 #ifndef JP
5294                 if (!(r_ptr->flags1 & RF1_UNIQUE))
5295                         sprintf(m_name, "%s %s", (is_a_vowel(desc[0]) ? "an" : "a"), desc);
5296                 else
5297 #endif
5298                         sprintf(m_name, "%s", desc);
5299
5300                 if (!(r_ptr->flags1 & RF1_UNIQUE))
5301                 {
5302                         if (r_ptr->flags1 & RF1_FRIENDS) power /= 2;
5303                 }
5304                 else power *= 2;
5305
5306                 if (saving_throw(creature_ptr->skill_sav * 100 / power))
5307                 {
5308                         msg_format(_("夢の中で%sに追いかけられた。", "%^s chases you through your dreams."), m_name);
5309                         /* Safe */
5310                         return;
5311                 }
5312
5313                 if (creature_ptr->image)
5314                 {
5315                         /* Something silly happens... */
5316                         msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
5317                                 funny_desc[randint0(MAX_SAN_FUNNY)], m_name);
5318
5319                         if (one_in_(3))
5320                         {
5321                                 msg_print(funny_comments[randint0(MAX_SAN_COMMENT)]);
5322                                 creature_ptr->image = creature_ptr->image + randint1(r_ptr->level);
5323                         }
5324
5325                         /* Never mind; we can't see it clearly enough */
5326                         return;
5327                 }
5328
5329                 /* Something frightening happens... */
5330                 msg_format(_("%s%sの顔を見てしまった!", "You behold the %s visage of %s!"),
5331                         horror_desc[randint0(MAX_SAN_HORROR)], desc);
5332
5333                 r_ptr->r_flags2 |= RF2_ELDRITCH_HORROR;
5334
5335                 if (!creature_ptr->mimic_form)
5336                 {
5337                         switch (creature_ptr->prace)
5338                         {
5339                                 /* Demons may make a saving throw */
5340                         case RACE_IMP:
5341                         case RACE_DEMON:
5342                                 if (saving_throw(20 + creature_ptr->lev)) return;
5343                                 break;
5344                                 /* Undead may make a saving throw */
5345                         case RACE_SKELETON:
5346                         case RACE_ZOMBIE:
5347                         case RACE_SPECTRE:
5348                         case RACE_VAMPIRE:
5349                                 if (saving_throw(10 + creature_ptr->lev)) return;
5350                                 break;
5351                         }
5352                 }
5353                 else
5354                 {
5355                         /* Demons may make a saving throw */
5356                         if (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_DEMON)
5357                         {
5358                                 if (saving_throw(20 + creature_ptr->lev)) return;
5359                         }
5360                         /* Undead may make a saving throw */
5361                         else if (mimic_info[creature_ptr->mimic_form].MIMIC_FLAGS & MIMIC_IS_UNDEAD)
5362                         {
5363                                 if (saving_throw(10 + creature_ptr->lev)) return;
5364                         }
5365                 }
5366         }
5367         else
5368         {
5369                 msg_print(_("ネクロノミコンを読んで正気を失った!", "Your sanity is shaken by reading the Necronomicon!"));
5370         }
5371
5372         if (saving_throw(creature_ptr->skill_sav - power))
5373         {
5374                 return;
5375         }
5376
5377         do {
5378                 (void)do_dec_stat(creature_ptr, A_INT);
5379         } while (randint0(100) > creature_ptr->skill_sav && one_in_(2));
5380
5381         do {
5382                 (void)do_dec_stat(creature_ptr, A_WIS);
5383         } while (randint0(100) > creature_ptr->skill_sav && one_in_(2));
5384
5385         switch (randint1(21))
5386         {
5387         case 1:
5388                 if (!(creature_ptr->muta3 & MUT3_MORONIC) && one_in_(5))
5389                 {
5390                         if ((creature_ptr->stat_use[A_INT] < 4) && (creature_ptr->stat_use[A_WIS] < 4))
5391                         {
5392                                 msg_print(_("あなたは完璧な馬鹿になったような気がした。しかしそれは元々だった。", "You current_world_ptr->game_turn into an utter moron!"));
5393                         }
5394                         else
5395                         {
5396                                 msg_print(_("あなたは完璧な馬鹿になった!", "You current_world_ptr->game_turn into an utter moron!"));
5397                         }
5398
5399                         if (creature_ptr->muta3 & MUT3_HYPER_INT)
5400                         {
5401                                 msg_print(_("あなたの脳は生体コンピュータではなくなった。", "Your brain is no longer a living computer."));
5402                                 creature_ptr->muta3 &= ~(MUT3_HYPER_INT);
5403                         }
5404                         creature_ptr->muta3 |= MUT3_MORONIC;
5405                 }
5406                 break;
5407         case 2:
5408         case 3:
5409         case 4:
5410                 if (!(creature_ptr->muta2 & MUT2_COWARDICE) && !creature_ptr->resist_fear)
5411                 {
5412                         msg_print(_("あなたはパラノイアになった!", "You become paranoid!"));
5413
5414                         /* Duh, the following should never happen, but anyway... */
5415                         if (creature_ptr->muta3 & MUT3_FEARLESS)
5416                         {
5417                                 msg_print(_("あなたはもう恐れ知らずではなくなった。", "You are no longer fearless."));
5418                                 creature_ptr->muta3 &= ~(MUT3_FEARLESS);
5419                         }
5420
5421                         creature_ptr->muta2 |= MUT2_COWARDICE;
5422                 }
5423                 break;
5424         case 5:
5425         case 6:
5426         case 7:
5427                 if (!(creature_ptr->muta2 & MUT2_HALLU) && !creature_ptr->resist_chaos)
5428                 {
5429                         msg_print(_("幻覚をひき起こす精神錯乱に陥った!", "You are afflicted by a hallucinatory insanity!"));
5430                         creature_ptr->muta2 |= MUT2_HALLU;
5431                 }
5432                 break;
5433         case 8:
5434         case 9:
5435         case 10:
5436                 if (!(creature_ptr->muta2 & MUT2_BERS_RAGE))
5437                 {
5438                         msg_print(_("激烈な感情の発作におそわれるようになった!", "You become subject to fits of berserk rage!"));
5439                         creature_ptr->muta2 |= MUT2_BERS_RAGE;
5440                 }
5441                 break;
5442         case 11:
5443         case 12:
5444         case 13:
5445         case 14:
5446         case 15:
5447         case 16:
5448                 /* Brain smash */
5449                 if (!creature_ptr->resist_conf)
5450                 {
5451                         (void)set_confused(creature_ptr, creature_ptr->confused + randint0(4) + 4);
5452                 }
5453                 if (!creature_ptr->free_act)
5454                 {
5455                         (void)set_paralyzed(creature_ptr, creature_ptr->paralyzed + randint0(4) + 4);
5456                 }
5457                 if (!creature_ptr->resist_chaos)
5458                 {
5459                         (void)set_image(creature_ptr, creature_ptr->image + randint0(250) + 150);
5460                 }
5461                 break;
5462         case 17:
5463         case 18:
5464         case 19:
5465         case 20:
5466         case 21:
5467                 /* Amnesia */
5468                 if (lose_all_info(creature_ptr))
5469                         msg_print(_("あまりの恐怖に全てのことを忘れてしまった!", "You forget everything in your utmost terror!"));
5470                 break;
5471         }
5472
5473         creature_ptr->update |= PU_BONUS;
5474         handle_stuff();
5475 }
5476
5477
5478 /*!
5479  * @brief プレイヤーの経験値について整合性のためのチェックと調整を行う /
5480  * Advance experience levels and print experience
5481  * @return なし
5482  */
5483 void check_experience(player_type *creature_ptr)
5484 {
5485         bool level_reward = FALSE;
5486         bool level_mutation = FALSE;
5487         bool level_inc_stat = FALSE;
5488         bool android = (creature_ptr->prace == RACE_ANDROID ? TRUE : FALSE);
5489         PLAYER_LEVEL old_lev = creature_ptr->lev;
5490
5491         /* Hack -- lower limit */
5492         if (creature_ptr->exp < 0) creature_ptr->exp = 0;
5493         if (creature_ptr->max_exp < 0) creature_ptr->max_exp = 0;
5494         if (creature_ptr->max_max_exp < 0) creature_ptr->max_max_exp = 0;
5495
5496         /* Hack -- upper limit */
5497         if (creature_ptr->exp > PY_MAX_EXP) creature_ptr->exp = PY_MAX_EXP;
5498         if (creature_ptr->max_exp > PY_MAX_EXP) creature_ptr->max_exp = PY_MAX_EXP;
5499         if (creature_ptr->max_max_exp > PY_MAX_EXP) creature_ptr->max_max_exp = PY_MAX_EXP;
5500
5501         /* Hack -- maintain "max" experience */
5502         if (creature_ptr->exp > creature_ptr->max_exp) creature_ptr->max_exp = creature_ptr->exp;
5503
5504         /* Hack -- maintain "max max" experience */
5505         if (creature_ptr->max_exp > creature_ptr->max_max_exp) creature_ptr->max_max_exp = creature_ptr->max_exp;
5506
5507         /* Redraw experience */
5508         creature_ptr->redraw |= (PR_EXP);
5509         handle_stuff();
5510
5511
5512         /* Lose levels while possible */
5513         while ((creature_ptr->lev > 1) &&
5514                 (creature_ptr->exp < ((android ? player_exp_a : player_exp)[creature_ptr->lev - 2] * creature_ptr->expfact / 100L)))
5515         {
5516                 /* Lose a level */
5517                 creature_ptr->lev--;
5518                 creature_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
5519                 creature_ptr->redraw |= (PR_LEV | PR_TITLE);
5520                 creature_ptr->window |= (PW_PLAYER);
5521                 handle_stuff();
5522         }
5523
5524
5525         /* Gain levels while possible */
5526         while ((creature_ptr->lev < PY_MAX_LEVEL) &&
5527                 (creature_ptr->exp >= ((android ? player_exp_a : player_exp)[creature_ptr->lev - 1] * creature_ptr->expfact / 100L)))
5528         {
5529                 /* Gain a level */
5530                 creature_ptr->lev++;
5531
5532                 /* Save the highest level */
5533                 if (creature_ptr->lev > creature_ptr->max_plv)
5534                 {
5535                         creature_ptr->max_plv = creature_ptr->lev;
5536
5537                         if ((creature_ptr->pclass == CLASS_CHAOS_WARRIOR) ||
5538                                 (creature_ptr->muta2 & MUT2_CHAOS_GIFT))
5539                         {
5540                                 level_reward = TRUE;
5541                         }
5542                         if (creature_ptr->prace == RACE_BEASTMAN)
5543                         {
5544                                 if (one_in_(5)) level_mutation = TRUE;
5545                         }
5546                         level_inc_stat = TRUE;
5547
5548                         exe_write_diary(p_ptr, NIKKI_LEVELUP, creature_ptr->lev, NULL);
5549                 }
5550
5551                 sound(SOUND_LEVEL);
5552
5553                 msg_format(_("レベル %d にようこそ。", "Welcome to level %d."), creature_ptr->lev);
5554
5555                 creature_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
5556                 creature_ptr->redraw |= (PR_LEV | PR_TITLE | PR_EXP);
5557                 creature_ptr->window |= (PW_PLAYER | PW_SPELL | PW_INVEN);
5558
5559                 /* HPとMPの上昇量を表示 */
5560                 creature_ptr->level_up_message = TRUE;
5561                 handle_stuff();
5562
5563                 creature_ptr->level_up_message = FALSE;
5564
5565                 if (level_inc_stat)
5566                 {
5567                         if (!(creature_ptr->max_plv % 10))
5568                         {
5569                                 int choice;
5570                                 screen_save();
5571                                 while (1)
5572                                 {
5573                                         int n;
5574                                         char tmp[32];
5575
5576                                         cnv_stat(creature_ptr->stat_max[0], tmp);
5577                                         prt(format(_("        a) 腕力 (現在値 %s)", "        a) Str (cur %s)"), tmp), 2, 14);
5578                                         cnv_stat(creature_ptr->stat_max[1], tmp);
5579                                         prt(format(_("        b) 知能 (現在値 %s)", "        b) Int (cur %s)"), tmp), 3, 14);
5580                                         cnv_stat(creature_ptr->stat_max[2], tmp);
5581                                         prt(format(_("        c) 賢さ (現在値 %s)", "        c) Wis (cur %s)"), tmp), 4, 14);
5582                                         cnv_stat(creature_ptr->stat_max[3], tmp);
5583                                         prt(format(_("        d) 器用 (現在値 %s)", "        d) Dex (cur %s)"), tmp), 5, 14);
5584                                         cnv_stat(creature_ptr->stat_max[4], tmp);
5585                                         prt(format(_("        e) 耐久 (現在値 %s)", "        e) Con (cur %s)"), tmp), 6, 14);
5586                                         cnv_stat(creature_ptr->stat_max[5], tmp);
5587                                         prt(format(_("        f) 魅力 (現在値 %s)", "        f) Chr (cur %s)"), tmp), 7, 14);
5588
5589                                         prt("", 8, 14);
5590                                         prt(_("        どの能力値を上げますか?", "        Which stat do you want to raise?"), 1, 14);
5591
5592                                         while (1)
5593                                         {
5594                                                 choice = inkey();
5595                                                 if ((choice >= 'a') && (choice <= 'f')) break;
5596                                         }
5597                                         for (n = 0; n < A_MAX; n++)
5598                                                 if (n != choice - 'a')
5599                                                         prt("", n + 2, 14);
5600                                         if (get_check(_("よろしいですか?", "Are you sure? "))) break;
5601                                 }
5602                                 do_inc_stat(creature_ptr, choice - 'a');
5603                                 screen_load();
5604                         }
5605                         else if (!(creature_ptr->max_plv % 2))
5606                                 do_inc_stat(creature_ptr, randint0(6));
5607                 }
5608
5609                 if (level_mutation)
5610                 {
5611                         msg_print(_("あなたは変わった気がする...", "You feel different..."));
5612                         (void)gain_mutation(creature_ptr, 0);
5613                         level_mutation = FALSE;
5614                 }
5615
5616                 /*
5617                  * 報酬でレベルが上ると再帰的に check_experience(creature_ptr) が
5618                  * 呼ばれるので順番を最後にする。
5619                  */
5620                 if (level_reward)
5621                 {
5622                         gain_level_reward(creature_ptr, 0);
5623                         level_reward = FALSE;
5624                 }
5625
5626                 creature_ptr->update |= (PU_BONUS | PU_HP | PU_MANA | PU_SPELLS);
5627                 creature_ptr->redraw |= (PR_LEV | PR_TITLE);
5628                 creature_ptr->window |= (PW_PLAYER | PW_SPELL);
5629                 handle_stuff();
5630         }
5631
5632         /* Load an autopick preference file */
5633         if (old_lev != creature_ptr->lev) autopick_load_pref(FALSE);
5634 }
5635
5636 /*!
5637  * @brief 現在の修正後能力値を3~17及び18/xxx形式に変換する / Converts stat num into a six-char (right justified) string
5638  * @param val 能力値
5639  * @param out_val 出力先文字列ポインタ
5640  * @return なし
5641  */
5642 void cnv_stat(int val, char *out_val)
5643 {
5644         /* Above 18 */
5645         if (val > 18)
5646         {
5647                 int bonus = (val - 18);
5648
5649                 if (bonus >= 220)
5650                 {
5651                         sprintf(out_val, "18/%3s", "***");
5652                 }
5653                 else if (bonus >= 100)
5654                 {
5655                         sprintf(out_val, "18/%03d", bonus);
5656                 }
5657                 else
5658                 {
5659                         sprintf(out_val, " 18/%02d", bonus);
5660                 }
5661         }
5662
5663         /* From 3 to 18 */
5664         else
5665         {
5666                 sprintf(out_val, "    %2d", val);
5667         }
5668 }
5669
5670 /*!
5671  * @brief 能力値現在値から3~17及び18/xxx様式に基づく加減算を行う。
5672  * Modify a stat value by a "modifier", return new value
5673  * @param value 現在値
5674  * @param amount 加減算値
5675  * @return 加減算後の値
5676  * @details
5677  * <pre>
5678  * Stats go up: 3,4,...,17,18,18/10,18/20,...,18/220
5679  * Or even: 18/13, 18/23, 18/33, ..., 18/220
5680  * Stats go down: 18/220, 18/210,..., 18/10, 18, 17, ..., 3
5681  * Or even: 18/13, 18/03, 18, 17, ..., 3
5682  * </pre>
5683  */
5684 s16b modify_stat_value(int value, int amount)
5685 {
5686         int    i;
5687
5688         /* Reward */
5689         if (amount > 0)
5690         {
5691                 /* Apply each point */
5692                 for (i = 0; i < amount; i++)
5693                 {
5694                         /* One point at a time */
5695                         if (value < 18) value++;
5696
5697                         /* Ten "points" at a time */
5698                         else value += 10;
5699                 }
5700         }
5701
5702         /* Penalty */
5703         else if (amount < 0)
5704         {
5705                 /* Apply each point */
5706                 for (i = 0; i < (0 - amount); i++)
5707                 {
5708                         /* Ten points at a time */
5709                         if (value >= 18 + 10) value -= 10;
5710
5711                         /* Hack -- prevent weirdness */
5712                         else if (value > 18) value = 18;
5713
5714                         /* One point at a time */
5715                         else if (value > 3) value--;
5716                 }
5717         }
5718
5719         /* Return new value */
5720         return (s16b)(value);
5721 }
5722
5723
5724 /*!
5725  * @brief スコアを計算する /
5726  * Hack -- Calculates the total number of points earned         -JWT-
5727  * @return なし
5728  * @details
5729  */
5730 long calc_score(player_type *creature_ptr)
5731 {
5732         int i, mult = 100;
5733         DEPTH max_dl = 0;
5734         u32b point, point_h, point_l;
5735         int arena_win = MIN(creature_ptr->arena_number, MAX_ARENA_MONS);
5736
5737         if (!preserve_mode) mult += 10;
5738         if (!autoroller) mult += 10;
5739         if (!smart_learn) mult -= 20;
5740         if (smart_cheat) mult += 30;
5741         if (ironman_shops) mult += 50;
5742         if (ironman_small_levels) mult += 10;
5743         if (ironman_empty_levels) mult += 20;
5744         if (!powerup_home) mult += 50;
5745         if (ironman_rooms) mult += 100;
5746         if (ironman_nightmare) mult += 100;
5747
5748         if (mult < 5) mult = 5;
5749
5750         for (i = 0; i < current_world_ptr->max_d_idx; i++)
5751                 if (max_dlv[i] > max_dl)
5752                         max_dl = max_dlv[i];
5753
5754         point_l = (creature_ptr->max_max_exp + (100 * max_dl));
5755         point_h = point_l / 0x10000L;
5756         point_l = point_l % 0x10000L;
5757         point_h *= mult;
5758         point_l *= mult;
5759         point_h += point_l / 0x10000L;
5760         point_l %= 0x10000L;
5761
5762         point_l += ((point_h % 100) << 16);
5763         point_h /= 100;
5764         point_l /= 100;
5765
5766         point = (point_h << 16) + (point_l);
5767         if (creature_ptr->arena_number >= 0)
5768                 point += (arena_win * arena_win * (arena_win > 29 ? 1000 : 100));
5769
5770         if (ironman_downward) point *= 2;
5771         if (creature_ptr->pclass == CLASS_BERSERKER)
5772         {
5773                 if (creature_ptr->prace == RACE_SPECTRE)
5774                         point = point / 5;
5775         }
5776
5777         if ((creature_ptr->pseikaku == SEIKAKU_MUNCHKIN) && point)
5778         {
5779                 point = 1;
5780                 if (creature_ptr->total_winner) point = 2;
5781         }
5782         if (easy_band) point = (0 - point);
5783
5784         return point;
5785 }
5786
5787
5788 void cheat_death(player_type *creature_ptr)
5789 {
5790         /* Mark social class, reset age, if needed */
5791         if (creature_ptr->sc) creature_ptr->sc = creature_ptr->age = 0;
5792
5793         /* Increase age */
5794         creature_ptr->age++;
5795
5796         /* Mark savefile */
5797         creature_ptr->noscore |= 0x0001;
5798
5799         msg_print(_("ウィザードモードに念を送り、死を欺いた。", "You invoke wizard mode and cheat death."));
5800         msg_print(NULL);
5801
5802         (void)life_stream(creature_ptr, FALSE, FALSE);
5803
5804         if (creature_ptr->pclass == CLASS_MAGIC_EATER)
5805         {
5806                 int magic_idx;
5807                 for (magic_idx = 0; magic_idx < EATER_EXT * 2; magic_idx++)
5808                 {
5809                         creature_ptr->magic_num1[magic_idx] = creature_ptr->magic_num2[magic_idx] * EATER_CHARGE;
5810                 }
5811                 for (; magic_idx < EATER_EXT * 3; magic_idx++)
5812                 {
5813                         creature_ptr->magic_num1[magic_idx] = 0;
5814                 }
5815         }
5816
5817         /* Restore spell points */
5818         creature_ptr->csp = creature_ptr->msp;
5819         creature_ptr->csp_frac = 0;
5820
5821         /* Hack -- cancel recall */
5822         if (creature_ptr->word_recall)
5823         {
5824                 msg_print(_("張りつめた大気が流れ去った...", "A tension leaves the air around you..."));
5825                 msg_print(NULL);
5826
5827                 /* Hack -- Prevent recall */
5828                 creature_ptr->word_recall = 0;
5829                 creature_ptr->redraw |= (PR_STATUS);
5830         }
5831
5832         /* Hack -- cancel alter */
5833         if (creature_ptr->alter_reality)
5834         {
5835                 /* Hack -- Prevent alter */
5836                 creature_ptr->alter_reality = 0;
5837                 creature_ptr->redraw |= (PR_STATUS);
5838         }
5839
5840         /* Note cause of death */
5841         (void)strcpy(creature_ptr->died_from, _("死の欺き", "Cheating death"));
5842
5843         /* Do not die */
5844         creature_ptr->is_dead = FALSE;
5845
5846         /* Hack -- Prevent starvation */
5847         (void)set_food(creature_ptr, PY_FOOD_MAX - 1);
5848
5849         p_ptr->current_floor_ptr->dun_level = 0;
5850         creature_ptr->current_floor_ptr->inside_arena = FALSE;
5851         creature_ptr->phase_out = FALSE;
5852         leaving_quest = 0;
5853         creature_ptr->current_floor_ptr->inside_quest = 0;
5854         if (creature_ptr->dungeon_idx) creature_ptr->recall_dungeon = creature_ptr->dungeon_idx;
5855         creature_ptr->dungeon_idx = 0;
5856         if (lite_town || vanilla_town)
5857         {
5858                 creature_ptr->wilderness_y = 1;
5859                 creature_ptr->wilderness_x = 1;
5860                 if (vanilla_town)
5861                 {
5862                         creature_ptr->oldpy = 10;
5863                         creature_ptr->oldpx = 34;
5864                 }
5865                 else
5866                 {
5867                         creature_ptr->oldpy = 33;
5868                         creature_ptr->oldpx = 131;
5869                 }
5870         }
5871         else
5872         {
5873                 creature_ptr->wilderness_y = 48;
5874                 creature_ptr->wilderness_x = 5;
5875                 creature_ptr->oldpy = 33;
5876                 creature_ptr->oldpx = 131;
5877         }
5878         creature_ptr->wild_mode = FALSE;
5879         creature_ptr->leaving = TRUE;
5880
5881         exe_write_diary(p_ptr, NIKKI_BUNSHOU, 1,
5882                 _("                            しかし、生き返った。",
5883                         "                            but revived."));
5884
5885         /* Prepare next floor */
5886         leave_floor(creature_ptr);
5887         wipe_m_list();
5888
5889 }