OSDN Git Service

2cfc84dd3519678518de76d748f6ceeb36799794
[hengband/hengband.git] / src / store.c
1 /*!
2  * @file store.c
3  * @brief Å¹¤Î½èÍý / Store commands
4  * @date 2014/02/02
5  * @author
6  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke\n
7  * This software may be copied and distributed for educational, research, and\n
8  * not for profit purposes provided that this copyright and statement are\n
9  * included in all such copies.\n
10  * 2014 Deskull rearranged comment for Doxygen.
11  */
12
13 #include "angband.h"
14
15 #define MIN_STOCK 12
16
17 static int cur_store_num = 0;
18 static int store_top = 0;
19 static int store_bottom = 0;
20 static int xtra_stock = 0;
21 static store_type *st_ptr = NULL;
22 static const owner_type *ot_ptr = NULL;
23 static s16b old_town_num = 0;
24 static s16b inner_town_num = 0;
25 #define RUMOR_CHANCE 8
26
27 #define MAX_COMMENT_1   6
28
29 static cptr comment_1[MAX_COMMENT_1] =
30 {
31 #ifdef JP
32         "¥ª¡¼¥±¡¼¤À¡£",
33         "·ë¹½¤À¡£",
34         "¤½¤¦¤·¤è¤¦¡ª",
35         "»¿À®¤À¡ª",
36         "¤è¤·¡ª",
37         "¤ï¤«¤Ã¤¿¡ª"
38 #else
39         "Okay.",
40         "Fine.",
41         "Accepted!",
42         "Agreed!",
43         "Done!",
44         "Taken!"
45 #endif
46
47 };
48
49 #ifdef JP
50 /*! ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÄɲåá¥Ã¥»¡¼¥¸¡Ê¾µÂú¡Ë */
51 static cptr comment_1_B[MAX_COMMENT_1] = {
52         "¤Þ¤¢¡¢¤½¤ì¤Ç¤¤¤¤¤ä¡£",
53         "º£Æü¤Ï¤½¤ì¤Ç´ªÊÛ¤·¤Æ¤ä¤ë¡£",
54         "ʬ¤«¤Ã¤¿¤è¡£",
55         "¤·¤ç¤¦¤¬¤Ê¤¤¡£",
56         "¤½¤ì¤Ç²æËý¤¹¤ë¤è¡£",
57         "¤³¤ó¤Ê¤â¤ó¤À¤í¤¦¡£"
58 };
59 #endif
60 #define MAX_COMMENT_2A  2
61
62 static cptr comment_2a[MAX_COMMENT_2A] =
63 {
64 #ifdef JP
65         "»ä¤ÎǦÂÑÎϤò»î¤·¤Æ¤¤¤ë¤Î¤«¤¤¡© $%s ¤¬ºÇ¸å¤À¡£",
66         "²æËý¤Ë¤â¸ÂÅÙ¤¬¤¢¤ë¤¾¡£ $%s ¤¬ºÇ¸å¤À¡£"
67 #else
68         "You try my patience.  %s is final.",
69         "My patience grows thin.  %s is final."
70 #endif
71
72 };
73
74 #define MAX_COMMENT_2B  12
75
76 static cptr comment_2b[MAX_COMMENT_2B] =
77 {
78 #ifdef JP
79         " $%s ¤°¤é¤¤¤Ï½Ð¤µ¤Ê¤­¤ã¥À¥á¤À¤è¡£",
80         " $%s ¤Ê¤é¼õ¤±¼è¤Ã¤Æ¤â¤¤¤¤¤¬¡£",
81         "¥Ï¡ª $%s °Ê²¼¤Ï¤Ê¤¤¤Í¡£",
82         "²¿¤ÆÅÛ¤À¡ª $%s °Ê²¼¤Ï¤¢¤êÆÀ¤Ê¤¤¤¾¡£",
83         "¤½¤ì¤¸¤ã¾¯¤Ê¤¹¤®¤ë¡ª $%s ¤ÏÍߤ·¤¤¤È¤³¤í¤À¡£",
84         "¥Ð¥«¤Ë¤·¤Æ¤¤¤ë¡ª $%s ¤Ï¤â¤é¤ï¤Ê¤¤¤È¡£",
85         "±³¤À¤í¤¦¡ª $%s ¤Ç¤É¤¦¤À¤¤¡©",
86         "¤ª¤¤¤ª¤¤¡ª $%s ¤ò¹Í¤¨¤Æ¤¯¤ì¤Ê¤¤¤«¡©",
87         "1000ɤ¤Î¥ª¡¼¥¯¤Î¥Î¥ß¤Ë¶ì¤·¤á¤é¤ì¤ë¤¬¤¤¤¤¡ª $%s ¤À¡£",
88         "¤ªÁ°¤ÎÂçÀڤʤâ¤Î¤ËºÒ¤¤¤¢¤ì¡ª $%s ¤Ç¤É¤¦¤À¡£",
89         "¥â¥ë¥´¥¹¤Ë¾ÞÌ£¤µ¤ì¤ë¤¬¤¤¤¤¡ªËÜÅö¤Ï $%s ¤Ê¤ó¤À¤í¤¦¡©",
90         "¤ªÁ°¤ÎÊì¿Æ¤Ï¥ª¡¼¥¬¤«¡ª $%s ¤Ï½Ð¤¹¤Ä¤â¤ê¤Ê¤ó¤À¤í¡©"
91 #else
92         "I can take no less than %s gold pieces.",
93         "I will accept no less than %s gold pieces.",
94         "Ha!  No less than %s gold pieces.",
95         "You knave!  No less than %s gold pieces.",
96         "That's a pittance!  I want %s gold pieces.",
97         "That's an insult!  I want %s gold pieces.",
98         "As if!  How about %s gold pieces?",
99         "My arse!  How about %s gold pieces?",
100         "May the fleas of 1000 orcs molest you!  Try %s gold pieces.",
101         "May your most favourite parts go moldy!  Try %s gold pieces.",
102         "May Morgoth find you tasty!  Perhaps %s gold pieces?",
103         "Your mother was an Ogre!  Perhaps %s gold pieces?"
104 #endif
105
106 };
107
108 #ifdef JP
109 /*! ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÇä¤ë¤È¤­¡Ë */
110 static cptr comment_2b_B[MAX_COMMENT_2B] = {
111         "¤¤¤¯¤é²¶Íͤ¬¤ª¿Í¹¥¤·¤È¤Ï¤¤¤¨ $%s ¤¬¸Â³¦¤À¤Í¡£·ù¤Ê¤éµ¢¤ê¤Ê¡£",
112         "¶â¤¬¤Ê¤¤¤Î¤«¤¤¡¢¤¢¤ó¤¿¡©¤Þ¤º¤Ï²È¤Ëµ¢¤Ã¤Æ $%s Â·¤¨¤Æ¤­¤Ê¡£",
113         "ʪ¤Î²ÁÃͤ¬Ê¬¤«¤é¤óÅÛ¤À¤Ê¡£¤³¤ì¤Ï $%s ¤¬ÉáÄ̤ʤó¤À¤è¡£",
114         "²¶¤ÎÉÕ¤±¤¿ÃÍÃʤËʸ¶ç¤¬¤¢¤ë¤Î¤«¡© $%s ¤¬¸Â³¦¤À¡£",
115         "¤Ò¤ç¤Ã¤È¤·¤Æ¿·¼ê¤Î¾éÃ̤«¤¤¡© $%s »ý¤Ã¤Æ¤Ê¤¤¤Ê¤éµ¢¤ê¤Ê¡£",
116         "¤¦¤Á¤Ï¾¤ÎŹ¤È¤Ï°ã¤¦¤ó¤À¤è¡£$%s ¤°¤é¤¤¤Ï½Ð¤·¤Ê¡£",
117         "Ç㤦µ¤¤¬¤Ê¤¤¤Ê¤éµ¢¤ê¤Ê¡£ $%s ¤À¤È¸À¤Ã¤Æ¤¤¤ë¤ó¤À¡£",
118         "Ïäˤʤé¤Ê¤¤¤Í¡£ $%s ¤¯¤é¤¤»ý¤Ã¤Æ¤¤¤ë¤ó¤À¤í¡©",
119         "¤Ï¡©¤Ê¤ó¤À¤½¤ê¤ã¡© $%s ¤Î´Ö°ã¤¤¤«¡¢¤Ò¤ç¤Ã¤È¤·¤Æ¡©",
120         "½Ð¸ý¤Ï¤¢¤Ã¤Á¤À¤è¡£¤½¤ì¤È¤â $%s ½Ð¤»¤ë¤Î¤«¤¤¡¢¤¢¤ó¤¿¤Ë¡£",
121         "Ì¿ÃΤ餺¤ÊÅÛ¤À¤Ê¡£ $%s ½Ð¤»¤Ðº£Æü¤Î½ê¤Ï´ªÊÛ¤·¤Æ¤ä¤ë¤è¡£",
122         "¤¦¤Á¤ÎŹ¤ÏÉÏ˳¿Í¤ªÃǤê¤À¡£ $%s ¤°¤é¤¤½Ð¤»¤Ê¤¤¤Î¤«¤¤¡©"
123 };
124 #endif
125 #define MAX_COMMENT_3A  2
126
127 static cptr comment_3a[MAX_COMMENT_3A] =
128 {
129 #ifdef JP
130         "»ä¤ÎǦÂÑÎϤò»î¤·¤Æ¤¤¤ë¤Î¤«¤¤¡© $%s ¤¬ºÇ¸å¤À¡£",
131         "²æËý¤Ë¤â¸ÂÅÙ¤¬¤¢¤ë¤¾¡£ $%s ¤¬ºÇ¸å¤À¡£"
132 #else
133         "You try my patience.  %s is final.",
134         "My patience grows thin.  %s is final."
135 #endif
136
137 };
138
139
140 #define MAX_COMMENT_3B  12
141
142 static cptr comment_3b[MAX_COMMENT_3B] =
143 {
144 #ifdef JP
145         "Ëܲ»¤ò¸À¤¦¤È $%s ¤Ç¤¤¤¤¤ó¤À¤í¡©",
146         " $%s ¤Ç¤É¤¦¤À¤¤¡©",
147         " $%s ¤°¤é¤¤¤Ê¤é½Ð¤·¤Æ¤â¤¤¤¤¤¬¡£",
148         " $%s °Ê¾åʧ¤¦¤Ê¤ó¤Æ¹Í¤¨¤é¤ì¤Ê¤¤¤Í¡£",
149         "¤Þ¤¢Íî¤Á¤Ä¤¤¤Æ¡£ $%s ¤Ç¤É¤¦¤À¤¤¡©",
150         "¤½¤Î¥¬¥é¥¯¥¿¤Ê¤é $%s ¤Ç°ú¤­¼è¤ë¤è¡£",
151         "¤½¤ì¤¸¤ã¹â¤¹¤®¤ë¡ª $%s ¤¬¤¤¤¤¤È¤³¤À¤í¡£",
152         "¤É¤¦¤»¤¤¤é¤Ê¤¤¤ó¤À¤í¡ª $%s ¤Ç¤¤¤¤¤À¤í¡©",
153         "¤À¤á¤À¤á¡ª $%s ¤¬¤º¤Ã¤È¤ª»÷¹ç¤¤¤À¤è¡£",
154         "¥Ð¥«¤Ë¤·¤Æ¤¤¤ë¡ª $%s ¤¬¤»¤¤¤¼¤¤¤À¡£",
155         " $%s ¤Ê¤é´ò¤·¤¤¤È¤³¤í¤À¤¬¤Ê¤¢¡£",
156         " $%s ¡¢¤½¤ì°Ê¾å¤Ï¥Ó¥¿°ìʸ½Ð¤µ¤Ê¤¤¤è¡ª"
157 #else
158         "Perhaps %s gold pieces?",
159         "How about %s gold pieces?",
160         "I will pay no more than %s gold pieces.",
161         "I can afford no more than %s gold pieces.",
162         "Be reasonable.  How about %s gold pieces?",
163         "I'll buy it as scrap for %s gold pieces.",
164         "That is too much!  How about %s gold pieces?",
165         "That looks war surplus!  Say %s gold pieces?",
166         "Never!  %s is more like it.",
167         "That's an insult!  %s is more like it.",
168         "%s gold pieces and be thankful for it!",
169         "%s gold pieces and not a copper more!"
170 #endif
171
172 };
173
174 #ifdef JP
175 /*! ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÇ㤤¼è¤ê¡Ë */
176 static cptr comment_3b_B[MAX_COMMENT_3B] = {
177         " $%s ¤Ã¤Æ¤È¤³¤í¤À¤Í¡£¤½¤Î¤É¤¦¤·¤è¤¦¤â¤Ê¤¤¥¬¥é¥¯¥¿¤Ï¡£",
178         "¤³¤Î²¶¤¬ $%s ¤Ã¤Æ¸À¤Ã¤Æ¤¤¤ë¤ó¤À¤«¤é¡¢¤½¤ÎÄ̤ê¤Ë¤·¤¿Êý¤¬¿È¤Î¤¿¤á¤À¤¾¡£",
179         "²¶¤ÎÍ¥¤·¤µ¤Ë´Å¤¨¤ë¤Î¤â¤¤¤¤²Ã¸º¤Ë¤·¤Æ¤ª¤±¡£ $%s ¤À¡£",
180         "¤½¤ÎÉʤʤé $%s ¤ÇÇä¤Ã¤Æ¤¯¤ì¤Æ¤¤¤ë¤¬¤Í¡¢¾ï¼±¤¢¤ë¿Â»Î¤Ï¤ß¤ó¤Ê¡£",
181         "¤³¤ê¤ã¤Þ¤¿¡¢¤¬¤á¤Ä¤¤ÅÛ¤À¤Ê¡£¤¤¤¯¤é²¶¤¬²¹¸ü¤È¤Ï¤¤¤¨ $%s ¤¬¸Â³¦¤À¡£",
182         " $%s ¤À¡£Ê̤˲¶¤Ï¤½¤ó¤Ê¥¬¥é¥¯¥¿Íߤ·¤¯¤Ï¤Ê¤¤¤ó¤À¤«¤é¡£",
183         "²¶¤Î´ÕÄê³Û¤¬µ¤¤ËÆþ¤é¤Ê¤¤¤Î¤«¡© $%s ¡¢·ù¤Ê¤éµ¢¤ê¤Ê¡£",
184         " $%s ¤Ç°ú¤­¼è¤Ã¤Æ¤ä¤ë¤è¡£´î¤ó¤Ç¼õ¤±¼è¤ê¤Ê¡¢ÉÏ˳¿Í¡£",
185         "ʪ¤Î²ÁÃͤ¬Ê¬¤«¤é¤óÅۤϻÏËö¤Ë¤ª¤¨¤ó¤Ê¡£¤½¤ì¤Ï $%s ¤Ê¤ó¤À¤è¡£",
186         "¤½¤ó¤Ê¤Ë¶â¤¬Íߤ·¤¤¤Î¤«¡¢¤¢¤ó¤¿¡© $%s ¤ÇËþ­¤Ç¤­¤ó¤Î¤«¡©",
187         "Æþ¤ëŹ´Ö°ã¤¨¤Æ¤ó¤¸¤ã¤Ê¤¤¤Î¤«¡© $%s ¤Ç·ù¤Ê¤é¾¤ò¤¢¤¿¤Ã¤Æ¤¯¤ì¡£",
188         "²¶¤Î¸À¤¤Ãͤ˥±¥Á¤ò¤Ä¤±¤ëÅÛ¤¬¤¤¤ë¤È¤Ï¡ª ¤½¤ÎÅÙ¶»¤ËÌȤ¸¤Æ $%s ¤À¡£"
189 };
190 #endif
191 #define MAX_COMMENT_4A  4
192
193 static cptr comment_4a[MAX_COMMENT_4A] =
194 {
195 #ifdef JP
196         "¤â¤¦¤¿¤¯¤µ¤ó¤À¡ª²¿ÅÙ¤â»ä¤ò¤ï¤º¤é¤ï¤»¤Ê¤¤¤Ç¤¯¤ì¡ª",
197         "¤¦¤¬¡¼¡ª°ìÆü¤Î²æËý¤Î¸ÂÅÙ¤òĶ¤¨¤Æ¤¤¤ë¡ª",
198         "¤â¤¦¤¤¤¤¡ª»þ´Ö¤Î̵Â̰ʳ°¤Î¤Ê¤Ë¤â¤Î¤Ç¤â¤Ê¤¤¡ª",
199         "¤â¤¦¤ä¤Ã¤Æ¤é¤ì¤Ê¤¤¤è¡ª´é¤â¸«¤¿¤¯¤Ê¤¤¡ª"
200 #else
201         "Enough!  You have abused me once too often!",
202         "Arghhh!  I have had enough abuse for one day!",
203         "That does it!  You shall waste my time no more!",
204         "This is getting nowhere!  I'm going to Londis!"
205 #endif
206
207 };
208
209 #ifdef JP
210 /*! ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÅܤê¤ÎĺÅÀ¡Ë */
211 static cptr comment_4a_B[MAX_COMMENT_4A] = {
212         "¤Ê¤á¤ä¤¬¤Ã¤Æ¡ª²¹¸ü¤Ê²¶ÍͤǤâ¸Â³¦¤¬¤¢¤ë¤Ã¤Æ¤³¤È¤òÃΤ졪",
213         "²¶¤ò¤³¤³¤Þ¤ÇÅܤ餻¤Æ...Ì¿¤¬¤¢¤ë¤À¤±¤Ç¤â¤¢¤ê¤¬¤¿¤¤¤È»×¤¨¡ª",
214         "¤Õ¤¶¤±¤Æ¤ë¤Î¤«¡ªÎä¤ä¤«¤·¤Ê¤éÁê¼ê¤ò¸«¤Æ¤«¤é¤Ë¤·¤í¡ª",
215         "¤¤¤¤¤«¤²¤ó¤Ë¤·¤í¡ªº£ÅÙ¤³¤ó¤Ê¤Þ¤Í¤·¤¿¤é¤¿¤À¤¸¤ã¤ª¤«¤Í¤¨¤¾¡ª"
216 };
217 #endif
218 #define MAX_COMMENT_4B  4
219
220 static cptr comment_4b[MAX_COMMENT_4B] =
221 {
222 #ifdef JP
223         "Ź¤«¤é½Ð¤Æ¹Ô¤±¡ª",
224         "²¶¤ÎÁ°¤«¤é¾Ã¤¨¼º¤»¤í¡ª",
225         "¤É¤Ã¤«¤Ë¹Ô¤Ã¤Á¤Þ¤¨¡ª",
226         "½Ð¤í¡¢½Ð¤í¡¢½Ð¤Æ¹Ô¤±¡ª"
227 #else
228         "Leave my store!",
229         "Get out of my sight!",
230         "Begone, you scoundrel!",
231         "Out, out, out!"
232 #endif
233
234 };
235
236 #ifdef JP
237 /*! ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÄɤ¤½Ð¤·¡Ë */
238 static cptr comment_4b_B[MAX_COMMENT_4B] = {
239         "ÆóÅ٤Ȥ¦¤Á¤ËÍè¤ë¤ó¤¸¤ã¤Í¤¨¡ª¡ª",
240         "¤È¤Ã¤È¤È¡¢¤É¤Ã¤«¤Ø¼º¤»¤í¡ª¡ª",
241         "º£¤¹¤°¾Ã¤¨¼º¤»¤í¡ª¡ª",
242         "½Ð¤Æ¤¤¤±¡ª½Ð¤Æ¤¤¤±¡ª¡ª"
243 };
244 #endif
245 #define MAX_COMMENT_5   8
246
247 static cptr comment_5[MAX_COMMENT_5] =
248 {
249 #ifdef JP
250         "¹Í¤¨Ä¾¤·¤Æ¤¯¤ì¡£",
251         "¤½¤ê¤ã¤ª¤«¤·¤¤¡ª",
252         "¤â¤Ã¤È¿¿ÌÌÌܤ˸À¤Ã¤Æ¤¯¤ì¡ª",
253         "¸ò¾Ä¤¹¤ëµ¤¤¬¤¢¤ë¤Î¤«¤¤¡©",
254         "Îä¤ä¤«¤·¤ËÍ褿¤Î¤«¡ª",
255         "°­¤¤¾éÃ̤À¡ª",
256         "²æËý¤¯¤é¤Ù¤«¤¤¡£",
257         "¤Õ¡¼¤à¡¢Îɤ¤Å·µ¤¤À¡£"
258 #else
259         "Try again.",
260         "Ridiculous!",
261         "You will have to do better than that!",
262         "Do you wish to do business or not?",
263         "You've got to be kidding!",
264         "You'd better be kidding!",
265         "You try my patience.",
266         "Hmmm, nice weather we're having."
267 #endif
268
269 };
270
271 #ifdef JP
272 /*! ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÅܤê¡Ë */
273 static cptr comment_5_B[MAX_COMMENT_5] = {
274         "»þ´Ö¤Î̵Â̤À¤Ê¡¢¤³¤ì¤Ï¡£",
275         "Ìñ²ð¤Ê¤ªµÒÍͤÀ¤Ê¡ª",
276         "Ïä·¤Æʬ¤«¤ëÁê¼ê¤¸¤ã¤Ê¤µ¤½¤¦¤À¡£",
277         "Äˤ¤Ìܤˤ¢¤¤¤¿¤¤¤é¤·¤¤¤Ê¡ª",
278         "¤Ê¤ó¤Æ¶¯ÍߤÊÅÛ¤À¡ª",
279         "Ïäˤʤé¤óÇÚ¤À¡ª",
280         "¤É¤¦¤·¤è¤¦¤â¤Ê¤¤ÉÏ˳¿Í¤À¡ª",
281         "·ö²Þ¤òÇä¤Ã¤Æ¤¤¤ë¤Î¤«¡©"
282 };
283 #endif
284 #define MAX_COMMENT_6   4
285
286 static cptr comment_6[MAX_COMMENT_6] =
287 {
288 #ifdef JP
289         "¤É¤¦¤ä¤éʹ¤­´Ö°ã¤¨¤¿¤é¤·¤¤¡£",
290         "¼ºÎé¡¢¤è¤¯Ê¹¤³¤¨¤Ê¤«¤Ã¤¿¤è¡£",
291         "¤¹¤Þ¤Ê¤¤¡¢²¿¤À¤Ã¤Æ¡©",
292         "°­¤¤¡¢¤â¤¦°ìÅÙ¸À¤Ã¤Æ¤¯¤ì¤ë¡©"
293 #else
294         "I must have heard you wrong.",
295         "I'm sorry, I missed that.",
296         "I'm sorry, what was that?",
297         "Sorry, what was that again?"
298 #endif
299
300 };
301
302
303
304 /*!
305  * @brief ¼è°úÀ®¸ù»þ¤ÎŹ¼ç¤Î¥á¥Ã¥»¡¼¥¸½èÍý /
306  * Successful haggle.
307  * @return ¤Ê¤·
308  */
309 static void say_comment_1(void)
310 {
311 #ifdef JP
312         /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î¤È¤­¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
313         if ( cur_store_num == STORE_BLACK ) {
314                 msg_print(comment_1_B[randint0(MAX_COMMENT_1)]);
315         }
316         else{
317                 msg_print(comment_1[randint0(MAX_COMMENT_1)]);
318         }
319 #else
320         msg_print(comment_1[randint0(MAX_COMMENT_1)]);
321 #endif
322
323
324         if (one_in_(RUMOR_CHANCE))
325         {
326 #ifdef JP
327                 msg_print("Ź¼ç¤Ï¼ª¤¦¤Á¤·¤¿:");
328 #else
329                 msg_print("The shopkeeper whispers something into your ear:");
330 #endif
331                 display_rumor(TRUE);
332         }
333 }
334
335
336 /*!
337  * @brief ¥×¥ì¥¤¥ä¡¼¤¬¥¢¥¤¥Æ¥à¤òÇ㤦»þ¤Î²Á³ÊÂå°Æ¥á¥Ã¥»¡¼¥¸½èÍý /
338  * Continue haggling (player is buying)
339  * @param value Å¹¼ç¤ÎÄ󼨲Á³Ê
340  * @param annoyed Å¹¼ç¤Î¤¤¤é¤Ä¤­ÅÙ
341  * @return ¤Ê¤·
342  */
343 static void say_comment_2(s32b value, int annoyed)
344 {
345         char    tmp_val[80];
346
347         /* Prepare a string to insert */
348         sprintf(tmp_val, "%ld", (long)value);
349
350         /* Final offer */
351         if (annoyed > 0)
352         {
353                 /* Formatted message */
354                 msg_format(comment_2a[randint0(MAX_COMMENT_2A)], tmp_val);
355         }
356
357         /* Normal offer */
358         else
359         {
360                 /* Formatted message */
361 #ifdef JP
362                 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
363                 if ( cur_store_num == STORE_BLACK ){
364                         msg_format(comment_2b_B[randint0(MAX_COMMENT_2B)], tmp_val);
365                 }
366                 else{
367                 msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val);
368         }
369 #else
370                 msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val);
371 #endif
372
373         }
374 }
375
376
377 /*!
378  * @brief ¥×¥ì¥¤¥ä¡¼¤¬¥¢¥¤¥Æ¥à¤òÇä¤ë»þ¤Î²Á³ÊÂå°Æ¥á¥Ã¥»¡¼¥¸½èÍý /
379  * Continue haggling (player is selling)
380  * @param value Å¹¼ç¤ÎÄ󼨲Á³Ê
381  * @param annoyed Å¹¼ç¤Î¤¤¤é¤Ä¤­ÅÙ
382  * @return ¤Ê¤·
383  */
384 static void say_comment_3(s32b value, int annoyed)
385 {
386         char    tmp_val[80];
387
388         /* Prepare a string to insert */
389         sprintf(tmp_val, "%ld", (long)value);
390
391         /* Final offer */
392         if (annoyed > 0)
393         {
394                 /* Formatted message */
395                 msg_format(comment_3a[randint0(MAX_COMMENT_3A)], tmp_val);
396         }
397
398         /* Normal offer */
399         else
400         {
401                 /* Formatted message */
402 #ifdef JP
403                 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
404                 if ( cur_store_num == STORE_BLACK ){
405                         msg_format(comment_3b_B[randint0(MAX_COMMENT_3B)], tmp_val);
406                 }
407                 else{
408                 msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val);
409         }
410 #else
411                 msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val);
412 #endif
413
414         }
415 }
416
417
418 /*!
419  * @brief Å¹¼ç¤¬¥×¥ì¥¤¥ä¡¼¤òÄɤ¤½Ð¤¹»þ¤Î¥á¥Ã¥»¡¼¥¸½èÍý /
420  * Kick 'da bum out.                                    -RAK-
421  * @return ¤Ê¤·
422  */
423 static void say_comment_4(void)
424 {
425 #ifdef JP
426         /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
427         if ( cur_store_num == STORE_BLACK ){
428                 msg_print(comment_4a_B[randint0(MAX_COMMENT_4A)]);
429                 msg_print(comment_4b_B[randint0(MAX_COMMENT_4B)]);
430         }
431         else{
432                 msg_print(comment_4a[randint0(MAX_COMMENT_4A)]);
433                 msg_print(comment_4b[randint0(MAX_COMMENT_4B)]);
434         }
435 #else
436         msg_print(comment_4a[randint0(MAX_COMMENT_4A)]);
437         msg_print(comment_4b[randint0(MAX_COMMENT_4B)]);
438 #endif
439
440 }
441
442
443 /*!
444  * @brief Å¹¼ç¤¬¥×¥ì¥¤¥ä¡¼¤Ë¼è¤ê¹ç¤ï¤Ê¤¤»þ¤Î¥á¥Ã¥»¡¼¥¸½èÍý /
445  * You are insulting me
446  * @return ¤Ê¤·
447  */
448 static void say_comment_5(void)
449 {
450 #ifdef JP
451         /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
452         if ( cur_store_num == STORE_BLACK ){
453                 msg_print(comment_5_B[randint0(MAX_COMMENT_5)]);
454         }
455         else{
456                 msg_print(comment_5[randint0(MAX_COMMENT_5)]);
457         }
458 #else
459         msg_print(comment_5[randint0(MAX_COMMENT_5)]);
460 #endif
461
462 }
463
464
465 /*!
466  * @brief Å¹¼ç¤¬¥×¥ì¥¤¥ä¡¼¤ÎÄ󼨤òÍý²ò¤Ç¤­¤Ê¤«¤Ã¤¿»þ¤Î¥á¥Ã¥»¡¼¥¸½èÍý /
467  * That makes no sense.
468  * @return ¤Ê¤·
469  */
470 static void say_comment_6(void)
471 {
472         msg_print(comment_6[randint0(MAX_COMMENT_6)]);
473 }
474
475
476 #define MAX_COMMENT_7A  4
477
478 static cptr comment_7a[MAX_COMMENT_7A] =
479 {
480 #ifdef JP
481         "¤¦¤ï¤¢¤¢¤¡¤¡¡ª",
482         "¤Ê¤ó¤Æ¤³¤Ã¤¿¡ª",
483         "狼¤¬¤à¤»¤Óµã¤¯À¼¤¬Ê¹¤³¤¨¤ë...¡£",
484         "Ź¼ç¤¬²ù¤·¤²¤Ë¤ï¤á¤¤¤Æ¤¤¤ë¡ª"
485 #else
486         "Arrgghh!",
487         "You bastard!",
488         "You hear someone sobbing...",
489         "The shopkeeper howls in agony!"
490 #endif
491
492 };
493
494 #define MAX_COMMENT_7B  4
495
496 static cptr comment_7b[MAX_COMMENT_7B] =
497 {
498 #ifdef JP
499         "¤¯¤½¤¦¡ª",
500         "¤³¤Î°­Ëâ¤á¡ª",
501         "Ź¼ç¤¬º¨¤á¤·¤½¤¦¤Ë¸«¤Æ¤¤¤ë¡£",
502         "Ź¼ç¤¬âˤó¤Ç¤¤¤ë¡£"
503 #else
504         "Damn!",
505         "You fiend!",
506         "The shopkeeper curses at you.",
507         "The shopkeeper glares at you."
508 #endif
509
510 };
511
512 #define MAX_COMMENT_7C  4
513
514 static cptr comment_7c[MAX_COMMENT_7C] =
515 {
516 #ifdef JP
517         "¤¹¤Ð¤é¤·¤¤¡ª",
518         "·¯¤¬Å·»È¤Ë¸«¤¨¤ë¤è¡ª",
519         "Ź¼ç¤¬¥¯¥¹¥¯¥¹¾Ð¤Ã¤Æ¤¤¤ë¡£",
520         "Ź¼ç¤¬ÂçÀ¼¤Ç¾Ð¤Ã¤Æ¤¤¤ë¡£"
521 #else
522         "Cool!",
523         "You've made my day!",
524         "The shopkeeper giggles.",
525         "The shopkeeper laughs loudly."
526 #endif
527
528 };
529
530 #define MAX_COMMENT_7D  4
531
532 static cptr comment_7d[MAX_COMMENT_7D] =
533 {
534 #ifdef JP
535         "¤ä¤Ã¤Û¤¥¡ª",
536         "¤³¤ó¤Ê¤ª¤¤¤·¤¤»×¤¤¤ò¤·¤¿¤é¡¢¿¿ÌÌÌܤËƯ¤±¤Ê¤¯¤Ê¤ë¤Ê¤¡¡£",
537         "Ź¼ç¤Ï´ò¤·¤¯¤ÆÄ·¤Í²ó¤Ã¤Æ¤¤¤ë¡£",
538         "Ź¼ç¤ÏËþÌ̤˾Фߤò¤¿¤¿¤¨¤Æ¤¤¤ë¡£"
539 #else
540         "Yipee!",
541         "I think I'll retire!",
542         "The shopkeeper jumps for joy.",
543         "The shopkeeper smiles gleefully."
544 #endif
545
546 };
547
548
549 /*!
550  * @brief Å¹¼ç¤¬¸ò¾Ä¤ò½ª¤¨¤¿ºÝ¤ÎÈ¿±þ¤òÊÖ¤¹½èÍý /
551  * Let a shop-keeper React to a purchase
552  * @param price ¥¢¥¤¥Æ¥à¤Î¼è°ú³Û
553  * @param value ¥¢¥¤¥Æ¥à¤Î¼ÂºÝ²ÁÃÍ
554  * @param guess Å¹¼ç¤¬Åö½éͽÁÛ¤·¤Æ¤¤¤¿²ÁÃÍ
555  * @return ¤Ê¤·
556  * @details 
557  * We paid "price", it was worth "value", and we thought it was worth "guess"
558  */
559 static void purchase_analyze(s32b price, s32b value, s32b guess)
560 {
561         /* Item was worthless, but we bought it */
562         if ((value <= 0) && (price > value))
563         {
564                 /* Comment */
565                 msg_print(comment_7a[randint0(MAX_COMMENT_7A)]);
566
567                 chg_virtue(V_HONOUR, -1);
568                 chg_virtue(V_JUSTICE, -1);
569
570                 /* Sound */
571                 sound(SOUND_STORE1);
572         }
573
574         /* Item was cheaper than we thought, and we paid more than necessary */
575         else if ((value < guess) && (price > value))
576         {
577                 /* Comment */
578                 msg_print(comment_7b[randint0(MAX_COMMENT_7B)]);
579
580                 chg_virtue(V_JUSTICE, -1);
581                 if (one_in_(4))
582                         chg_virtue(V_HONOUR, -1);
583
584                 /* Sound */
585                 sound(SOUND_STORE2);
586         }
587
588         /* Item was a good bargain, and we got away with it */
589         else if ((value > guess) && (value < (4 * guess)) && (price < value))
590         {
591                 /* Comment */
592                 msg_print(comment_7c[randint0(MAX_COMMENT_7C)]);
593
594                 if (one_in_(4))
595                         chg_virtue(V_HONOUR, -1);
596                 else if (one_in_(4))
597                         chg_virtue(V_HONOUR, 1);
598
599                 /* Sound */
600                 sound(SOUND_STORE3);
601         }
602
603         /* Item was a great bargain, and we got away with it */
604         else if ((value > guess) && (price < value))
605         {
606                 /* Comment */
607                 msg_print(comment_7d[randint0(MAX_COMMENT_7D)]);
608
609                 if (one_in_(2))
610                         chg_virtue(V_HONOUR, -1);
611                 if (one_in_(4))
612                         chg_virtue(V_HONOUR, 1);
613
614                 if (10 * price < value)
615                         chg_virtue(V_SACRIFICE, 1);
616
617                 /* Sound */
618                 sound(SOUND_STORE4);
619         }
620 }
621
622
623
624 /*
625  * We store the current "store feat" here so everyone can access it
626  */
627 static int cur_store_feat;
628
629
630 /*
631  * Buying and selling adjustments for race combinations.
632  * Entry[owner][player] gives the basic "cost inflation".
633  */
634 static byte rgold_adj[MAX_RACES][MAX_RACES] =
635 {
636         /*Hum, HfE, Elf,  Hal, Gno, Dwa, HfO, HfT, Dun, HiE, Barbarian,
637          HfOg, HGn, HTn, Cyc, Yek, Klc, Kbd, Nbl, DkE, Drc, Mind Flayer,
638          Imp,  Glm, Skl, Zombie, Vampire, Spectre, Fairy, Beastman, Ent,
639          Angel, Demon, Kutar */
640
641         /* Human */
642         { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
643           124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
644           115, 105, 125, 125, 125, 125, 105, 120, 105,  95, 140,
645           100, 120, 110, 105 },
646
647         /* Half-Elf */
648         { 110, 100, 100, 105, 110, 120, 125, 130, 110, 100, 110,
649           120, 115, 108, 115, 110, 110, 120, 120, 115, 115, 110,
650           120, 110, 110, 110, 120, 110, 100, 125, 100,  95, 140,
651           110, 115, 110, 110 },
652
653         /* Elf */
654         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
655           120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108,
656           120, 115, 110, 110, 120, 110, 100, 125, 100,  95, 140,
657           110, 110, 105, 110 },
658
659         /* Halfling */
660         { 115, 110, 105,  95, 105, 110, 115, 130, 115, 105, 115,
661           125, 120, 120, 125, 115, 110, 120, 120, 120, 115, 115,
662           120, 110, 120, 120, 130, 110, 110, 130, 110,  95, 140,
663           115, 120, 105, 115 },
664
665         /* Gnome */
666         { 115, 115, 110, 105,  95, 110, 115, 130, 115, 110, 115,
667           120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110,
668           120, 101, 110, 110, 120, 120, 115, 130, 115,  95, 140,
669           115, 110, 110, 115 },
670
671         /* Dwarf */
672         { 115, 120, 120, 110, 110,  95, 125, 135, 115, 120, 115,
673           125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120,
674           120, 105, 115, 115, 115, 115, 120, 130, 120,  95, 140,
675           115, 110, 115, 115 },
676
677         /* Half-Orc */
678         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
679           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
680           115, 125, 120, 120, 115, 120, 125, 115, 125,  95, 140,
681           115, 110, 115, 115 },
682
683         /* Half-Troll */
684         { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
685           110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
686           110, 115, 112, 112, 115, 112, 120, 110, 120,  95, 140,
687           110, 110, 115, 110 },
688
689         /* Amberite */
690         { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
691           120, 120, 105, 120, 115, 105, 115, 120, 110, 105, 105,
692           120, 105, 120, 120, 125, 120, 105, 135, 105,  95, 140,
693           100, 110, 110, 100 },
694
695         /* High_Elf */
696         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
697           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
698           125, 115, 120, 120, 125, 120, 100, 125, 100,  95, 140,
699           110, 110, 105, 110 },
700
701         /* Human / Barbarian (copied from human) */
702         { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
703           124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
704           115, 105, 125, 125, 130, 125, 115, 120, 115,  95, 140,
705           100, 120, 110, 100 },
706
707         /* Half-Ogre: theoretical, copied from half-troll */
708         { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
709           110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
710           110, 115, 112, 112, 115, 112, 120, 110, 120,  95, 140,
711           110, 110, 115, 110 },
712
713         /* Half-Giant: theoretical, copied from half-troll */
714         { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
715           110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
716           110, 115, 112, 112, 115, 112, 130, 120, 130,  95, 140,
717           110, 110, 115, 110 },
718
719         /* Half-Titan: theoretical, copied from High_Elf */
720         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
721           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
722           125, 115, 120, 120, 120, 120, 130, 130, 130,  95, 140,
723           110, 110, 115, 110 },
724
725         /* Cyclops: theoretical, copied from half-troll */
726         { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
727           110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
728           110, 115, 112, 112, 115, 112, 130, 130, 130,  95, 140,
729           110, 110, 115, 110 },
730
731         /* Yeek: theoretical, copied from Half-Orc */
732         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
733           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
734           115, 125, 120, 120, 120, 120, 130, 130, 130,  95, 140,
735           115, 110, 115, 115 },
736
737         /* Klackon: theoretical, copied from Gnome */
738         { 115, 115, 110, 105,  95, 110, 115, 130, 115, 110, 115,
739           120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110,
740           120, 101, 110, 110, 120, 120, 130, 130, 130,  95, 140,
741           115, 110, 115, 115 },
742
743         /* Kobold: theoretical, copied from Half-Orc */
744         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
745           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
746           115, 125, 120, 120, 120, 120, 130, 130, 130,  95, 140,
747           115, 110, 115, 115 },
748
749         /* Nibelung: theoretical, copied from Dwarf */
750         { 115, 120, 120, 110, 110,  95, 125, 135, 115, 120, 115,
751           125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120,
752           120, 105, 115, 115, 120, 120, 130, 130, 130,  95, 140,
753           115, 135, 115, 115 },
754
755         /* Dark Elf */
756         { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115,
757           115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110,
758           110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120,
759           110, 101, 115, 110 },
760
761         /* Draconian: theoretical, copied from High_Elf */
762         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
763           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
764           125, 115, 120, 120, 120, 120, 130, 130, 130,  95, 140,
765           110, 110, 115, 110 },
766
767         /* Mind Flayer: theoretical, copied from High_Elf */
768         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
769           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
770           125, 115, 120, 120, 120, 120, 130, 130, 130,  95, 140,
771           110, 110, 115, 110 },
772
773         /* Imp: theoretical, copied from High_Elf */
774         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
775           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
776           125, 115, 120, 120, 120, 120, 130, 130, 130, 120, 120,
777           110, 110, 115, 110 },
778
779         /* Golem: theoretical, copied from High_Elf */
780         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
781           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
782           125, 115, 120, 120, 120, 120, 130, 130, 130,  95, 140,
783           110, 110, 115, 110 },
784
785         /* Skeleton: theoretical, copied from half-orc */
786         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
787           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
788           115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
789           115, 110, 125, 115 },
790
791         /* Zombie: Theoretical, copied from half-orc */
792         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
793           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
794           115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
795           115, 110, 125, 115 },
796
797         /* Vampire: Theoretical, copied from half-orc */
798         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
799           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
800           115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
801           115, 110, 125, 115 },
802
803         /* Spectre: Theoretical, copied from half-orc */
804         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
805           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
806           115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
807           115, 110, 125, 115 },
808
809         /* Sprite: Theoretical, copied from half-orc */
810         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
811           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
812           115, 125, 120, 120, 120, 120, 130, 130, 130,  95, 140,
813           115, 110, 105, 115 },
814
815         /* Beastman: Theoretical, copied from half-orc */
816         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
817           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
818           115, 125, 120, 120, 120, 120, 130, 130, 130,  95, 140,
819           115, 110, 115, 115 },
820
821         /* Ent */
822         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
823           120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108,
824           120, 115, 110, 110, 120, 110, 100, 125, 100,  95, 140,
825           110, 110, 105, 110 },
826
827         /* Angel */
828         {  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,
829            95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,
830            95,  95,  95,  95,  95,  95,  95,  95,  95,  95, 160,
831            95,  95,  95,  95 },
832
833         /* Demon */
834         { 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
835           140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
836           140, 140, 140, 140, 140, 140, 140, 140, 140, 160, 120,
837           140, 140, 140, 140 },
838
839         /* Dunadan */
840         { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
841           124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
842           115, 105, 125, 125, 125, 125, 105, 120, 105,  95, 140,
843           100, 120, 110, 100 },
844
845         /* Shadow Fairy */
846         { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115,
847           115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110,
848           110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120,
849           110, 101, 115, 110 },
850
851         /* Kutar */
852         { 110, 110, 105, 105, 110, 115, 115, 115, 110, 105, 110,
853           115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
854           115, 115, 125, 125, 125, 125, 105, 115, 105,  95, 140,
855           110, 115, 100, 110 },
856
857         /* Android */
858         { 105, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
859           124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
860           115, 105, 125, 125, 125, 125, 105, 120, 105,  95, 140,
861           100, 120, 110, 100 },
862 };
863
864
865
866 /*!
867  * @brief Å¹ÊÞ²Á³Ê¤ò·èÄꤹ¤ë /
868  * Determine the price of an item (qty one) in a store.
869  * @param o_ptr Å¹ÊÞ¤Ëʤ٤륪¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
870  * @param greed Å¹¼ç¤Î¶¯ÍßÅÙ
871  * @param flip TRUE¤Ê¤é¤ÐŹ¼ç¤Ë¤È¤Ã¤Æ¤ÎÇã¼è²Á³Ê¡¢FALSE¤Ê¤éÇä½Ð²Á³Ê¤ò·×»»
872  * @return ¤Ê¤·
873  * @details 
874  * <pre>
875  * This function takes into account the player's charisma, and the
876  * shop-keepers friendliness, and the shop-keeper's base greed, but
877  * never lets a shop-keeper lose money in a transaction.
878  * The "greed" value should exceed 100 when the player is "buying" the
879  * item, and should be less than 100 when the player is "selling" it.
880  * Hack -- the black market always charges twice as much as it should.
881  * Charisma adjustment runs from 80 to 130
882  * Racial adjustment runs from 95 to 130
883  * Since greed/charisma/racial adjustments are centered at 100, we need
884  * to adjust (by 200) to extract a usable multiplier.  Note that the
885  * "greed" value is always something (?).
886  * </pre>
887  */
888 static s32b price_item(object_type *o_ptr, int greed, bool flip)
889 {
890         int     factor;
891         int     adjust;
892         s32b    price;
893
894
895         /* Get the value of one of the items */
896         price = object_value(o_ptr);
897
898         /* Worthless items */
899         if (price <= 0) return (0L);
900
901
902         /* Compute the racial factor */
903         factor = rgold_adj[ot_ptr->owner_race][p_ptr->prace];
904
905         /* Add in the charisma factor */
906         factor += adj_chr_gold[p_ptr->stat_ind[A_CHR]];
907
908
909         /* Shop is buying */
910         if (flip)
911         {
912                 /* Adjust for greed */
913                 adjust = 100 + (300 - (greed + factor));
914
915                 /* Never get "silly" */
916                 if (adjust > 100) adjust = 100;
917
918                 /* Mega-Hack -- Black market sucks */
919                 if (cur_store_num == STORE_BLACK)
920                         price = price / 2;
921
922                 /* Compute the final price (with rounding) */
923                 /* Hack -- prevent underflow */
924                 price = (price * adjust + 50L) / 100L;
925         }
926
927         /* Shop is selling */
928         else
929         {
930                 /* Adjust for greed */
931                 adjust = 100 + ((greed + factor) - 300);
932
933                 /* Never get "silly" */
934                 if (adjust < 100) adjust = 100;
935
936                 /* Mega-Hack -- Black market sucks */
937                 if (cur_store_num == STORE_BLACK)
938                         price = price * 2;
939
940                 /* Compute the final price (with rounding) */
941                 /* Hack -- prevent overflow */
942                 price = (s32b)(((u32b)price * (u32b)adjust + 50UL) / 100UL);
943         }
944
945         /* Note -- Never become "free" */
946         if (price <= 0L) return (1L);
947
948         /* Return the price */
949         return (price);
950 }
951
952
953 /*!
954  * @brief °Â²Á¤Ê¾ÃÌ×ÉʤÎÈÎÇä¿ô¤òÁý¤ä¤·¡¢Äã³ÎΨ¤Ç³ä°ú¤Ë¤¹¤ë /
955  * Certain "cheap" objects should be created in "piles"
956  * @param o_ptr Å¹ÊÞ¤Ëʤ٤륪¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
957  * @return ¤Ê¤·
958  * @details 
959  * <pre>
960  * Some objects can be sold at a "discount" (in small piles)
961  * </pre>
962  */
963 static void mass_produce(object_type *o_ptr)
964 {
965         int size = 1;
966         int discount = 0;
967
968         s32b cost = object_value(o_ptr);
969
970
971         /* Analyze the type */
972         switch (o_ptr->tval)
973         {
974                 /* Food, Flasks, and Lites */
975                 case TV_FOOD:
976                 case TV_FLASK:
977                 case TV_LITE:
978                 {
979                         if (cost <= 5L) size += damroll(3, 5);
980                         if (cost <= 20L) size += damroll(3, 5);
981                         if (cost <= 50L) size += damroll(2, 2);
982                         break;
983                 }
984
985                 case TV_POTION:
986                 case TV_SCROLL:
987                 {
988                         if (cost <= 60L) size += damroll(3, 5);
989                         if (cost <= 240L) size += damroll(1, 5);
990                         if (o_ptr->sval == SV_SCROLL_STAR_IDENTIFY) size += damroll(3, 5);
991                         if (o_ptr->sval == SV_SCROLL_STAR_REMOVE_CURSE) size += damroll(1, 4);
992                         break;
993                 }
994
995                 case TV_LIFE_BOOK:
996                 case TV_SORCERY_BOOK:
997                 case TV_NATURE_BOOK:
998                 case TV_CHAOS_BOOK:
999                 case TV_DEATH_BOOK:
1000                 case TV_TRUMP_BOOK:
1001                 case TV_ARCANE_BOOK:
1002                 case TV_CRAFT_BOOK:
1003                 case TV_DAEMON_BOOK:
1004                 case TV_CRUSADE_BOOK:
1005                 case TV_MUSIC_BOOK:
1006                 case TV_HISSATSU_BOOK:
1007                 case TV_HEX_BOOK:
1008                 {
1009                         if (cost <= 50L) size += damroll(2, 3);
1010                         if (cost <= 500L) size += damroll(1, 3);
1011                         break;
1012                 }
1013
1014                 case TV_SOFT_ARMOR:
1015                 case TV_HARD_ARMOR:
1016                 case TV_SHIELD:
1017                 case TV_GLOVES:
1018                 case TV_BOOTS:
1019                 case TV_CLOAK:
1020                 case TV_HELM:
1021                 case TV_CROWN:
1022                 case TV_SWORD:
1023                 case TV_POLEARM:
1024                 case TV_HAFTED:
1025                 case TV_DIGGING:
1026                 case TV_BOW:
1027                 {
1028                         if (object_is_artifact(o_ptr)) break;
1029                         if (object_is_ego(o_ptr)) break;
1030                         if (cost <= 10L) size += damroll(3, 5);
1031                         if (cost <= 100L) size += damroll(3, 5);
1032                         break;
1033                 }
1034
1035                 case TV_SPIKE:
1036                 case TV_SHOT:
1037                 case TV_ARROW:
1038                 case TV_BOLT:
1039                 {
1040                         if (cost <= 5L) size += damroll(5, 5);
1041                         if (cost <= 50L) size += damroll(5, 5);
1042                         if (cost <= 500L) size += damroll(5, 5);
1043                         break;
1044                 }
1045
1046                 case TV_FIGURINE:
1047                 {
1048                         if (cost <= 100L) size += damroll(2, 2);
1049                         if (cost <= 1000L) size += damroll(2, 2);
1050                         break;
1051                 }
1052
1053                 case TV_CAPTURE:
1054                 case TV_STATUE:
1055                 case TV_CARD:
1056                 {
1057                         size = 1;
1058                         break;
1059                 }
1060
1061                 /*
1062                  * Because many rods (and a few wands and staffs) are useful mainly
1063                  * in quantity, the Black Market will occasionally have a bunch of
1064                  * one kind. -LM-
1065                  */
1066                 case TV_ROD:
1067                 case TV_WAND:
1068                 case TV_STAFF:
1069                 {
1070                         if ((cur_store_num == STORE_BLACK) && one_in_(3))
1071                         {
1072                                 if (cost < 1601L) size += damroll(1, 5);
1073                                 else if (cost < 3201L) size += damroll(1, 3);
1074                         }
1075                         break;
1076                 }
1077         }
1078
1079
1080         /* Pick a discount */
1081         if (cost < 5)
1082         {
1083                 discount = 0;
1084         }
1085         else if (one_in_(25))
1086         {
1087                 discount = 25;
1088         }
1089         else if (one_in_(150))
1090         {
1091                 discount = 50;
1092         }
1093         else if (one_in_(300))
1094         {
1095                 discount = 75;
1096         }
1097         else if (one_in_(500))
1098         {
1099                 discount = 90;
1100         }
1101
1102
1103         if (o_ptr->art_name)
1104         {
1105                 if (cheat_peek && discount)
1106                 {
1107 #ifdef JP
1108 msg_print("¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ÏÃÍ°ú¤­¤Ê¤·¡£");
1109 #else
1110                         msg_print("No discount on random artifacts.");
1111 #endif
1112
1113                 }
1114                 discount = 0;
1115         }
1116
1117         /* Save the discount */
1118         o_ptr->discount = discount;
1119
1120         /* Save the total pile size */
1121         o_ptr->number = size - (size * discount / 100);
1122
1123         /* Ensure that mass-produced rods and wands get the correct pvals. */
1124         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
1125         {
1126                 o_ptr->pval *= o_ptr->number;
1127         }
1128 }
1129
1130
1131
1132 /*!
1133  * @brief Å¹ÊÞ¤Ëʤ٤¿ÉʤòƱ°ìÉʤǤ¢¤ë¤«¤É¤¦¤«È½Äꤹ¤ë /
1134  * Determine if a store item can "absorb" another item
1135  * @param o_ptr È½Äꤹ¤ë¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿1
1136  * @param j_ptr È½Äꤹ¤ë¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿2
1137  * @return Æ±°ì°·¤¤¤Ç¤­¤ë¤Ê¤éTRUE¤òÊÖ¤¹
1138  * @details 
1139  * <pre>
1140  * See "object_similar()" for the same function for the "player"
1141  * </pre>
1142  */
1143 static bool store_object_similar(object_type *o_ptr, object_type *j_ptr)
1144 {
1145         int i;
1146
1147         /* Hack -- Identical items cannot be stacked */
1148         if (o_ptr == j_ptr) return (0);
1149
1150         /* Different objects cannot be stacked */
1151         if (o_ptr->k_idx != j_ptr->k_idx) return (0);
1152
1153         /* Different charges (etc) cannot be stacked, unless wands or rods. */
1154         if ((o_ptr->pval != j_ptr->pval) && (o_ptr->tval != TV_WAND) && (o_ptr->tval != TV_ROD)) return (0);
1155
1156         /* Require many identical values */
1157         if (o_ptr->to_h != j_ptr->to_h) return (0);
1158         if (o_ptr->to_d != j_ptr->to_d) return (0);
1159         if (o_ptr->to_a != j_ptr->to_a) return (0);
1160
1161         /* Require identical "ego-item" names */
1162         if (o_ptr->name2 != j_ptr->name2) return (0);
1163
1164         /* Artifacts don't stack! */
1165         if (object_is_artifact(o_ptr) || object_is_artifact(j_ptr)) return (0);
1166
1167         /* Hack -- Identical art_flags! */
1168         for (i = 0; i < TR_FLAG_SIZE; i++)
1169                 if (o_ptr->art_flags[i] != j_ptr->art_flags[i]) return (0);
1170
1171         /* Hack -- Never stack "powerful" items */
1172         if (o_ptr->xtra1 || j_ptr->xtra1) return (0);
1173
1174         /* Hack -- Never stack recharging items */
1175         if (o_ptr->timeout || j_ptr->timeout) return (0);
1176
1177         /* Require many identical values */
1178         if (o_ptr->ac != j_ptr->ac)   return (0);
1179         if (o_ptr->dd != j_ptr->dd)   return (0);
1180         if (o_ptr->ds != j_ptr->ds)   return (0);
1181
1182         /* Hack -- Never stack chests */
1183         if (o_ptr->tval == TV_CHEST) return (0);
1184         if (o_ptr->tval == TV_STATUE) return (0);
1185         if (o_ptr->tval == TV_CAPTURE) return (0);
1186
1187         /* Require matching discounts */
1188         if (o_ptr->discount != j_ptr->discount) return (0);
1189
1190         /* They match, so they must be similar */
1191         return (TRUE);
1192 }
1193
1194
1195 /*!
1196  * @brief Å¹ÊÞ¤Ëʤ٤¿Éʤò½Å¤Í¹ç¤ï¤»¤Ç¤­¤ë¤«¤É¤¦¤«È½Äꤹ¤ë /
1197  * Allow a store item to absorb another item
1198  * @param o_ptr È½Äꤹ¤ë¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿1
1199  * @param j_ptr È½Äꤹ¤ë¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿2
1200  * @return ½Å¤Í¹ç¤ï¤»¤Ç¤­¤ë¤Ê¤éTRUE¤òÊÖ¤¹
1201  * @details 
1202  * <pre>
1203  * See "object_similar()" for the same function for the "player"
1204  * </pre>
1205  */
1206 static void store_object_absorb(object_type *o_ptr, object_type *j_ptr)
1207 {
1208         int max_num = (o_ptr->tval == TV_ROD) ?
1209                 MIN(99, MAX_SHORT / k_info[o_ptr->k_idx].pval) : 99;
1210         int total = o_ptr->number + j_ptr->number;
1211         int diff = (total > max_num) ? total - max_num : 0;
1212
1213         /* Combine quantity, lose excess items */
1214         o_ptr->number = (total > max_num) ? max_num : total;
1215
1216         /* Hack -- if rods are stacking, add the pvals (maximum timeouts) together. -LM- */
1217         if (o_ptr->tval == TV_ROD)
1218         {
1219                 o_ptr->pval += j_ptr->pval * (j_ptr->number - diff) / j_ptr->number;
1220         }
1221
1222         /* Hack -- if wands are stacking, combine the charges. -LM- */
1223         if (o_ptr->tval == TV_WAND)
1224         {
1225                 o_ptr->pval += j_ptr->pval * (j_ptr->number - diff) / j_ptr->number;
1226         }
1227 }
1228
1229
1230 /*!
1231  * @brief Å¹ÊÞ¤ËÉʤòÃÖ¤¯¥¹¥Ú¡¼¥¹¤¬¤¢¤ë¤«¤É¤¦¤«¤ÎȽÄê¤òÊÖ¤¹ /
1232  * Check to see if the shop will be carrying too many objects   -RAK-
1233  * @param o_ptr Å¹ÊÞ¤ËÃÖ¤­¤¿¤¤¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
1234  * @return ÃÖ¤­¾ì¤¬¤Ê¤¤¤Ê¤é0¡¢½Å¤Í¹ç¤ï¤»¤Ç¤­¤ë¥¢¥¤¥Æ¥à¤¬¤¢¤ë¤Ê¤é-1¡¢¥¹¥Ú¡¼¥¹¤¬¤¢¤ë¤Ê¤é1¤òÊÖ¤¹¡£
1235  * @details 
1236  * <pre>
1237  * Note that the shop, just like a player, will not accept things
1238  * it cannot hold.      Before, one could "nuke" potions this way.
1239  * Return value is now int:
1240  *  0 : No space
1241  * -1 : Can be combined to existing slot.
1242  *  1 : Cannot be combined but there are empty spaces.
1243  * </pre>
1244  */
1245 static int store_check_num(object_type *o_ptr)
1246 {
1247         int        i;
1248         object_type *j_ptr;
1249
1250         /* The "home" acts like the player */
1251         if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
1252         {
1253                 bool old_stack_force_notes = stack_force_notes;
1254                 bool old_stack_force_costs = stack_force_costs;
1255
1256                 if (cur_store_num != STORE_HOME)
1257                 {
1258                         stack_force_notes = FALSE;
1259                         stack_force_costs = FALSE;
1260                 }
1261
1262                 /* Check all the items */
1263                 for (i = 0; i < st_ptr->stock_num; i++)
1264                 {
1265                         /* Get the existing item */
1266                         j_ptr = &st_ptr->stock[i];
1267
1268                         /* Can the new object be combined with the old one? */
1269                         if (object_similar(j_ptr, o_ptr))
1270                         {
1271                                 if (cur_store_num != STORE_HOME)
1272                                 {
1273                                         stack_force_notes = old_stack_force_notes;
1274                                         stack_force_costs = old_stack_force_costs;
1275                                 }
1276
1277                                 return -1;
1278                         }
1279                 }
1280
1281                 if (cur_store_num != STORE_HOME)
1282                 {
1283                         stack_force_notes = old_stack_force_notes;
1284                         stack_force_costs = old_stack_force_costs;
1285                 }
1286         }
1287
1288         /* Normal stores do special stuff */
1289         else
1290         {
1291                 /* Check all the items */
1292                 for (i = 0; i < st_ptr->stock_num; i++)
1293                 {
1294                         /* Get the existing item */
1295                         j_ptr = &st_ptr->stock[i];
1296
1297                         /* Can the new object be combined with the old one? */
1298                         if (store_object_similar(j_ptr, o_ptr)) return -1;
1299                 }
1300         }
1301
1302         /* Free space is always usable */
1303         /*
1304          * ¥ª¥×¥·¥ç¥ó powerup_home ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È
1305          * ²æ¤¬²È¤¬ 20 ¥Ú¡¼¥¸¤Þ¤Ç»È¤¨¤ë
1306          */
1307         if ((cur_store_num == STORE_HOME) && ( powerup_home == FALSE )) {
1308                 if (st_ptr->stock_num < ((st_ptr->stock_size) / 10)) {
1309                         return 1;
1310                 }
1311         }
1312         else{
1313                 if (st_ptr->stock_num < st_ptr->stock_size) {
1314                         return 1;
1315                 }
1316         }
1317
1318         /* But there was no room at the inn... */
1319         return 0;
1320 }
1321
1322 /*!
1323  * @brief ¥ª¥Ö¥¸¥§¥¯¥È¤¬½ËÊ¡¤µ¤ì¤Æ¤¤¤ë¤«¤ÎȽÄê¤òÊÖ¤¹ /
1324  * @param o_ptr È½Äꤷ¤¿¤¤¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
1325  * @return ¥¢¥¤¥Æ¥à¤¬½ËÊ¡¤µ¤ì¤¿¥¢¥¤¥Æ¥à¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1326  */
1327 static bool is_blessed(object_type *o_ptr)
1328 {
1329         u32b flgs[TR_FLAG_SIZE];
1330         object_flags(o_ptr, flgs);
1331         if (have_flag(flgs, TR_BLESSED)) return (TRUE);
1332         else return (FALSE);
1333 }
1334
1335
1336
1337 /*!
1338  * @brief ¥ª¥Ö¥¸¥§¥¯¥È¤¬½êÄê¤ÎŹÊޤǰú¤­¼è¤ì¤ë¤«¤É¤¦¤«¤òÊÖ¤¹ /
1339  * Determine if the current store will purchase the given item
1340  * @param o_ptr È½Äꤷ¤¿¤¤¥ª¥Ö¥¸¥§¥¯¥È¹½Â¤ÂΤλ²¾È¥Ý¥¤¥ó¥¿
1341  * @return ¥¢¥¤¥Æ¥à¤¬Ç㤤¼è¤ì¤ë¤Ê¤é¤ÐTRUE¤òÊÖ¤¹
1342  * @note
1343  * Note that a shop-keeper must refuse to buy "worthless" items
1344  */
1345 static bool store_will_buy(object_type *o_ptr)
1346 {
1347         /* Hack -- The Home is simple */
1348         if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) return (TRUE);
1349
1350         /* Switch on the store */
1351         switch (cur_store_num)
1352         {
1353                 /* General Store */
1354                 case STORE_GENERAL:
1355                 {
1356                         /* Analyze the type */
1357                         switch (o_ptr->tval)
1358                         {
1359                                 case TV_POTION:
1360                                         if (o_ptr->sval != SV_POTION_WATER) return FALSE;
1361
1362                                 case TV_WHISTLE:
1363                                 case TV_FOOD:
1364                                 case TV_LITE:
1365                                 case TV_FLASK:
1366                                 case TV_SPIKE:
1367                                 case TV_SHOT:
1368                                 case TV_ARROW:
1369                                 case TV_BOLT:
1370                                 case TV_DIGGING:
1371                                 case TV_CLOAK:
1372                                 case TV_BOTTLE: /* 'Green', recycling Angband */
1373                                 case TV_FIGURINE:
1374                                 case TV_STATUE:
1375                                 case TV_CAPTURE:
1376                                 case TV_CARD:
1377                                 break;
1378                                 default:
1379                                 return (FALSE);
1380                         }
1381                         break;
1382                 }
1383
1384                 /* Armoury */
1385                 case STORE_ARMOURY:
1386                 {
1387                         /* Analyze the type */
1388                         switch (o_ptr->tval)
1389                         {
1390                                 case TV_BOOTS:
1391                                 case TV_GLOVES:
1392                                 case TV_CROWN:
1393                                 case TV_HELM:
1394                                 case TV_SHIELD:
1395                                 case TV_CLOAK:
1396                                 case TV_SOFT_ARMOR:
1397                                 case TV_HARD_ARMOR:
1398                                 case TV_DRAG_ARMOR:
1399                                 break;
1400                                 default:
1401                                 return (FALSE);
1402                         }
1403                         break;
1404                 }
1405
1406                 /* Weapon Shop */
1407                 case STORE_WEAPON:
1408                 {
1409                         /* Analyze the type */
1410                         switch (o_ptr->tval)
1411                         {
1412                                 case TV_SHOT:
1413                                 case TV_BOLT:
1414                                 case TV_ARROW:
1415                                 case TV_BOW:
1416                                 case TV_DIGGING:
1417                                 case TV_POLEARM:
1418                                 case TV_SWORD:
1419                                 case TV_HISSATSU_BOOK:
1420                                 break;
1421                                 case TV_HAFTED:
1422                                 {
1423                                         if(o_ptr->sval == SV_WIZSTAFF) return (FALSE);
1424                                 }
1425                                 break;
1426                                 default:
1427                                 return (FALSE);
1428                         }
1429                         break;
1430                 }
1431
1432                 /* Temple */
1433                 case STORE_TEMPLE:
1434                 {
1435                         /* Analyze the type */
1436                         switch (o_ptr->tval)
1437                         {
1438                                 case TV_LIFE_BOOK:
1439                                 case TV_CRUSADE_BOOK:
1440                                 case TV_SCROLL:
1441                                 case TV_POTION:
1442                                 case TV_HAFTED:
1443                                 {
1444                                         break;
1445                                 }
1446                                 case TV_FIGURINE:
1447                                 case TV_STATUE:
1448                                 {
1449                                         monster_race *r_ptr = &r_info[o_ptr->pval];
1450
1451                                         /* Decline evil */
1452                                         if (!(r_ptr->flags3 & RF3_EVIL))
1453                                         {
1454                                                 /* Accept good */
1455                                                 if (r_ptr->flags3 & RF3_GOOD) break;
1456
1457                                                 /* Accept animals */
1458                                                 if (r_ptr->flags3 & RF3_ANIMAL) break;
1459
1460                                                 /* Accept mimics */
1461                                                 if (my_strchr("?!", r_ptr->d_char)) break;
1462                                         }
1463                                 }
1464                                 case TV_POLEARM:
1465                                 case TV_SWORD:
1466                                 {
1467                                         if (is_blessed(o_ptr)) break;
1468                                 }
1469                                 default:
1470                                 return (FALSE);
1471                         }
1472                         break;
1473                 }
1474
1475                 /* Alchemist */
1476                 case STORE_ALCHEMIST:
1477                 {
1478                         /* Analyze the type */
1479                         switch (o_ptr->tval)
1480                         {
1481                                 case TV_SCROLL:
1482                                 case TV_POTION:
1483                                 break;
1484                                 default:
1485                                 return (FALSE);
1486                         }
1487                         break;
1488                 }
1489
1490                 /* Magic Shop */
1491                 case STORE_MAGIC:
1492                 {
1493                         /* Analyze the type */
1494                         switch (o_ptr->tval)
1495                         {
1496                                 case TV_SORCERY_BOOK:
1497                                 case TV_NATURE_BOOK:
1498                                 case TV_CHAOS_BOOK:
1499                                 case TV_DEATH_BOOK:
1500                                 case TV_TRUMP_BOOK:
1501                                 case TV_ARCANE_BOOK:
1502                                 case TV_CRAFT_BOOK:
1503                                 case TV_DAEMON_BOOK:
1504                                 case TV_MUSIC_BOOK:
1505                                 case TV_HEX_BOOK:
1506                                 case TV_AMULET:
1507                                 case TV_RING:
1508                                 case TV_STAFF:
1509                                 case TV_WAND:
1510                                 case TV_ROD:
1511                                 case TV_SCROLL:
1512                                 case TV_POTION:
1513                                 case TV_FIGURINE:
1514                                 break;
1515                                 case TV_HAFTED:
1516                                 {
1517                                         if(o_ptr->sval == SV_WIZSTAFF) break;
1518                                         else return (FALSE);
1519                                 }
1520                                 default:
1521                                 return (FALSE);
1522                         }
1523                         break;
1524                 }
1525                 /* Bookstore Shop */
1526                 case STORE_BOOK:
1527                 {
1528                         /* Analyze the type */
1529                         switch (o_ptr->tval)
1530                         {
1531                                 case TV_SORCERY_BOOK:
1532                                 case TV_NATURE_BOOK:
1533                                 case TV_CHAOS_BOOK:
1534                                 case TV_DEATH_BOOK:
1535                                 case TV_LIFE_BOOK:
1536                                 case TV_TRUMP_BOOK:
1537                                 case TV_ARCANE_BOOK:
1538                                 case TV_CRAFT_BOOK:
1539                                 case TV_DAEMON_BOOK:
1540                                 case TV_CRUSADE_BOOK:
1541                                 case TV_MUSIC_BOOK:
1542                                 case TV_HEX_BOOK:
1543                                         break;
1544                                 default:
1545                                         return (FALSE);
1546                         }
1547                         break;
1548                 }
1549         }
1550
1551         /* XXX XXX XXX Ignore "worthless" items */
1552         if (object_value(o_ptr) <= 0) return (FALSE);
1553
1554         /* Assume okay */
1555         return (TRUE);
1556 }
1557
1558
1559 /*!
1560  * @brief ¸½ºß¤ÎÄ®¤Î»ØÄꤵ¤ì¤¿Å¹ÊޤΥ¢¥¤¥Æ¥à¤òÀ°Íý¤¹¤ë /
1561  * Combine and reorder items in store.
1562  * @param store_num Å¹ÊÞID
1563  * @return ¼ÂºÝ¤ËÀ°Íý¤¬¹Ô¤ï¤ì¤¿¤Ê¤é¤ÐTRUE¤òÊÖ¤¹¡£
1564  */
1565 bool combine_and_reorder_home(int store_num)
1566 {
1567         int         i, j, k;
1568         s32b        o_value;
1569         object_type forge, *o_ptr, *j_ptr;
1570         bool        flag = FALSE, combined;
1571         store_type  *old_st_ptr = st_ptr;
1572         bool        old_stack_force_notes = stack_force_notes;
1573         bool        old_stack_force_costs = stack_force_costs;
1574
1575         st_ptr = &town[1].store[store_num];
1576         if (store_num != STORE_HOME)
1577         {
1578                 stack_force_notes = FALSE;
1579                 stack_force_costs = FALSE;
1580         }
1581
1582         do
1583         {
1584                 combined = FALSE;
1585
1586                 /* Combine the items in the home (backwards) */
1587                 for (i = st_ptr->stock_num - 1; i > 0; i--)
1588                 {
1589                         /* Get the item */
1590                         o_ptr = &st_ptr->stock[i];
1591
1592                         /* Skip empty items */
1593                         if (!o_ptr->k_idx) continue;
1594
1595                         /* Scan the items above that item */
1596                         for (j = 0; j < i; j++)
1597                         {
1598                                 int max_num;
1599
1600                                 /* Get the item */
1601                                 j_ptr = &st_ptr->stock[j];
1602
1603                                 /* Skip empty items */
1604                                 if (!j_ptr->k_idx) continue;
1605
1606                                 /*
1607                                  * Get maximum number of the stack if these
1608                                  * are similar, get zero otherwise.
1609                                  */
1610                                 max_num = object_similar_part(j_ptr, o_ptr);
1611
1612                                 /* Can we (partialy) drop "o_ptr" onto "j_ptr"? */
1613                                 if (max_num && j_ptr->number < max_num)
1614                                 {
1615                                         if (o_ptr->number + j_ptr->number <= max_num)
1616                                         {
1617                                                 /* Add together the item counts */
1618                                                 object_absorb(j_ptr, o_ptr);
1619
1620                                                 /* One object is gone */
1621                                                 st_ptr->stock_num--;
1622
1623                                                 /* Slide everything down */
1624                                                 for (k = i; k < st_ptr->stock_num; k++)
1625                                                 {
1626                                                         /* Structure copy */
1627                                                         st_ptr->stock[k] = st_ptr->stock[k + 1];
1628                                                 }
1629
1630                                                 /* Erase the "final" slot */
1631                                                 object_wipe(&st_ptr->stock[k]);
1632                                         }
1633                                         else
1634                                         {
1635                                                 int old_num = o_ptr->number;
1636                                                 int remain = j_ptr->number + o_ptr->number - max_num;
1637
1638                                                 /* Add together the item counts */
1639                                                 object_absorb(j_ptr, o_ptr);
1640
1641                                                 o_ptr->number = remain;
1642
1643                                                 /* Hack -- if rods are stacking, add the pvals (maximum timeouts) and current timeouts together. -LM- */
1644                                                 if (o_ptr->tval == TV_ROD)
1645                                                 {
1646                                                         o_ptr->pval =  o_ptr->pval * remain / old_num;
1647                                                         o_ptr->timeout = o_ptr->timeout * remain / old_num;
1648                                                 }
1649
1650                                                 /* Hack -- if wands are stacking, combine the charges. -LM- */
1651                                                 else if (o_ptr->tval == TV_WAND)
1652                                                 {
1653                                                         o_ptr->pval = o_ptr->pval * remain / old_num;
1654                                                 }
1655                                         }
1656
1657                                         /* Take note */
1658                                         combined = TRUE;
1659
1660                                         /* Done */
1661                                         break;
1662                                 }
1663                         }
1664                 }
1665
1666                 flag |= combined;
1667         }
1668         while (combined);
1669
1670         /* Re-order the items in the home (forwards) */
1671         for (i = 0; i < st_ptr->stock_num; i++)
1672         {
1673                 /* Get the item */
1674                 o_ptr = &st_ptr->stock[i];
1675
1676                 /* Skip empty slots */
1677                 if (!o_ptr->k_idx) continue;
1678
1679                 /* Get the "value" of the item */
1680                 o_value = object_value(o_ptr);
1681
1682                 /* Scan every occupied slot */
1683                 for (j = 0; j < st_ptr->stock_num; j++)
1684                 {
1685                         if (object_sort_comp(o_ptr, o_value, &st_ptr->stock[j])) break;
1686                 }
1687
1688                 /* Never move down */
1689                 if (j >= i) continue;
1690
1691                 /* Take note */
1692                 flag = TRUE;
1693
1694                 /* Get local object */
1695                 j_ptr = &forge;
1696
1697                 /* Save a copy of the moving item */
1698                 object_copy(j_ptr, &st_ptr->stock[i]);
1699
1700                 /* Slide the objects */
1701                 for (k = i; k > j; k--)
1702                 {
1703                         /* Slide the item */
1704                         object_copy(&st_ptr->stock[k], &st_ptr->stock[k - 1]);
1705                 }
1706
1707                 /* Insert the moving item */
1708                 object_copy(&st_ptr->stock[j], j_ptr);
1709         }
1710
1711         st_ptr = old_st_ptr;
1712         if (store_num != STORE_HOME)
1713         {
1714                 stack_force_notes = old_stack_force_notes;
1715                 stack_force_costs = old_stack_force_costs;
1716         }
1717
1718         return flag;
1719 }
1720
1721
1722 /*!
1723  * @brief ²æ¤¬²È¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤ò²Ã¤¨¤ë /
1724  * Add the item "o_ptr" to the inventory of the "Home"
1725  * @param o_ptr ²Ã¤¨¤¿¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
1726  * @return ¼ý¤á¤¿Àè¤ÎID
1727  * @details
1728  * <pre>
1729  * In all cases, return the slot (or -1) where the object was placed
1730  * Note that this is a hacked up version of "inven_carry()".
1731  * Also note that it may not correctly "adapt" to "knowledge" bacoming
1732  * known, the player may have to pick stuff up and drop it again.
1733  * </pre>
1734  */
1735 static int home_carry(object_type *o_ptr)
1736 {
1737         int                             slot;
1738         s32b                       value;
1739         int     i;
1740         object_type *j_ptr;
1741         bool old_stack_force_notes = stack_force_notes;
1742         bool old_stack_force_costs = stack_force_costs;
1743
1744         if (cur_store_num != STORE_HOME)
1745         {
1746                 stack_force_notes = FALSE;
1747                 stack_force_costs = FALSE;
1748         }
1749
1750         /* Check each existing item (try to combine) */
1751         for (slot = 0; slot < st_ptr->stock_num; slot++)
1752         {
1753                 /* Get the existing item */
1754                 j_ptr = &st_ptr->stock[slot];
1755
1756                 /* The home acts just like the player */
1757                 if (object_similar(j_ptr, o_ptr))
1758                 {
1759                         /* Save the new number of items */
1760                         object_absorb(j_ptr, o_ptr);
1761
1762                         if (cur_store_num != STORE_HOME)
1763                         {
1764                                 stack_force_notes = old_stack_force_notes;
1765                                 stack_force_costs = old_stack_force_costs;
1766                         }
1767
1768                         /* All done */
1769                         return (slot);
1770                 }
1771         }
1772
1773         if (cur_store_num != STORE_HOME)
1774         {
1775                 stack_force_notes = old_stack_force_notes;
1776                 stack_force_costs = old_stack_force_costs;
1777         }
1778
1779         /* No space? */
1780         /*
1781          * ±£¤·µ¡Ç½: ¥ª¥×¥·¥ç¥ó powerup_home ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È
1782          *           ²æ¤¬²È¤¬ 20 ¥Ú¡¼¥¸¤Þ¤Ç»È¤¨¤ë
1783          */
1784         /* No space? */
1785         if ((cur_store_num != STORE_HOME) || (powerup_home == TRUE)) {
1786                 if (st_ptr->stock_num >= st_ptr->stock_size) {
1787                         return (-1);
1788                 }
1789         }
1790         else{
1791                 if (st_ptr->stock_num >= ((st_ptr->stock_size) / 10)) {
1792                         return (-1);
1793                 }
1794         }
1795
1796
1797         /* Determine the "value" of the item */
1798         value = object_value(o_ptr);
1799
1800         /* Check existing slots to see if we must "slide" */
1801         for (slot = 0; slot < st_ptr->stock_num; slot++)
1802         {
1803                 if (object_sort_comp(o_ptr, value, &st_ptr->stock[slot])) break;
1804         }
1805
1806         /* Slide the others up */
1807         for (i = st_ptr->stock_num; i > slot; i--)
1808         {
1809                 st_ptr->stock[i] = st_ptr->stock[i-1];
1810         }
1811
1812         /* More stuff now */
1813         st_ptr->stock_num++;
1814
1815         /* Insert the new item */
1816         st_ptr->stock[slot] = *o_ptr;
1817
1818         chg_virtue(V_SACRIFICE, -1);
1819
1820         (void)combine_and_reorder_home(cur_store_num);
1821
1822         /* Return the location */
1823         return (slot);
1824 }
1825
1826
1827 /*!
1828  * @brief Å¹Êޤ˥ª¥Ö¥¸¥§¥¯¥È¤ò²Ã¤¨¤ë /
1829  * Add the item "o_ptr" to a real stores inventory.
1830  * @param o_ptr ²Ã¤¨¤¿¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
1831  * @return ¼ý¤á¤¿Àè¤ÎID
1832  * @details
1833  * <pre>
1834  * In all cases, return the slot (or -1) where the object was placed
1835  * Note that this is a hacked up version of "inven_carry()".
1836  * Also note that it may not correctly "adapt" to "knowledge" bacoming
1837  * known, the player may have to pick stuff up and drop it again.
1838  * </pre>
1839  */
1840 static int store_carry(object_type *o_ptr)
1841 {
1842         int     i, slot;
1843         s32b    value, j_value;
1844         object_type *j_ptr;
1845
1846
1847         /* Evaluate the object */
1848         value = object_value(o_ptr);
1849
1850         /* Cursed/Worthless items "disappear" when sold */
1851         if (value <= 0) return (-1);
1852
1853         /* All store items are fully *identified* */
1854         o_ptr->ident |= IDENT_MENTAL;
1855
1856         /* Erase the inscription */
1857         o_ptr->inscription = 0;
1858
1859         /* Erase the "feeling" */
1860         o_ptr->feeling = FEEL_NONE;
1861
1862         /* Check each existing item (try to combine) */
1863         for (slot = 0; slot < st_ptr->stock_num; slot++)
1864         {
1865                 /* Get the existing item */
1866                 j_ptr = &st_ptr->stock[slot];
1867
1868                 /* Can the existing items be incremented? */
1869                 if (store_object_similar(j_ptr, o_ptr))
1870                 {
1871                         /* Hack -- extra items disappear */
1872                         store_object_absorb(j_ptr, o_ptr);
1873
1874                         /* All done */
1875                         return (slot);
1876                 }
1877         }
1878
1879         /* No space? */
1880         if (st_ptr->stock_num >= st_ptr->stock_size) return (-1);
1881
1882
1883         /* Check existing slots to see if we must "slide" */
1884         for (slot = 0; slot < st_ptr->stock_num; slot++)
1885         {
1886                 /* Get that item */
1887                 j_ptr = &st_ptr->stock[slot];
1888
1889                 /* Objects sort by decreasing type */
1890                 if (o_ptr->tval > j_ptr->tval) break;
1891                 if (o_ptr->tval < j_ptr->tval) continue;
1892
1893                 /* Objects sort by increasing sval */
1894                 if (o_ptr->sval < j_ptr->sval) break;
1895                 if (o_ptr->sval > j_ptr->sval) continue;
1896
1897                 /*
1898                  * Hack:  otherwise identical rods sort by
1899                  * increasing recharge time --dsb
1900                  */
1901                 if (o_ptr->tval == TV_ROD)
1902                 {
1903                         if (o_ptr->pval < j_ptr->pval) break;
1904                         if (o_ptr->pval > j_ptr->pval) continue;
1905                 }
1906
1907                 /* Evaluate that slot */
1908                 j_value = object_value(j_ptr);
1909
1910                 /* Objects sort by decreasing value */
1911                 if (value > j_value) break;
1912                 if (value < j_value) continue;
1913         }
1914
1915         /* Slide the others up */
1916         for (i = st_ptr->stock_num; i > slot; i--)
1917         {
1918                 st_ptr->stock[i] = st_ptr->stock[i-1];
1919         }
1920
1921         /* More stuff now */
1922         st_ptr->stock_num++;
1923
1924         /* Insert the new item */
1925         st_ptr->stock[slot] = *o_ptr;
1926
1927         /* Return the location */
1928         return (slot);
1929 }
1930
1931
1932 /*!
1933  * @brief Å¹ÊޤΥª¥Ö¥¸¥§¥¯¥È¿ô¤òÁý¤ä¤¹ /
1934  * Add the item "o_ptr" to a real stores inventory.
1935  * @param item Áý¤ä¤·¤¿¤¤¥¢¥¤¥Æ¥à¤ÎID
1936  * @param num Áý¤ä¤·¤¿¤¤¿ô
1937  * @return ¤Ê¤·
1938  * @details
1939  * <pre>
1940  * Increase, by a given amount, the number of a certain item
1941  * in a certain store.  This can result in zero items.
1942  * </pre>
1943  */
1944 static void store_item_increase(int item, int num)
1945 {
1946         int             cnt;
1947         object_type *o_ptr;
1948
1949         /* Get the item */
1950         o_ptr = &st_ptr->stock[item];
1951
1952         /* Verify the number */
1953         cnt = o_ptr->number + num;
1954         if (cnt > 255) cnt = 255;
1955         else if (cnt < 0) cnt = 0;
1956         num = cnt - o_ptr->number;
1957
1958         /* Save the new number */
1959         o_ptr->number += num;
1960 }
1961
1962
1963 /*!
1964  * @brief Å¹ÊޤΥª¥Ö¥¸¥§¥¯¥È¿ô¤òºï½ü¤¹¤ë /
1965  * Remove a slot if it is empty
1966  * @param item ºï½ü¤·¤¿¤¤¥¢¥¤¥Æ¥à¤ÎID
1967  * @return ¤Ê¤·
1968  */
1969 static void store_item_optimize(int item)
1970 {
1971         int             j;
1972         object_type *o_ptr;
1973
1974         /* Get the item */
1975         o_ptr = &st_ptr->stock[item];
1976
1977         /* Must exist */
1978         if (!o_ptr->k_idx) return;
1979
1980         /* Must have no items */
1981         if (o_ptr->number) return;
1982
1983         /* One less item */
1984         st_ptr->stock_num--;
1985
1986         /* Slide everyone */
1987         for (j = item; j < st_ptr->stock_num; j++)
1988         {
1989                 st_ptr->stock[j] = st_ptr->stock[j + 1];
1990         }
1991
1992         /* Nuke the final slot */
1993         object_wipe(&st_ptr->stock[j]);
1994 }
1995
1996 /*!
1997  * @brief ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍѤÎ̵²ÁÃÍÉʤÎÇÓ½üȽÄê /
1998  * This function will keep 'crap' out of the black market.
1999  * @param o_ptr È½Äꤷ¤¿¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
2000  * @return ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Ë¤È¤Ã¤Æ̵²ÁÃͤÊÉʤʤé¤ÐTRUE¤òÊÖ¤¹
2001  * @details
2002  * <pre>
2003  * Crap is defined as any item that is "available" elsewhere
2004  * Based on a suggestion by "Lee Vogt" <lvogt@cig.mcel.mot.com>
2005  * </pre>
2006  */
2007 static bool black_market_crap(object_type *o_ptr)
2008 {
2009         int     i, j;
2010
2011         /* Ego items are never crap */
2012         if (object_is_ego(o_ptr)) return (FALSE);
2013
2014         /* Good items are never crap */
2015         if (o_ptr->to_a > 0) return (FALSE);
2016         if (o_ptr->to_h > 0) return (FALSE);
2017         if (o_ptr->to_d > 0) return (FALSE);
2018
2019         /* Check all stores */
2020         for (i = 0; i < MAX_STORES; i++)
2021         {
2022                 if (i == STORE_HOME) continue;
2023                 if (i == STORE_MUSEUM) continue;
2024
2025                 /* Check every item in the store */
2026                 for (j = 0; j < town[p_ptr->town_num].store[i].stock_num; j++)
2027                 {
2028                         object_type *j_ptr = &town[p_ptr->town_num].store[i].stock[j];
2029
2030                         /* Duplicate item "type", assume crappy */
2031                         if (o_ptr->k_idx == j_ptr->k_idx) return (TRUE);
2032                 }
2033         }
2034
2035         /* Assume okay */
2036         return (FALSE);
2037 }
2038
2039
2040 /*!
2041  * @brief Å¹ÊÞ¤ÎÉÊ·¤¨ÊѲ½¤Î¤¿¤á¤Ë¥¢¥¤¥Æ¥à¤òºï½ü¤¹¤ë /
2042  * Attempt to delete (some of) a random item from the store
2043  * @return ¤Ê¤·
2044  * @details
2045  * <pre>
2046  * Hack -- we attempt to "maintain" piles of items when possible.
2047  * </pre>
2048  */
2049 static void store_delete(void)
2050 {
2051         int what, num;
2052
2053         /* Pick a random slot */
2054         what = randint0(st_ptr->stock_num);
2055
2056         /* Determine how many items are here */
2057         num = st_ptr->stock[what].number;
2058
2059         /* Hack -- sometimes, only destroy half the items */
2060         if (randint0(100) < 50) num = (num + 1) / 2;
2061
2062         /* Hack -- sometimes, only destroy a single item */
2063         if (randint0(100) < 50) num = 1;
2064
2065         /* Hack -- decrement the maximum timeouts and total charges of rods and wands. -LM- */
2066         if ((st_ptr->stock[what].tval == TV_ROD) || (st_ptr->stock[what].tval == TV_WAND))
2067         {
2068                 st_ptr->stock[what].pval -= num * st_ptr->stock[what].pval / st_ptr->stock[what].number;
2069         }
2070
2071         /* Actually destroy (part of) the item */
2072         store_item_increase(what, -num);
2073         store_item_optimize(what);
2074 }
2075
2076
2077 /*!
2078  * @brief Å¹ÊÞ¤ÎÉÊ·¤¨ÊѲ½¤Î¤¿¤á¤Ë¥¢¥¤¥Æ¥à¤òÄɲ乤ë /
2079  * Creates a random item and gives it to a store
2080  * @return ¤Ê¤·
2081  * @details
2082  * <pre>
2083  * This algorithm needs to be rethought.  A lot.
2084  * Currently, "normal" stores use a pre-built array.
2085  * Note -- the "level" given to "obj_get_num()" is a "favored"
2086  * level, that is, there is a much higher chance of getting
2087  * items with a level approaching that of the given level...
2088  * Should we check for "permission" to have the given item?
2089  * </pre>
2090  */
2091 static void store_create(void)
2092 {
2093         int i, tries, level;
2094
2095         object_type forge;
2096         object_type *q_ptr;
2097
2098
2099         /* Paranoia -- no room left */
2100         if (st_ptr->stock_num >= st_ptr->stock_size) return;
2101
2102
2103         /* Hack -- consider up to four items */
2104         for (tries = 0; tries < 4; tries++)
2105         {
2106                 /* Black Market */
2107                 if (cur_store_num == STORE_BLACK)
2108                 {
2109                         /* Pick a level for object/magic */
2110                         level = 25 + randint0(25);
2111
2112                         /* Random item (usually of given level) */
2113                         i = get_obj_num(level);
2114
2115                         /* Handle failure */
2116                         if (!i) continue;
2117                 }
2118
2119                 /* Normal Store */
2120                 else
2121                 {
2122                         /* Hack -- Pick an item to sell */
2123                         i = st_ptr->table[randint0(st_ptr->table_num)];
2124
2125                         /* Hack -- fake level for apply_magic() */
2126                         level = rand_range(1, STORE_OBJ_LEVEL);
2127                 }
2128
2129
2130                 /* Get local object */
2131                 q_ptr = &forge;
2132
2133                 /* Create a new object of the chosen kind */
2134                 object_prep(q_ptr, i);
2135
2136                 /* Apply some "low-level" magic (no artifacts) */
2137                 apply_magic(q_ptr, level, AM_NO_FIXED_ART);
2138
2139                 /* Require valid object */
2140                 if (!store_will_buy(q_ptr)) continue;
2141
2142                 /* Hack -- Charge lite's */
2143                 if (q_ptr->tval == TV_LITE)
2144                 {
2145                         if (q_ptr->sval == SV_LITE_TORCH) q_ptr->xtra4 = FUEL_TORCH / 2;
2146                         if (q_ptr->sval == SV_LITE_LANTERN) q_ptr->xtra4 = FUEL_LAMP / 2;
2147                 }
2148
2149
2150                 /* The item is "known" */
2151                 object_known(q_ptr);
2152
2153                 /* Mark it storebought */
2154                 q_ptr->ident |= IDENT_STORE;
2155
2156                 /* Mega-Hack -- no chests in stores */
2157                 if (q_ptr->tval == TV_CHEST) continue;
2158
2159                 /* Prune the black market */
2160                 if (cur_store_num == STORE_BLACK)
2161                 {
2162                         /* Hack -- No "crappy" items */
2163                         if (black_market_crap(q_ptr)) continue;
2164
2165                         /* Hack -- No "cheap" items */
2166                         if (object_value(q_ptr) < 10) continue;
2167
2168                         /* No "worthless" items */
2169                         /* if (object_value(q_ptr) <= 0) continue; */
2170                 }
2171
2172                 /* Prune normal stores */
2173                 else
2174                 {
2175                         /* No "worthless" items */
2176                         if (object_value(q_ptr) <= 0) continue;
2177                 }
2178
2179
2180                 /* Mass produce and/or Apply discount */
2181                 mass_produce(q_ptr);
2182
2183                 /* Attempt to carry the (known) item */
2184                 (void)store_carry(q_ptr);
2185
2186                 /* Definitely done */
2187                 break;
2188         }
2189 }
2190
2191
2192 /*!
2193  * @brief Å¹Êޤγä°úÂоݳ°¤Ë¤¹¤ë¤«¤É¤¦¤«¤òȽÄê /
2194  * Eliminate need to bargain if player has haggled well in the past
2195  * @param minprice ¥¢¥¤¥Æ¥à¤ÎºÇÄãÈÎÇä²Á³Ê
2196  * @return ³ä°ú¤ò¶Ø»ß¤¹¤ë¤Ê¤éTRUE¤òÊÖ¤¹¡£
2197  */
2198 static bool noneedtobargain(s32b minprice)
2199 {
2200         s32b good = st_ptr->good_buy;
2201         s32b bad = st_ptr->bad_buy;
2202
2203         /* Cheap items are "boring" */
2204         if (minprice < 10L) return (TRUE);
2205
2206         /* Perfect haggling */
2207         if (good == MAX_SHORT) return (TRUE);
2208
2209         /* Reward good haggles, punish bad haggles, notice price */
2210         if (good > ((3 * bad) + (5 + (minprice/50)))) return (TRUE);
2211
2212         /* Return the flag */
2213         return (FALSE);
2214 }
2215
2216
2217 /*!
2218  * @brief Å¹¼ç¤Î»ý¤Ä¥×¥ì¥¤¥ä¡¼¤ËÂФ¹¤ëÇäÇã¤ÎÎɤ·°­¤··Ð¸³¤òµ­²±¤¹¤ë /
2219  * Update the bargain info
2220  * @param price ¼ÂºÝ¤Î¼è°ú²Á³Ê
2221  * @param minprice Å¹¼ç¤ÎÄ󼨤·¤¿²Á³Ê
2222  * @param num ÇäÇã¿ô 
2223  * @return ¤Ê¤·
2224  */
2225 static void updatebargain(s32b price, s32b minprice, int num)
2226 {
2227         /* Hack -- auto-haggle */
2228         if (!manual_haggle) return;
2229
2230         /* Cheap items are "boring" */
2231         if ((minprice/num) < 10L) return;
2232
2233         /* Count the successful haggles */
2234         if (price == minprice)
2235         {
2236                 /* Just count the good haggles */
2237                 if (st_ptr->good_buy < MAX_SHORT)
2238                 {
2239                         st_ptr->good_buy++;
2240                 }
2241         }
2242
2243         /* Count the failed haggles */
2244         else
2245         {
2246                 /* Just count the bad haggles */
2247                 if (st_ptr->bad_buy < MAX_SHORT)
2248                 {
2249                         st_ptr->bad_buy++;
2250                 }
2251         }
2252 }
2253
2254
2255 /*!
2256  * @brief Å¹¤Î¾¦Éʥꥹ¥È¤òºÆɽ¼¨¤¹¤ë /
2257  * Re-displays a single store entry
2258  * @param pos É½¼¨¹Ô
2259  * @return ¤Ê¤·
2260  */
2261 static void display_entry(int pos)
2262 {
2263         int             i, cur_col;
2264         object_type     *o_ptr;
2265         s32b            x;
2266
2267         char            o_name[MAX_NLEN];
2268         char            out_val[160];
2269
2270
2271         int maxwid = 75;
2272
2273         /* Get the item */
2274         o_ptr = &st_ptr->stock[pos];
2275
2276         /* Get the "offset" */
2277         i = (pos % store_bottom);
2278
2279         /* Label it, clear the line --(-- */
2280         (void)sprintf(out_val, "%c) ", ((i > 25) ? toupper(I2A(i - 26)) : I2A(i)));
2281         prt(out_val, i+6, 0);
2282
2283         cur_col = 3;
2284         if (show_item_graph)
2285         {
2286                 byte a = object_attr(o_ptr);
2287                 char c = object_char(o_ptr);
2288
2289 #ifdef AMIGA
2290                 if (a & 0x80)
2291                         a |= 0x40;
2292 #endif
2293
2294                 Term_queue_bigchar(cur_col, i + 6, a, c, 0, 0);
2295                 if (use_bigtile) cur_col++;
2296
2297                 cur_col += 2;
2298         }
2299
2300         /* Describe an item in the home */
2301         if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
2302         {
2303                 maxwid = 75;
2304
2305                 /* Leave room for weights, if necessary -DRS- */
2306                 if (show_weights) maxwid -= 10;
2307
2308                 /* Describe the object */
2309                 object_desc(o_name, o_ptr, 0);
2310                 o_name[maxwid] = '\0';
2311                 c_put_str(tval_to_attr[o_ptr->tval], o_name, i+6, cur_col);
2312
2313                 /* Show weights */
2314                 if (show_weights)
2315                 {
2316                         /* Only show the weight of an individual item */
2317                         int wgt = o_ptr->weight;
2318 #ifdef JP
2319                         sprintf(out_val, "%3d.%1d kg", lbtokg1(wgt) , lbtokg2(wgt) );
2320                         put_str(out_val, i+6, 67);
2321 #else
2322                         (void)sprintf(out_val, "%3d.%d lb", wgt / 10, wgt % 10);
2323                         put_str(out_val, i+6, 68);
2324 #endif
2325
2326                 }
2327         }
2328
2329         /* Describe an item (fully) in a store */
2330         else
2331         {
2332                 /* Must leave room for the "price" */
2333                 maxwid = 65;
2334
2335                 /* Leave room for weights, if necessary -DRS- */
2336                 if (show_weights) maxwid -= 7;
2337
2338                 /* Describe the object (fully) */
2339                 object_desc(o_name, o_ptr, 0);
2340                 o_name[maxwid] = '\0';
2341                 c_put_str(tval_to_attr[o_ptr->tval], o_name, i+6, cur_col);
2342
2343                 /* Show weights */
2344                 if (show_weights)
2345                 {
2346                         /* Only show the weight of an individual item */
2347                         int wgt = o_ptr->weight;
2348 #ifdef JP
2349                         sprintf(out_val, "%3d.%1d", lbtokg1(wgt) , lbtokg2(wgt) );
2350                         put_str(out_val, i+6, 60);
2351 #else
2352                         (void)sprintf(out_val, "%3d.%d", wgt / 10, wgt % 10);
2353                         put_str(out_val, i+6, 61);
2354 #endif
2355
2356                 }
2357
2358                 /* Display a "fixed" cost */
2359                 if (o_ptr->ident & (IDENT_FIXED))
2360                 {
2361                         /* Extract the "minimum" price */
2362                         x = price_item(o_ptr, ot_ptr->min_inflate, FALSE);
2363
2364                         /* Actually draw the price (not fixed) */
2365 #ifdef JP
2366 (void)sprintf(out_val, "%9ld¸Ç", (long)x);
2367 #else
2368                         (void)sprintf(out_val, "%9ld F", (long)x);
2369 #endif
2370
2371                         put_str(out_val, i+6, 68);
2372                 }
2373
2374                 /* Display a "taxed" cost */
2375                 else if (!manual_haggle)
2376                 {
2377                         /* Extract the "minimum" price */
2378                         x = price_item(o_ptr, ot_ptr->min_inflate, FALSE);
2379
2380                         /* Hack -- Apply Sales Tax if needed */
2381                         if (!noneedtobargain(x)) x += x / 10;
2382
2383                         /* Actually draw the price (with tax) */
2384                         (void)sprintf(out_val, "%9ld  ", (long)x);
2385                         put_str(out_val, i+6, 68);
2386                 }
2387
2388                 /* Display a "haggle" cost */
2389                 else
2390                 {
2391                         /* Extrect the "maximum" price */
2392                         x = price_item(o_ptr, ot_ptr->max_inflate, FALSE);
2393
2394                         /* Actually draw the price (not fixed) */
2395                         (void)sprintf(out_val, "%9ld  ", (long)x);
2396                         put_str(out_val, i+6, 68);
2397                 }
2398         }
2399 }
2400
2401
2402 /*!
2403  * @brief Å¹¤Î¾¦Éʥꥹ¥È¤òɽ¼¨¤¹¤ë /
2404  * Displays a store's inventory                 -RAK-
2405  * @return ¤Ê¤·
2406  * @details
2407  * All prices are listed as "per individual object".  -BEN-
2408  */
2409 static void display_inventory(void)
2410 {
2411         int i, k;
2412
2413         /* Display the next 12 items */
2414         for (k = 0; k < store_bottom; k++)
2415         {
2416                 /* Do not display "dead" items */
2417                 if (store_top + k >= st_ptr->stock_num) break;
2418
2419                 /* Display that line */
2420                 display_entry(store_top + k);
2421         }
2422
2423         /* Erase the extra lines and the "more" prompt */
2424         for (i = k; i < store_bottom + 1; i++) prt("", i + 6, 0);
2425
2426         /* Assume "no current page" */
2427 #ifdef JP
2428         put_str("          ", 5, 20);
2429 #else
2430         put_str("        ", 5, 20);
2431 #endif
2432
2433
2434         /* Visual reminder of "more items" */
2435         if (st_ptr->stock_num > store_bottom)
2436         {
2437                 /* Show "more" reminder (after the last item) */
2438 #ifdef JP
2439                 prt("-³¤¯-", k + 6, 3);
2440 #else
2441                 prt("-more-", k + 6, 3);
2442 #endif
2443
2444
2445                 /* Indicate the "current page" */
2446                 /* Trailing spaces are to display (Page xx) and (Page x) */
2447 #ifdef JP
2448                 put_str(format("(%d¥Ú¡¼¥¸)  ", store_top/store_bottom + 1), 5, 20);
2449 #else
2450                 put_str(format("(Page %d)  ", store_top/store_bottom + 1), 5, 20);
2451 #endif
2452
2453         }
2454
2455         if (cur_store_num == STORE_HOME || cur_store_num == STORE_MUSEUM)
2456         {
2457                 k = st_ptr->stock_size;
2458
2459                 if (cur_store_num == STORE_HOME && !powerup_home) k /= 10;
2460 #ifdef JP
2461                 put_str(format("¥¢¥¤¥Æ¥à¿ô:  %4d/%4d", st_ptr->stock_num, k), 19 + xtra_stock, 27);
2462 #else
2463                 put_str(format("Objects:  %4d/%4d", st_ptr->stock_num, k), 19 + xtra_stock, 30);
2464 #endif
2465         }
2466 }
2467
2468
2469 /*!
2470  * @brief ¥×¥ì¥¤¥ä¡¼¤Î½ê»ý¶â¤òɽ¼¨¤¹¤ë /
2471  * Displays players gold                                        -RAK-
2472  * @return ¤Ê¤·
2473  * @details
2474  */
2475 static void store_prt_gold(void)
2476 {
2477         char out_val[64];
2478
2479 #ifdef JP
2480         prt("¼ê»ý¤Á¤Î¤ª¶â: ", 19 + xtra_stock, 53);
2481 #else
2482         prt("Gold Remaining: ", 19 + xtra_stock, 53);
2483 #endif
2484
2485
2486         sprintf(out_val, "%9ld", (long)p_ptr->au);
2487         prt(out_val, 19 + xtra_stock, 68);
2488 }
2489
2490 /*!
2491  * @brief Å¹ÊÞ¾ðÊóÁ´ÂΤòɽ¼¨¤¹¤ë¥á¥¤¥ó¥ë¡¼¥Á¥ó /
2492  * Displays store (after clearing screen)               -RAK-
2493  * @return ¤Ê¤·
2494  * @details
2495  */
2496 static void display_store(void)
2497 {
2498         char buf[80];
2499
2500
2501         /* Clear screen */
2502         Term_clear();
2503
2504         /* The "Home" is special */
2505         if (cur_store_num == STORE_HOME)
2506         {
2507                 /* Put the owner name */
2508 #ifdef JP
2509                 put_str("²æ¤¬²È", 3, 31);
2510 #else
2511                 put_str("Your Home", 3, 30);
2512 #endif
2513
2514
2515                 /* Label the item descriptions */
2516 #ifdef JP
2517                 put_str("¥¢¥¤¥Æ¥à¤Î°ìÍ÷", 5, 4);
2518 #else
2519                 put_str("Item Description", 5, 3);
2520 #endif
2521
2522
2523                 /* If showing weights, show label */
2524                 if (show_weights)
2525                 {
2526 #ifdef JP
2527                         put_str("½Å¤µ", 5, 72);
2528 #else
2529                         put_str("Weight", 5, 70);
2530 #endif
2531
2532                 }
2533         }
2534
2535         /* The "Home" is special */
2536         else if (cur_store_num == STORE_MUSEUM)
2537         {
2538                 /* Put the owner name */
2539 #ifdef JP
2540                 put_str("Çîʪ´Û", 3, 31);
2541 #else
2542                 put_str("Museum", 3, 30);
2543 #endif
2544
2545
2546                 /* Label the item descriptions */
2547 #ifdef JP
2548                 put_str("¥¢¥¤¥Æ¥à¤Î°ìÍ÷", 5, 4);
2549 #else
2550                 put_str("Item Description", 5, 3);
2551 #endif
2552
2553
2554                 /* If showing weights, show label */
2555                 if (show_weights)
2556                 {
2557 #ifdef JP
2558                         put_str("½Å¤µ", 5, 72);
2559 #else
2560                         put_str("Weight", 5, 70);
2561 #endif
2562
2563                 }
2564         }
2565
2566         /* Normal stores */
2567         else
2568         {
2569                 cptr store_name = (f_name + f_info[cur_store_feat].name);
2570                 cptr owner_name = (ot_ptr->owner_name);
2571                 cptr race_name = race_info[ot_ptr->owner_race].title;
2572
2573                 /* Put the owner name and race */
2574                 sprintf(buf, "%s (%s)", owner_name, race_name);
2575                 put_str(buf, 3, 10);
2576
2577                 /* Show the max price in the store (above prices) */
2578                 sprintf(buf, "%s (%ld)", store_name, (long)(ot_ptr->max_cost));
2579                 prt(buf, 3, 50);
2580
2581                 /* Label the item descriptions */
2582 #ifdef JP
2583                 put_str("¾¦ÉʤΰìÍ÷", 5, 7);
2584 #else
2585                 put_str("Item Description", 5, 3);
2586 #endif
2587
2588
2589                 /* If showing weights, show label */
2590                 if (show_weights)
2591                 {
2592 #ifdef JP
2593                         put_str("½Å¤µ", 5, 62);
2594 #else
2595                         put_str("Weight", 5, 60);
2596 #endif
2597
2598                 }
2599
2600                 /* Label the asking price (in stores) */
2601 #ifdef JP
2602                 put_str("²Á³Ê", 5, 73);
2603 #else
2604                 put_str("Price", 5, 72);
2605 #endif
2606
2607         }
2608
2609         /* Display the current gold */
2610         store_prt_gold();
2611
2612         /* Draw in the inventory */
2613         display_inventory();
2614 }
2615
2616
2617
2618 /*!
2619  * @brief Å¹ÊÞ¤«¤é¥¢¥¤¥Æ¥à¤òÁªÂò¤¹¤ë /
2620  * Get the ID of a store item and return its value      -RAK-
2621  * @param com_val ÁªÂòID¤òÊÖ¤¹»²¾È¥Ý¥¤¥ó¥¿
2622  * @param pmt ¥á¥Ã¥»¡¼¥¸¥­¥ã¥×¥·¥ç¥ó
2623  * @param i ÁªÂòÈϰϤκǾ®ÃÍ
2624  * @param j ÁªÂòÈϰϤκÇÂçÃÍ
2625  * @return ¼ÂºÝ¤ËÁªÂò¤·¤¿¤éTRUE¡¢¥­¥ã¥ó¥»¥ë¤·¤¿¤éFALSE
2626  */
2627 static int get_stock(int *com_val, cptr pmt, int i, int j)
2628 {
2629         char    command;
2630         char    out_val[160];
2631         char    lo, hi;
2632
2633 #ifdef ALLOW_REPEAT /* TNB */
2634
2635         /* Get the item index */
2636         if (repeat_pull(com_val))
2637         {
2638                 /* Verify the item */
2639                 if ((*com_val >= i) && (*com_val <= j))
2640                 {
2641                         /* Success */
2642                         return (TRUE);
2643                 }
2644         }
2645
2646 #endif /* ALLOW_REPEAT -- TNB */
2647
2648         /* Paranoia XXX XXX XXX */
2649         msg_print(NULL);
2650
2651
2652         /* Assume failure */
2653         *com_val = (-1);
2654
2655         /* Build the prompt */
2656         lo = I2A(i);
2657         hi = (j > 25) ? toupper(I2A(j - 26)) : I2A(j);
2658 #ifdef JP
2659         (void)sprintf(out_val, "(%s:%c-%c, ESC¤ÇÃæÃÇ) %s",
2660                 (((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) ? "¥¢¥¤¥Æ¥à" : "¾¦ÉÊ"), 
2661                                   lo, hi, pmt);
2662 #else
2663         (void)sprintf(out_val, "(Items %c-%c, ESC to exit) %s",
2664                                   lo, hi, pmt);
2665 #endif
2666
2667
2668         /* Ask until done */
2669         while (TRUE)
2670         {
2671                 int k;
2672
2673                 /* Escape */
2674                 if (!get_com(out_val, &command, FALSE)) break;
2675
2676                 /* Convert */
2677                 if (islower(command))
2678                         k = A2I(command);
2679                 else if (isupper(command))
2680                         k = A2I(tolower(command)) + 26;
2681                 else
2682                         k = -1;
2683
2684                 /* Legal responses */
2685                 if ((k >= i) && (k <= j))
2686                 {
2687                         *com_val = k;
2688                         break;
2689                 }
2690
2691                 /* Oops */
2692                 bell();
2693         }
2694
2695         /* Clear the prompt */
2696         prt("", 0, 0);
2697
2698         /* Cancel */
2699         if (command == ESCAPE) return (FALSE);
2700
2701 #ifdef ALLOW_REPEAT /* TNB */
2702
2703         repeat_push(*com_val);
2704
2705 #endif /* ALLOW_REPEAT -- TNB */
2706
2707         /* Success */
2708         return (TRUE);
2709 }
2710
2711
2712 /*!
2713  * @brief Å¹¼ç¤ÎÉÔËþÅÙ¤òÁý¤ä¤·¡¢¥×¥ì¥¤¥ä¡¼¤òÄù¤á½Ð¤¹È½Äê¤È½èÍý¤ò¹Ô¤¦ /
2714  * Increase the insult counter and get angry if too many -RAK-
2715  * @return ¥×¥ì¥¤¥ä¡¼¤òÄù¤á½Ð¤¹¾ì¹çTRUE¤òÊÖ¤¹
2716  */
2717 static int increase_insults(void)
2718 {
2719         /* Increase insults */
2720         st_ptr->insult_cur++;
2721
2722         /* Become insulted */
2723         if (st_ptr->insult_cur > ot_ptr->insult_max)
2724         {
2725                 /* Complain */
2726                 say_comment_4();
2727
2728                 /* Reset insults */
2729                 st_ptr->insult_cur = 0;
2730                 st_ptr->good_buy = 0;
2731                 st_ptr->bad_buy = 0;
2732
2733                 /* Open tomorrow */
2734                 st_ptr->store_open = turn + TURNS_PER_TICK*TOWN_DAWN/8 + randint1(TURNS_PER_TICK*TOWN_DAWN/8);
2735
2736                 /* Closed */
2737                 return (TRUE);
2738         }
2739
2740         /* Not closed */
2741         return (FALSE);
2742 }
2743
2744
2745 /*!
2746  * @brief Å¹¼ç¤ÎÉÔËþÅÙ¤ò¸º¤é¤¹ /
2747  * Decrease insults                             -RAK-
2748  * @return ¥×¥ì¥¤¥ä¡¼¤òÄù¤á½Ð¤¹¾ì¹çTRUE¤òÊÖ¤¹
2749  */
2750 static void decrease_insults(void)
2751 {
2752         /* Decrease insults */
2753         if (st_ptr->insult_cur) st_ptr->insult_cur--;
2754 }
2755
2756
2757 /*!
2758  * @brief Å¹¼ç¤ÎÉÔËþÅÙ¤¬Áý¤¨¤¿¾ì¹ç¤Î¤ß¤Î¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë /
2759  * Have insulted while haggling                         -RAK-
2760  * @return ¥×¥ì¥¤¥ä¡¼¤òÄù¤á½Ð¤¹¾ì¹çTRUE¤òÊÖ¤¹
2761  */
2762 static int haggle_insults(void)
2763 {
2764         /* Increase insults */
2765         if (increase_insults()) return (TRUE);
2766
2767         /* Display and flush insult */
2768         say_comment_5();
2769
2770         /* Still okay */
2771         return (FALSE);
2772 }
2773
2774
2775 /*
2776  * Mega-Hack -- Enable "increments"
2777  */
2778 static bool allow_inc = FALSE;
2779
2780 /*
2781  * Mega-Hack -- Last "increment" during haggling
2782  */
2783 static s32b last_inc = 0L;
2784
2785
2786 /*!
2787  * @brief ¸ò¾Ä²Á³Ê¤ò³Îǧ¤Èǧ¾Ú¤ÎÀ§Èó¤ò¹Ô¤¦ /
2788  * Get a haggle
2789  * @param pmt ¥á¥Ã¥»¡¼¥¸
2790  * @param poffer ÊÌÅÓ²Á³ÊÄ󼨤ò¤·¤¿¾ì¹ç¤ÎÃͤòÊÖ¤¹»²¾È¥Ý¥¤¥ó¥¿
2791  * @param price ¸½ºß¤Î¸ò¾Ä²Á³Ê
2792  * @param final ºÇ½ª³ÎÄê²Á³Ê¤Ê¤é¤ÐTRUE
2793  * @return ¥×¥ì¥¤¥ä¡¼¤òÄù¤á½Ð¤¹¾ì¹çTRUE¤òÊÖ¤¹
2794  */
2795 static int get_haggle(cptr pmt, s32b *poffer, s32b price, int final)
2796 {
2797         s32b            i;
2798
2799         cptr            p;
2800
2801         char                            buf[128];
2802         char            out_val[160];
2803
2804
2805         /* Clear old increment if necessary */
2806         if (!allow_inc) last_inc = 0L;
2807
2808
2809         /* Final offer */
2810         if (final)
2811         {
2812 #ifdef JP
2813                 sprintf(buf, "%s [¾µÂú] ", pmt);
2814 #else
2815                 sprintf(buf, "%s [accept] ", pmt);
2816 #endif
2817
2818         }
2819
2820         /* Old (negative) increment, and not final */
2821         else if (last_inc < 0)
2822         {
2823 #ifdef JP
2824                 sprintf(buf, "%s [-$%ld] ", pmt, (long)(ABS(last_inc)));
2825 #else
2826                 sprintf(buf, "%s [-%ld] ", pmt, (long)(ABS(last_inc)));
2827 #endif
2828
2829         }
2830
2831         /* Old (positive) increment, and not final */
2832         else if (last_inc > 0)
2833         {
2834 #ifdef JP
2835                 sprintf(buf, "%s [+$%ld] ", pmt, (long)(ABS(last_inc)));
2836 #else
2837                 sprintf(buf, "%s [+%ld] ", pmt, (long)(ABS(last_inc)));
2838 #endif
2839
2840         }
2841
2842         /* Normal haggle */
2843         else
2844         {
2845                 sprintf(buf, "%s ", pmt);
2846         }
2847
2848
2849         /* Paranoia XXX XXX XXX */
2850         msg_print(NULL);
2851
2852
2853         /* Ask until done */
2854         while (TRUE)
2855         {
2856                 bool res;
2857
2858                 /* Display prompt */
2859                 prt(buf, 0, 0);
2860
2861                 /* Default */
2862                 strcpy(out_val, "");
2863
2864                 /*
2865                  * Ask the user for a response.
2866                  * Don't allow to use numpad as cursor key.
2867                  */
2868                 res = askfor_aux(out_val, 32, FALSE);
2869
2870                 /* Clear prompt */
2871                 prt("", 0, 0);
2872
2873                 /* Cancelled */
2874                 if (!res) return FALSE;
2875
2876                 /* Skip leading spaces */
2877                 for (p = out_val; *p == ' '; p++) /* loop */;
2878
2879                 /* Empty response */
2880                 if (*p == '\0')
2881                 {
2882                         /* Accept current price */
2883                         if (final)
2884                         {
2885                                 *poffer = price;
2886                                 last_inc = 0L;
2887                                 break;
2888                         }
2889
2890                         /* Use previous increment */
2891                         if (allow_inc && last_inc)
2892                         {
2893                                 *poffer += last_inc;
2894                                 break;
2895                         }
2896                 }
2897
2898                 /* Normal response */
2899                 else
2900                 {
2901                         /* Extract a number */
2902                         i = atol(p);
2903
2904                         /* Handle "incremental" number */
2905                         if ((*p == '+' || *p == '-'))
2906                         {
2907                                 /* Allow increments */
2908                                 if (allow_inc)
2909                                 {
2910                                         /* Use the given "increment" */
2911                                         *poffer += i;
2912                                         last_inc = i;
2913                                         break;
2914                                 }
2915                         }
2916
2917                         /* Handle normal number */
2918                         else
2919                         {
2920                                 /* Use the given "number" */
2921                                 *poffer = i;
2922                                 last_inc = 0L;
2923                                 break;
2924                         }
2925                 }
2926
2927                 /* Warning */
2928 #ifdef JP
2929                 msg_print("Ãͤ¬¤ª¤«¤·¤¤¤Ç¤¹¡£");
2930 #else
2931                 msg_print("Invalid response.");
2932 #endif
2933
2934                 msg_print(NULL);
2935         }
2936
2937         /* Success */
2938         return (TRUE);
2939 }
2940
2941
2942 /*!
2943  * @brief Å¹¼ç¤¬¥×¥ì¥¤¥ä¡¼¤«¤é¤Î¸ò¾Ä²Á³Ê¤òȽÃǤ¹¤ë /
2944  * Receive an offer (from the player)
2945  * @param pmt ¥á¥Ã¥»¡¼¥¸
2946  * @param poffer Å¹¼ç¤«¤é¤Î¸ò¾Ä²Á³Ê¤òÊÖ¤¹»²¾È¥Ý¥¤¥ó¥¿
2947  * @param last_offer ¸½ºß¤Î¸ò¾Ä²Á³Ê
2948  * @param factor Å¹¼ç¤Î²Á³Ê´ð½àÇÜΨ
2949  * @param price ¥¢¥¤¥Æ¥à¤Î¼Â²ÁÃÍ
2950  * @param final ºÇ½ª²Á³Ê³ÎÄê¤Ê¤é¤ÐTRUE
2951  * @return ¥×¥ì¥¤¥ä¡¼¤Î²Á³Ê¤ËÂФ·¤ÆÉÔÉþ¤Ê¤é¤ÐTRUE¤òÊÖ¤¹ /
2952  * Return TRUE if offer is NOT okay
2953  */
2954 static bool receive_offer(cptr pmt, s32b *poffer,
2955                           s32b last_offer, int factor,
2956                           s32b price, int final)
2957 {
2958         /* Haggle till done */
2959         while (TRUE)
2960         {
2961                 /* Get a haggle (or cancel) */
2962                 if (!get_haggle(pmt, poffer, price, final)) return (TRUE);
2963
2964                 /* Acceptable offer */
2965                 if (((*poffer) * factor) >= (last_offer * factor)) break;
2966
2967                 /* Insult, and check for kicked out */
2968                 if (haggle_insults()) return (TRUE);
2969
2970                 /* Reject offer (correctly) */
2971                 (*poffer) = last_offer;
2972         }
2973
2974         /* Success */
2975         return (FALSE);
2976 }
2977
2978
2979 /*!
2980  * @brief ¥×¥ì¥¤¥ä¡¼¤¬¹ØÆþ¤¹¤ë»þ¤ÎÃÍÀÚ¤ê½èÍý¥á¥¤¥ó¥ë¡¼¥Á¥ó /
2981  * Haggling routine                             -RAK-
2982  * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
2983  * @param price ºÇ½ª²Á³Ê¤òÊÖ¤¹»²¾È¥Ý¥¤¥ó¥¿
2984  * @return ¥×¥ì¥¤¥ä¡¼¤Î²Á³Ê¤ËÂФ·¤ÆŹ¼ç¤¬ÉÔÉþ¤Ê¤é¤ÐTRUE¤òÊÖ¤¹ /
2985  * Return TRUE if purchase is NOT successful
2986  */
2987 static bool purchase_haggle(object_type *o_ptr, s32b *price)
2988 {
2989         s32b                       cur_ask, final_ask;
2990         s32b                       last_offer, offer;
2991         s32b                       x1, x2, x3;
2992         s32b                       min_per, max_per;
2993         int                        flag, loop_flag, noneed;
2994         int                        annoyed = 0, final = FALSE;
2995
2996         bool            cancel = FALSE;
2997
2998 #ifdef JP
2999         cptr pmt = "Ä󼨲Á³Ê";
3000 #else
3001         cptr            pmt = "Asking";
3002 #endif
3003
3004
3005         char            out_val[160];
3006
3007
3008         *price = 0;
3009
3010
3011         /* Extract the starting offer and the final offer */
3012         cur_ask = price_item(o_ptr, ot_ptr->max_inflate, FALSE);
3013         final_ask = price_item(o_ptr, ot_ptr->min_inflate, FALSE);
3014
3015         /* Determine if haggling is necessary */
3016         noneed = noneedtobargain(final_ask);
3017
3018         /* No need to haggle */
3019         if (noneed || !manual_haggle)
3020         {
3021                 /* No need to haggle */
3022                 if (noneed)
3023                 {
3024                         /* Message summary */
3025 #ifdef JP
3026                         msg_print("·ë¶É¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
3027 #else
3028                         msg_print("You eventually agree upon the price.");
3029 #endif
3030
3031                         msg_print(NULL);
3032                 }
3033
3034                 /* No haggle option */
3035                 else
3036                 {
3037                         /* Message summary */
3038 #ifdef JP
3039                         msg_print("¤¹¤ó¤Ê¤ê¤È¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
3040 #else
3041                         msg_print("You quickly agree upon the price.");
3042 #endif
3043
3044                         msg_print(NULL);
3045
3046                         /* Apply Sales Tax */
3047                         final_ask += final_ask / 10;
3048                 }
3049
3050                 /* Final price */
3051                 cur_ask = final_ask;
3052
3053                 /* Go to final offer */
3054 #ifdef JP
3055                 pmt = "ºÇ½ªÄ󼨲Á³Ê";
3056 #else
3057                 pmt = "Final Offer";
3058 #endif
3059
3060                 final = TRUE;
3061         }
3062
3063
3064         /* Haggle for the whole pile */
3065         cur_ask *= o_ptr->number;
3066         final_ask *= o_ptr->number;
3067
3068
3069         /* Haggle parameters */
3070         min_per = ot_ptr->haggle_per;
3071         max_per = min_per * 3;
3072
3073         /* Mega-Hack -- artificial "last offer" value */
3074         last_offer = object_value(o_ptr) * o_ptr->number;
3075         last_offer = last_offer * (200 - (int)(ot_ptr->max_inflate)) / 100L;
3076         if (last_offer <= 0) last_offer = 1;
3077
3078         /* No offer yet */
3079         offer = 0;
3080
3081         /* No incremental haggling yet */
3082         allow_inc = FALSE;
3083
3084         /* Haggle until done */
3085         for (flag = FALSE; !flag; )
3086         {
3087                 loop_flag = TRUE;
3088
3089                 while (!flag && loop_flag)
3090                 {
3091                         (void)sprintf(out_val, "%s :  %ld", pmt, (long)cur_ask);
3092                         put_str(out_val, 1, 0);
3093 #ifdef JP
3094                         cancel = receive_offer("Ä󼨤¹¤ë¶â³Û? ",
3095 #else
3096                         cancel = receive_offer("What do you offer? ",
3097 #endif
3098
3099                                                &offer, last_offer, 1, cur_ask, final);
3100
3101                         if (cancel)
3102                         {
3103                                 flag = TRUE;
3104                         }
3105                         else if (offer > cur_ask)
3106                         {
3107                                 say_comment_6();
3108                                 offer = last_offer;
3109                         }
3110                         else if (offer == cur_ask)
3111                         {
3112                                 flag = TRUE;
3113                                 *price = offer;
3114                         }
3115                         else
3116                         {
3117                                 loop_flag = FALSE;
3118                         }
3119                 }
3120
3121                 if (!flag)
3122                 {
3123                         x1 = 100 * (offer - last_offer) / (cur_ask - last_offer);
3124                         if (x1 < min_per)
3125                         {
3126                                 if (haggle_insults())
3127                                 {
3128                                         flag = TRUE;
3129                                         cancel = TRUE;
3130                                 }
3131                         }
3132                         else if (x1 > max_per)
3133                         {
3134                                 x1 = x1 * 3 / 4;
3135                                 if (x1 < max_per) x1 = max_per;
3136                         }
3137                         x2 = rand_range(x1-2, x1+2);
3138                         x3 = ((cur_ask - offer) * x2 / 100L) + 1;
3139                         /* don't let the price go up */
3140                         if (x3 < 0) x3 = 0;
3141                         cur_ask -= x3;
3142
3143                         /* Too little */
3144                         if (cur_ask < final_ask)
3145                         {
3146                                 final = TRUE;
3147                                 cur_ask = final_ask;
3148 #ifdef JP
3149                                 pmt = "ºÇ½ªÄ󼨲Á³Ê";
3150 #else
3151                                 pmt = "Final Offer";
3152 #endif
3153
3154                                 annoyed++;
3155                                 if (annoyed > 3)
3156                                 {
3157                                         (void)(increase_insults());
3158                                         cancel = TRUE;
3159                                         flag = TRUE;
3160                                 }
3161                         }
3162                         else if (offer >= cur_ask)
3163                         {
3164                                 flag = TRUE;
3165                                 *price = offer;
3166                         }
3167
3168                         if (!flag)
3169                         {
3170                                 last_offer = offer;
3171                                 allow_inc = TRUE;
3172                                 prt("", 1, 0);
3173 #ifdef JP
3174 (void)sprintf(out_val, "Á°²ó¤ÎÄ󼨶â³Û: $%ld",
3175 #else
3176                                 (void)sprintf(out_val, "Your last offer: %ld",
3177 #endif
3178
3179                                                           (long)last_offer);
3180                                 put_str(out_val, 1, 39);
3181                                 say_comment_2(cur_ask, annoyed);
3182                         }
3183                 }
3184         }
3185
3186         /* Cancel */
3187         if (cancel) return (TRUE);
3188
3189         /* Update bargaining info */
3190         updatebargain(*price, final_ask, o_ptr->number);
3191
3192         /* Do not cancel */
3193         return (FALSE);
3194 }
3195
3196
3197 /*!
3198  * @brief ¥×¥ì¥¤¥ä¡¼¤¬ÇäµÑ¤¹¤ë»þ¤ÎÃÍÀÚ¤ê½èÍý¥á¥¤¥ó¥ë¡¼¥Á¥ó /
3199  * Haggling routine                             -RAK-
3200  * @param o_ptr ¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
3201  * @param price ºÇ½ª²Á³Ê¤òÊÖ¤¹»²¾È¥Ý¥¤¥ó¥¿
3202  * @return ¥×¥ì¥¤¥ä¡¼¤Î²Á³Ê¤ËÂФ·¤ÆŹ¼ç¤¬ÉÔÉþ¤Ê¤é¤ÐTRUE¤òÊÖ¤¹ /
3203  * Return TRUE if purchase is NOT successful
3204  */
3205 static bool sell_haggle(object_type *o_ptr, s32b *price)
3206 {
3207         s32b    purse, cur_ask, final_ask;
3208         s32b    last_offer = 0, offer = 0;
3209         s32b    x1, x2, x3;
3210         s32b    min_per, max_per;
3211         int     flag, loop_flag, noneed;
3212         int     annoyed = 0, final = FALSE;
3213         bool    cancel = FALSE;
3214 #ifdef JP
3215         cptr pmt = "Ä󼨶â³Û";
3216 #else
3217         cptr    pmt = "Offer";
3218 #endif
3219
3220         char    out_val[160];
3221
3222
3223         *price = 0;
3224
3225
3226         /* Obtain the starting offer and the final offer */
3227         cur_ask = price_item(o_ptr, ot_ptr->max_inflate, TRUE);
3228         final_ask = price_item(o_ptr, ot_ptr->min_inflate, TRUE);
3229
3230         /* Determine if haggling is necessary */
3231         noneed = noneedtobargain(final_ask);
3232
3233         /* Get the owner's payout limit */
3234         purse = (s32b)(ot_ptr->max_cost);
3235
3236         /* No need to haggle */
3237         if (noneed || !manual_haggle || (final_ask >= purse))
3238         {
3239                 /* Apply Sales Tax (if needed) */
3240                 if (!manual_haggle && !noneed)
3241                 {
3242                         final_ask -= final_ask / 10;
3243                 }
3244
3245                 /* No reason to haggle */
3246                 if (final_ask >= purse)
3247                 {
3248                         /* Message */
3249 #ifdef JP
3250                         msg_print("¨ºÂ¤Ë¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
3251 #else
3252                         msg_print("You instantly agree upon the price.");
3253 #endif
3254
3255                         msg_print(NULL);
3256
3257                         /* Offer full purse */
3258                         final_ask = purse;
3259                 }
3260
3261                 /* No need to haggle */
3262                 else if (noneed)
3263                 {
3264                         /* Message */
3265 #ifdef JP
3266                         msg_print("·ë¶É¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
3267 #else
3268                         msg_print("You eventually agree upon the price.");
3269 #endif
3270
3271                         msg_print(NULL);
3272                 }
3273
3274                 /* No haggle option */
3275                 else
3276                 {
3277                         /* Message summary */
3278 #ifdef JP
3279                         msg_print("¤¹¤ó¤Ê¤ê¤È¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
3280 #else
3281                         msg_print("You quickly agree upon the price.");
3282 #endif
3283
3284                         msg_print(NULL);
3285                 }
3286
3287                 /* Final price */
3288                 cur_ask = final_ask;
3289
3290                 /* Final offer */
3291                 final = TRUE;
3292 #ifdef JP
3293                 pmt = "ºÇ½ªÄ󼨶â³Û";
3294 #else
3295                 pmt = "Final Offer";
3296 #endif
3297
3298         }
3299
3300         /* Haggle for the whole pile */
3301         cur_ask *= o_ptr->number;
3302         final_ask *= o_ptr->number;
3303
3304
3305         /* XXX XXX XXX Display commands */
3306
3307         /* Haggling parameters */
3308         min_per = ot_ptr->haggle_per;
3309         max_per = min_per * 3;
3310
3311         /* Mega-Hack -- artificial "last offer" value */
3312         last_offer = object_value(o_ptr) * o_ptr->number;
3313         last_offer = last_offer * ot_ptr->max_inflate / 100L;
3314
3315         /* No offer yet */
3316         offer = 0;
3317
3318         /* No incremental haggling yet */
3319         allow_inc = FALSE;
3320
3321         /* Haggle */
3322         for (flag = FALSE; !flag; )
3323         {
3324                 while (1)
3325                 {
3326                         loop_flag = TRUE;
3327
3328                         (void)sprintf(out_val, "%s :  %ld", pmt, (long)cur_ask);
3329                         put_str(out_val, 1, 0);
3330 #ifdef JP
3331                         cancel = receive_offer("Ä󼨤¹¤ë²Á³Ê? ",
3332 #else
3333                         cancel = receive_offer("What price do you ask? ",
3334 #endif
3335
3336                                                                    &offer, last_offer, -1, cur_ask, final);
3337
3338                         if (cancel)
3339                         {
3340                                 flag = TRUE;
3341                         }
3342                         else if (offer < cur_ask)
3343                         {
3344                                 say_comment_6();
3345                                 /* rejected, reset offer for incremental haggling */
3346                                 offer = last_offer;
3347                         }
3348                         else if (offer == cur_ask)
3349                         {
3350                                 flag = TRUE;
3351                                 *price = offer;
3352                         }
3353                         else
3354                         {
3355                                 loop_flag = FALSE;
3356                         }
3357
3358                         /* Stop */
3359                         if (flag || !loop_flag) break;
3360                 }
3361
3362                 if (!flag)
3363                 {
3364                         x1 = 100 * (last_offer - offer) / (last_offer - cur_ask);
3365                         if (x1 < min_per)
3366                         {
3367                                 if (haggle_insults())
3368                                 {
3369                                         flag = TRUE;
3370                                         cancel = TRUE;
3371                                 }
3372                         }
3373                         else if (x1 > max_per)
3374                         {
3375                                 x1 = x1 * 3 / 4;
3376                                 if (x1 < max_per) x1 = max_per;
3377                         }
3378                         x2 = rand_range(x1-2, x1+2);
3379                         x3 = ((offer - cur_ask) * x2 / 100L) + 1;
3380                         /* don't let the price go down */
3381                         if (x3 < 0) x3 = 0;
3382                         cur_ask += x3;
3383
3384                         if (cur_ask > final_ask)
3385                         {
3386                                 cur_ask = final_ask;
3387                                 final = TRUE;
3388 #ifdef JP
3389                                 pmt = "ºÇ½ªÄ󼨶â³Û";
3390 #else
3391                                 pmt = "Final Offer";
3392 #endif
3393
3394                                 annoyed++;
3395                                 if (annoyed > 3)
3396                                 {
3397                                         flag = TRUE;
3398 #ifdef JP
3399                                 /* Äɲà$0 ¤ÇÇ㤤¼è¤é¤ì¤Æ¤·¤Þ¤¦¤Î¤òËɻߠBy FIRST*/
3400                                         cancel = TRUE;
3401 #endif
3402                                         (void)(increase_insults());
3403                                 }
3404                         }
3405                         else if (offer <= cur_ask)
3406                         {
3407                                 flag = TRUE;
3408                                 *price = offer;
3409                         }
3410
3411                         if (!flag)
3412                         {
3413                                 last_offer = offer;
3414                                 allow_inc = TRUE;
3415                                 prt("", 1, 0);
3416                                 (void)sprintf(out_val,
3417 #ifdef JP
3418                                               "Á°²ó¤ÎÄ󼨲Á³Ê $%ld", (long)last_offer);
3419 #else
3420                                                           "Your last bid %ld", (long)last_offer);
3421 #endif
3422
3423                                 put_str(out_val, 1, 39);
3424                                 say_comment_3(cur_ask, annoyed);
3425                         }
3426                 }
3427         }
3428
3429         /* Cancel */
3430         if (cancel) return (TRUE);
3431
3432         /* Update bargaining info */
3433         updatebargain(*price, final_ask, o_ptr->number);
3434
3435         /* Do not cancel */
3436         return (FALSE);
3437 }
3438
3439
3440 /*!
3441  * @brief Å¹¤«¤é¤Î¹ØÆþ½èÍý¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó /
3442  * Buy an item from a store                     -RAK-
3443  * @return ¤Ê¤·
3444  */
3445 static void store_purchase(void)
3446 {
3447         int i, amt, choice;
3448         int item, item_new;
3449
3450         s32b price, best;
3451
3452         object_type forge;
3453         object_type *j_ptr;
3454
3455         object_type *o_ptr;
3456
3457         char o_name[MAX_NLEN];
3458
3459         char out_val[160];
3460
3461         if (cur_store_num == STORE_MUSEUM)
3462         {
3463 #ifdef JP
3464                 msg_print("Çîʪ´Û¤«¤é¼è¤ê½Ð¤¹¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£");
3465 #else
3466                 msg_print("Museum.");
3467 #endif
3468                 return;
3469         }
3470
3471         /* Empty? */
3472         if (st_ptr->stock_num <= 0)
3473         {
3474                 if (cur_store_num == STORE_HOME)
3475 #ifdef JP
3476                         msg_print("²æ¤¬²È¤Ë¤Ï²¿¤âÃÖ¤¤¤Æ¤¢¤ê¤Þ¤»¤ó¡£");
3477 #else
3478                         msg_print("Your home is empty.");
3479 #endif
3480
3481                 else
3482 #ifdef JP
3483                         msg_print("¸½ºß¾¦Éʤκ߸ˤòÀڤ餷¤Æ¤¤¤Þ¤¹¡£");
3484 #else
3485                         msg_print("I am currently out of stock.");
3486 #endif
3487
3488                 return;
3489         }
3490
3491
3492         /* Find the number of objects on this and following pages */
3493         i = (st_ptr->stock_num - store_top);
3494
3495         /* And then restrict it to the current page */
3496         if (i > store_bottom) i = store_bottom;
3497
3498         /* Prompt */
3499 #ifdef JP
3500         /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸ */
3501         switch( cur_store_num ) {
3502                 case 7:
3503                         sprintf(out_val, "¤É¤Î¥¢¥¤¥Æ¥à¤ò¼è¤ê¤Þ¤¹¤«? ");
3504                         break;
3505                 case 6:
3506                         sprintf(out_val, "¤É¤ì? ");
3507                         break;
3508                 default:
3509                         sprintf(out_val, "¤É¤ÎÉÊʪ¤¬Íߤ·¤¤¤ó¤À¤¤? ");
3510                         break;
3511         }
3512 #else
3513         if (cur_store_num == STORE_HOME)
3514         {
3515                 sprintf(out_val, "Which item do you want to take? ");
3516         }
3517         else
3518         {
3519                 sprintf(out_val, "Which item are you interested in? ");
3520         }
3521 #endif
3522
3523
3524         /* Get the item number to be bought */
3525         if (!get_stock(&item, out_val, 0, i - 1)) return;
3526
3527         /* Get the actual index */
3528         item = item + store_top;
3529
3530         /* Get the actual item */
3531         o_ptr = &st_ptr->stock[item];
3532
3533         /* Assume the player wants just one of them */
3534         amt = 1;
3535
3536         /* Get local object */
3537         j_ptr = &forge;
3538
3539         /* Get a copy of the object */
3540         object_copy(j_ptr, o_ptr);
3541
3542         /*
3543          * If a rod or wand, allocate total maximum timeouts or charges
3544          * between those purchased and left on the shelf.
3545          */
3546         reduce_charges(j_ptr, o_ptr->number - amt);
3547
3548         /* Modify quantity */
3549         j_ptr->number = amt;
3550
3551         /* Hack -- require room in pack */
3552         if (!inven_carry_okay(j_ptr))
3553         {
3554 #ifdef JP
3555 msg_print("¤½¤ó¤Ê¤Ë¥¢¥¤¥Æ¥à¤ò»ý¤Æ¤Ê¤¤¡£");
3556 #else
3557                 msg_print("You cannot carry that many different items.");
3558 #endif
3559
3560                 return;
3561         }
3562
3563         /* Determine the "best" price (per item) */
3564         best = price_item(j_ptr, ot_ptr->min_inflate, FALSE);
3565
3566         /* Find out how many the player wants */
3567         if (o_ptr->number > 1)
3568         {
3569                 /* Hack -- note cost of "fixed" items */
3570                 if ((cur_store_num != STORE_HOME) &&
3571                     (o_ptr->ident & IDENT_FIXED))
3572                 {
3573 #ifdef JP
3574 msg_format("°ì¤Ä¤Ë¤Ä¤­ $%ld¤Ç¤¹¡£", (long)(best));
3575 #else
3576                         msg_format("That costs %ld gold per item.", (long)(best));
3577 #endif
3578
3579                 }
3580
3581                 /* Get a quantity */
3582                 amt = get_quantity(NULL, o_ptr->number);
3583
3584                 /* Allow user abort */
3585                 if (amt <= 0) return;
3586         }
3587
3588         /* Get local object */
3589         j_ptr = &forge;
3590
3591         /* Get desired object */
3592         object_copy(j_ptr, o_ptr);
3593
3594         /*
3595          * If a rod or wand, allocate total maximum timeouts or charges
3596          * between those purchased and left on the shelf.
3597          */
3598         reduce_charges(j_ptr, o_ptr->number - amt);
3599
3600         /* Modify quantity */
3601         j_ptr->number = amt;
3602
3603         /* Hack -- require room in pack */
3604         if (!inven_carry_okay(j_ptr))
3605         {
3606 #ifdef JP
3607                 msg_print("¥¶¥Ã¥¯¤Ë¤½¤Î¥¢¥¤¥Æ¥à¤òÆþ¤ì¤ë·ä´Ö¤¬¤Ê¤¤¡£");
3608 #else
3609                 msg_print("You cannot carry that many items.");
3610 #endif
3611
3612                 return;
3613         }
3614
3615         /* Attempt to buy it */
3616         if (cur_store_num != STORE_HOME)
3617         {
3618                 /* Fixed price, quick buy */
3619                 if (o_ptr->ident & (IDENT_FIXED))
3620                 {
3621                         /* Assume accept */
3622                         choice = 0;
3623
3624                         /* Go directly to the "best" deal */
3625                         price = (best * j_ptr->number);
3626                 }
3627
3628                 /* Haggle for it */
3629                 else
3630                 {
3631                         /* Describe the object (fully) */
3632                         object_desc(o_name, j_ptr, 0);
3633
3634                         /* Message */
3635 #ifdef JP
3636 msg_format("%s(%c)¤ò¹ØÆþ¤¹¤ë¡£", o_name, I2A(item));
3637 #else
3638                         msg_format("Buying %s (%c).", o_name, I2A(item));
3639 #endif
3640
3641                         msg_print(NULL);
3642
3643                         /* Haggle for a final price */
3644                         choice = purchase_haggle(j_ptr, &price);
3645
3646                         /* Hack -- Got kicked out */
3647                         if (st_ptr->store_open >= turn) return;
3648                 }
3649
3650                 /* Player wants it */
3651                 if (choice == 0)
3652                 {
3653                         /* Fix the item price (if "correctly" haggled) */
3654                         if (price == (best * j_ptr->number)) o_ptr->ident |= (IDENT_FIXED);
3655
3656                         /* Player can afford it */
3657                         if (p_ptr->au >= price)
3658                         {
3659                                 /* Say "okay" */
3660                                 say_comment_1();
3661
3662                                 if (cur_store_num == STORE_BLACK) /* The black market is illegal! */
3663                                         chg_virtue(V_JUSTICE, -1);
3664                                 if((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
3665                                         chg_virtue(V_NATURE, -1);
3666
3667                                 /* Make a sound */
3668                                 sound(SOUND_BUY);
3669
3670                                 /* Be happy */
3671                                 decrease_insults();
3672
3673                                 /* Spend the money */
3674                                 p_ptr->au -= price;
3675
3676                                 /* Update the display */
3677                                 store_prt_gold();
3678
3679                                 /* Hack -- buying an item makes you aware of it */
3680                                 object_aware(j_ptr);
3681
3682                                 /* Hack -- clear the "fixed" flag from the item */
3683                                 j_ptr->ident &= ~(IDENT_FIXED);
3684
3685                                 /* Describe the transaction */
3686                                 object_desc(o_name, j_ptr, 0);
3687
3688                                 /* Message */
3689 #ifdef JP
3690 msg_format("%s¤ò $%ld¤Ç¹ØÆþ¤·¤Þ¤·¤¿¡£", o_name, (long)price);
3691 #else
3692                                 msg_format("You bought %s for %ld gold.", o_name, (long)price);
3693 #endif
3694
3695                                 strcpy(record_o_name, o_name);
3696                                 record_turn = turn;
3697
3698                                 if (record_buy) do_cmd_write_nikki(NIKKI_BUY, 0, o_name);
3699                                 object_desc(o_name, o_ptr, OD_NAME_ONLY);
3700                                 if(record_rand_art && o_ptr->art_name)
3701                                         do_cmd_write_nikki(NIKKI_ART, 0, o_name);
3702
3703                                 /* Erase the inscription */
3704                                 j_ptr->inscription = 0;
3705
3706                                 /* Erase the "feeling" */
3707                                 j_ptr->feeling = FEEL_NONE;
3708                                 j_ptr->ident &= ~(IDENT_STORE);
3709                                 /* Give it to the player */
3710                                 item_new = inven_carry(j_ptr);
3711
3712                                 /* Describe the final result */
3713                                 object_desc(o_name, &inventory[item_new], 0);
3714
3715                                 /* Message */
3716 #ifdef JP
3717                 msg_format("%s(%c)¤ò¼ê¤ËÆþ¤ì¤¿¡£", o_name, index_to_label(item_new));
3718 #else
3719                                 msg_format("You have %s (%c).",
3720                                                    o_name, index_to_label(item_new));
3721 #endif
3722
3723                                 /* Auto-inscription */
3724                                 autopick_alter_item(item_new, FALSE);
3725
3726                                 /* Now, reduce the original stack's pval. */
3727                                 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
3728                                 {
3729                                         o_ptr->pval -= j_ptr->pval;
3730                                 }
3731
3732                                 /* Handle stuff */
3733                                 handle_stuff();
3734
3735                                 /* Note how many slots the store used to have */
3736                                 i = st_ptr->stock_num;
3737
3738                                 /* Remove the bought items from the store */
3739                                 store_item_increase(item, -amt);
3740                                 store_item_optimize(item);
3741
3742                                 /* Store is empty */
3743                                 if (st_ptr->stock_num == 0)
3744                                 {
3745                                         /* Shuffle */
3746                                         if (one_in_(STORE_SHUFFLE))
3747                                         {
3748                                                 char buf[80];
3749                                                 /* Message */
3750 #ifdef JP
3751                                                 msg_print("Ź¼ç¤Ï°úÂष¤¿¡£");
3752 #else
3753                                                 msg_print("The shopkeeper retires.");
3754 #endif
3755
3756
3757                                                 /* Shuffle the store */
3758                                                 store_shuffle(cur_store_num);
3759
3760                                                 prt("",3,0);
3761                                                 sprintf(buf, "%s (%s)",
3762                                                         ot_ptr->owner_name, race_info[ot_ptr->owner_race].title);
3763                                                 put_str(buf, 3, 10);
3764                                                 sprintf(buf, "%s (%ld)",
3765                                                         (f_name + f_info[cur_store_feat].name), (long)(ot_ptr->max_cost));
3766                                                 prt(buf, 3, 50);
3767                                         }
3768
3769                                         /* Maintain */
3770                                         else
3771                                         {
3772                                                 /* Message */
3773 #ifdef JP
3774                                                 msg_print("Ź¼ç¤Ï¿·¤¿¤Êºß¸Ë¤ò¼è¤ê½Ð¤·¤¿¡£");
3775 #else
3776                                                 msg_print("The shopkeeper brings out some new stock.");
3777 #endif
3778
3779                                         }
3780
3781                                         /* New inventory */
3782                                         for (i = 0; i < 10; i++)
3783                                         {
3784                                                 /* Maintain the store */
3785                                                 store_maint(p_ptr->town_num, cur_store_num);
3786                                         }
3787
3788                                         /* Start over */
3789                                         store_top = 0;
3790
3791                                         /* Redraw everything */
3792                                         display_inventory();
3793                                 }
3794
3795                                 /* The item is gone */
3796                                 else if (st_ptr->stock_num != i)
3797                                 {
3798                                         /* Pick the correct screen */
3799                                         if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
3800
3801                                         /* Redraw everything */
3802                                         display_inventory();
3803                                 }
3804
3805                                 /* Item is still here */
3806                                 else
3807                                 {
3808                                         /* Redraw the item */
3809                                         display_entry(item);
3810                                 }
3811                         }
3812
3813                         /* Player cannot afford it */
3814                         else
3815                         {
3816                                 /* Simple message (no insult) */
3817 #ifdef JP
3818                                 msg_print("¤ª¶â¤¬Â­¤ê¤Þ¤»¤ó¡£");
3819 #else
3820                                 msg_print("You do not have enough gold.");
3821 #endif
3822
3823                         }
3824                 }
3825         }
3826
3827         /* Home is much easier */
3828         else
3829         {
3830                 bool combined_or_reordered;
3831
3832                 /* Distribute charges of wands/rods */
3833                 distribute_charges(o_ptr, j_ptr, amt);
3834
3835                 /* Give it to the player */
3836                 item_new = inven_carry(j_ptr);
3837
3838                 /* Describe just the result */
3839                 object_desc(o_name, &inventory[item_new], 0);
3840
3841                 /* Message */
3842 #ifdef JP
3843                                 msg_format("%s(%c)¤ò¼è¤Ã¤¿¡£",
3844 #else
3845                 msg_format("You have %s (%c).",
3846 #endif
3847  o_name, index_to_label(item_new));
3848
3849                 /* Handle stuff */
3850                 handle_stuff();
3851
3852                 /* Take note if we take the last one */
3853                 i = st_ptr->stock_num;
3854
3855                 /* Remove the items from the home */
3856                 store_item_increase(item, -amt);
3857                 store_item_optimize(item);
3858
3859                 combined_or_reordered = combine_and_reorder_home(STORE_HOME);
3860
3861                 /* Hack -- Item is still here */
3862                 if (i == st_ptr->stock_num)
3863                 {
3864                         /* Redraw everything */
3865                         if (combined_or_reordered) display_inventory();
3866
3867                         /* Redraw the item */
3868                         else display_entry(item);
3869                 }
3870
3871                 /* The item is gone */
3872                 else
3873                 {
3874                         /* Nothing left */
3875                         if (st_ptr->stock_num == 0) store_top = 0;
3876
3877                         /* Nothing left on that screen */
3878                         else if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
3879
3880                         /* Redraw everything */
3881                         display_inventory();
3882
3883                         chg_virtue(V_SACRIFICE, 1);
3884                 }
3885         }
3886
3887         /* Not kicked out */
3888         return;
3889 }
3890
3891
3892 /*!
3893  * @brief Å¹¤«¤é¤ÎÇäµÑ½èÍý¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó /
3894  * Sell an item to the store (or home)
3895  * @return ¤Ê¤·
3896  */
3897 static void store_sell(void)
3898 {
3899         int choice;
3900         int item, item_pos;
3901         int amt;
3902
3903         s32b price, value, dummy;
3904
3905         object_type forge;
3906         object_type *q_ptr;
3907
3908         object_type *o_ptr;
3909
3910         cptr q, s;
3911
3912         char o_name[MAX_NLEN];
3913
3914
3915         /* Prepare a prompt */
3916         if (cur_store_num == STORE_HOME)
3917 #ifdef JP
3918         q = "¤É¤Î¥¢¥¤¥Æ¥à¤òÃÖ¤­¤Þ¤¹¤«? ";
3919 #else
3920                 q = "Drop which item? ";
3921 #endif
3922
3923         else if (cur_store_num == STORE_MUSEUM)
3924 #ifdef JP
3925         q = "¤É¤Î¥¢¥¤¥Æ¥à¤ò´ó£¤·¤Þ¤¹¤«? ";
3926 #else
3927                 q = "Give which item? ";
3928 #endif
3929
3930         else
3931 #ifdef JP
3932                 q = "¤É¤Î¥¢¥¤¥Æ¥à¤òÇä¤ê¤Þ¤¹¤«? ";
3933 #else
3934                 q = "Sell which item? ";
3935 #endif
3936
3937
3938         item_tester_no_ryoute = TRUE;
3939         /* Only allow items the store will buy */
3940         item_tester_hook = store_will_buy;
3941
3942         /* Get an item */
3943         /* ²æ¤¬²È¤Ç¤ª¤«¤·¤Ê¥á¥Ã¥»¡¼¥¸¤¬½Ð¤ë¥ª¥ê¥¸¥Ê¥ë¤Î¥Ð¥°¤ò½¤Àµ */
3944         if (cur_store_num == STORE_HOME)
3945         {
3946 #ifdef JP
3947                 s = "ÃÖ¤±¤ë¥¢¥¤¥Æ¥à¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£";
3948 #else
3949                 s = "You don't have any item to drop.";
3950 #endif
3951         }
3952         else if (cur_store_num == STORE_MUSEUM)
3953         {
3954 #ifdef JP
3955                 s = "´ó£¤Ç¤­¤ë¥¢¥¤¥Æ¥à¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£";
3956 #else
3957                 s = "You don't have any item to give.";
3958 #endif
3959         }
3960         else
3961         {
3962 #ifdef JP
3963                 s = "Íߤ·¤¤Êª¤¬¤Ê¤¤¤Ç¤¹¤Í¤¨¡£";
3964 #else
3965                 s = "You have nothing that I want.";
3966 #endif
3967         }
3968
3969         if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR))) return;
3970
3971         /* Get the item (in the pack) */
3972         if (item >= 0)
3973         {
3974                 o_ptr = &inventory[item];
3975         }
3976
3977         /* Get the item (on the floor) */
3978         else
3979         {
3980                 o_ptr = &o_list[0 - item];
3981         }
3982
3983
3984         /* Hack -- Cannot remove cursed items */
3985         if ((item >= INVEN_RARM) && object_is_cursed(o_ptr))
3986         {
3987                 /* Oops */
3988 #ifdef JP
3989                 msg_print("¤Õ¡¼¤à¡¢¤É¤¦¤ä¤é¤½¤ì¤Ï¼ö¤ï¤ì¤Æ¤¤¤ë¤è¤¦¤À¤Í¡£");
3990 #else
3991                 msg_print("Hmmm, it seems to be cursed.");
3992 #endif
3993
3994
3995                 /* Nope */
3996                 return;
3997         }
3998
3999
4000         /* Assume one item */
4001         amt = 1;
4002
4003         /* Find out how many the player wants (letter means "all") */
4004         if (o_ptr->number > 1)
4005         {
4006                 /* Get a quantity */
4007                 amt = get_quantity(NULL, o_ptr->number);
4008
4009                 /* Allow user abort */
4010                 if (amt <= 0) return;
4011         }
4012
4013         /* Get local object */
4014         q_ptr = &forge;
4015
4016         /* Get a copy of the object */
4017         object_copy(q_ptr, o_ptr);
4018
4019         /* Modify quantity */
4020         q_ptr->number = amt;
4021
4022         /*
4023          * Hack -- If a rod or wand, allocate total maximum
4024          * timeouts or charges to those being sold. -LM-
4025          */
4026         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4027         {
4028                 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
4029         }
4030
4031         /* Get a full description */
4032         object_desc(o_name, q_ptr, 0);
4033
4034         /* Remove any inscription, feeling for stores */
4035         if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
4036         {
4037                 q_ptr->inscription = 0;
4038                 q_ptr->feeling = FEEL_NONE;
4039         }
4040
4041         /* Is there room in the store (or the home?) */
4042         if (!store_check_num(q_ptr))
4043         {
4044                 if (cur_store_num == STORE_HOME)
4045 #ifdef JP
4046                         msg_print("²æ¤¬²È¤Ë¤Ï¤â¤¦ÃÖ¤¯¾ì½ê¤¬¤Ê¤¤¡£");
4047 #else
4048                         msg_print("Your home is full.");
4049 #endif
4050
4051                 else if (cur_store_num == STORE_MUSEUM)
4052 #ifdef JP
4053                         msg_print("Çîʪ´Û¤Ï¤â¤¦ËþÇÕ¤À¡£");
4054 #else
4055                         msg_print("Museum is full.");
4056 #endif
4057
4058                 else
4059 #ifdef JP
4060                         msg_print("¤¹¤¤¤Þ¤»¤ó¤¬¡¢Å¹¤Ë¤Ï¤â¤¦ÃÖ¤¯¾ì½ê¤¬¤¢¤ê¤Þ¤»¤ó¡£");
4061 #else
4062                         msg_print("I have not the room in my store to keep it.");
4063 #endif
4064
4065                 return;
4066         }
4067
4068
4069         /* Real store */
4070         if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
4071         {
4072                 /* Describe the transaction */
4073 #ifdef JP
4074                 msg_format("%s(%c)¤òÇäµÑ¤¹¤ë¡£", o_name, index_to_label(item));
4075 #else
4076                 msg_format("Selling %s (%c).", o_name, index_to_label(item));
4077 #endif
4078
4079                 msg_print(NULL);
4080
4081                 /* Haggle for it */
4082                 choice = sell_haggle(q_ptr, &price);
4083
4084                 /* Kicked out */
4085                 if (st_ptr->store_open >= turn) return;
4086
4087                 /* Sold... */
4088                 if (choice == 0)
4089                 {
4090                         /* Say "okay" */
4091                         say_comment_1();
4092
4093                         /* Make a sound */
4094                         sound(SOUND_SELL);
4095
4096                         /* Be happy */
4097                         if (cur_store_num == STORE_BLACK) /* The black market is illegal! */
4098                                 chg_virtue(V_JUSTICE, -1);
4099
4100                         if((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
4101                                 chg_virtue(V_NATURE, 1);
4102                         decrease_insults();
4103
4104                         /* Get some money */
4105                         p_ptr->au += price;
4106
4107                         /* Update the display */
4108                         store_prt_gold();
4109
4110                         /* Get the "apparent" value */
4111                         dummy = object_value(q_ptr) * q_ptr->number;
4112
4113                         /* Identify it */
4114                         identify_item(o_ptr);
4115
4116                         /* Get local object */
4117                         q_ptr = &forge;
4118
4119                         /* Get a copy of the object */
4120                         object_copy(q_ptr, o_ptr);
4121
4122                         /* Modify quantity */
4123                         q_ptr->number = amt;
4124
4125                         /* Make it look like to be known */
4126                         q_ptr->ident |= IDENT_STORE;
4127
4128                         /*
4129                          * Hack -- If a rod or wand, let the shopkeeper know just
4130                          * how many charges he really paid for. -LM-
4131                          */
4132                         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4133                         {
4134                                 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
4135                         }
4136
4137                         /* Get the "actual" value */
4138                         value = object_value(q_ptr) * q_ptr->number;
4139
4140                         /* Get the description all over again */
4141                         object_desc(o_name, q_ptr, 0);
4142
4143                         /* Describe the result (in message buffer) */
4144 #ifdef JP
4145 msg_format("%s¤ò $%ld¤ÇÇäµÑ¤·¤Þ¤·¤¿¡£", o_name, (long)price);
4146 #else
4147                         msg_format("You sold %s for %ld gold.", o_name, (long)price);
4148 #endif
4149
4150                         if (record_sell) do_cmd_write_nikki(NIKKI_SELL, 0, o_name);
4151
4152                         if (!((o_ptr->tval == TV_FIGURINE) && (value > 0)))
4153                         {
4154                          /* Analyze the prices (and comment verbally) unless a figurine*/
4155                         purchase_analyze(price, value, dummy);
4156                         }
4157
4158                         /*
4159                          * Hack -- Allocate charges between those wands or rods sold
4160                          * and retained, unless all are being sold. -LM-
4161                          */
4162                         distribute_charges(o_ptr, q_ptr, amt);
4163
4164                         /* Reset timeouts of the sold items */
4165                         q_ptr->timeout = 0;
4166
4167                         /* Take the item from the player, describe the result */
4168                         inven_item_increase(item, -amt);
4169                         inven_item_describe(item);
4170
4171                         /* If items remain, auto-inscribe before optimizing */
4172                         if (o_ptr->number > 0)
4173                                 autopick_alter_item(item, FALSE);
4174
4175                         inven_item_optimize(item);
4176
4177                         /* Handle stuff */
4178                         handle_stuff();
4179
4180                         /* The store gets that (known) item */
4181                         item_pos = store_carry(q_ptr);
4182
4183                         /* Re-display if item is now in store */
4184                         if (item_pos >= 0)
4185                         {
4186                                 store_top = (item_pos / store_bottom) * store_bottom;
4187                                 display_inventory();
4188                         }
4189                 }
4190         }
4191
4192         /* Player is at museum */
4193         else if (cur_store_num == STORE_MUSEUM)
4194         {
4195                 char o2_name[MAX_NLEN];
4196                 object_desc(o2_name, q_ptr, OD_NAME_ONLY);
4197
4198                 if (-1 == store_check_num(q_ptr))
4199                 {
4200 #ifdef JP
4201                         msg_print("¤½¤ì¤ÈƱ¤¸ÉÊʪ¤Ï´û¤ËÇîʪ´Û¤Ë¤¢¤ë¤è¤¦¤Ç¤¹¡£");
4202 #else
4203                         msg_print("The same object as it is already in the Museum.");
4204 #endif
4205                 }
4206                 else
4207                 {
4208 #ifdef JP
4209                         msg_print("Çîʪ´Û¤Ë´ó£¤·¤¿¤â¤Î¤Ï¼è¤ê½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡ª¡ª");
4210 #else
4211                         msg_print("You cannot take items which is given to the Museum back!!");
4212 #endif
4213                 }
4214 #ifdef JP
4215                 if (!get_check(format("ËÜÅö¤Ë%s¤ò´ó£¤·¤Þ¤¹¤«¡©", o2_name))) return;
4216 #else
4217                 if (!get_check(format("Really give %s to the Museum? ", o2_name))) return;
4218 #endif
4219
4220                 /* Identify it */
4221                 identify_item(q_ptr);
4222                 q_ptr->ident |= IDENT_MENTAL;
4223
4224                 /* Distribute charges of wands/rods */
4225                 distribute_charges(o_ptr, q_ptr, amt);
4226
4227                 /* Describe */
4228 #ifdef JP
4229                 msg_format("%s¤òÃÖ¤¤¤¿¡£(%c)", o_name, index_to_label(item));
4230 #else
4231                 msg_format("You drop %s (%c).", o_name, index_to_label(item));
4232 #endif
4233
4234                 choice = 0;
4235
4236                 /* Take it from the players inventory */
4237                 inven_item_increase(item, -amt);
4238                 inven_item_describe(item);
4239                 inven_item_optimize(item);
4240
4241                 /* Handle stuff */
4242                 handle_stuff();
4243
4244                 /* Let the home carry it */
4245                 item_pos = home_carry(q_ptr);
4246
4247                 /* Update store display */
4248                 if (item_pos >= 0)
4249                 {
4250                         store_top = (item_pos / store_bottom) * store_bottom;
4251                         display_inventory();
4252                 }
4253         }
4254         /* Player is at home */
4255         else
4256         {
4257                 /* Distribute charges of wands/rods */
4258                 distribute_charges(o_ptr, q_ptr, amt);
4259
4260                 /* Describe */
4261 #ifdef JP
4262                 msg_format("%s¤òÃÖ¤¤¤¿¡£(%c)", o_name, index_to_label(item));
4263 #else
4264                 msg_format("You drop %s (%c).", o_name, index_to_label(item));
4265 #endif
4266
4267                 choice = 0;
4268
4269                 /* Take it from the players inventory */
4270                 inven_item_increase(item, -amt);
4271                 inven_item_describe(item);
4272                 inven_item_optimize(item);
4273
4274                 /* Handle stuff */
4275                 handle_stuff();
4276
4277                 /* Let the home carry it */
4278                 item_pos = home_carry(q_ptr);
4279
4280                 /* Update store display */
4281                 if (item_pos >= 0)
4282                 {
4283                         store_top = (item_pos / store_bottom) * store_bottom;
4284                         display_inventory();
4285                 }
4286         }
4287
4288         if ((choice == 0) && (item >= INVEN_RARM))
4289         {
4290                 calc_android_exp();
4291                 kamaenaoshi(item);
4292         }
4293 }
4294
4295
4296 /*!
4297  * @brief Å¹¤Î¥¢¥¤¥Æ¥à¤òÄ´¤Ù¤ë¥³¥Þ¥ó¥É¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó /
4298  * Examine an item in a store                      -JDL-
4299  * @return ¤Ê¤·
4300  */
4301 static void store_examine(void)
4302 {
4303         int         i;
4304         int         item;
4305         object_type *o_ptr;
4306         char        o_name[MAX_NLEN];
4307         char        out_val[160];
4308
4309
4310         /* Empty? */
4311         if (st_ptr->stock_num <= 0)
4312         {
4313                 if (cur_store_num == STORE_HOME)
4314 #ifdef JP
4315                         msg_print("²æ¤¬²È¤Ë¤Ï²¿¤âÃÖ¤¤¤Æ¤¢¤ê¤Þ¤»¤ó¡£");
4316 #else
4317                         msg_print("Your home is empty.");
4318 #endif
4319
4320                 else if (cur_store_num == STORE_MUSEUM)
4321 #ifdef JP
4322                         msg_print("Çîʪ´Û¤Ë¤Ï²¿¤âÃÖ¤¤¤Æ¤¢¤ê¤Þ¤»¤ó¡£");
4323 #else
4324                         msg_print("Museum is empty.");
4325 #endif
4326
4327                 else
4328 #ifdef JP
4329                         msg_print("¸½ºß¾¦Éʤκ߸ˤòÀڤ餷¤Æ¤¤¤Þ¤¹¡£");
4330 #else
4331                         msg_print("I am currently out of stock.");
4332 #endif
4333
4334                 return;
4335         }
4336
4337
4338         /* Find the number of objects on this and following pages */
4339         i = (st_ptr->stock_num - store_top);
4340
4341         /* And then restrict it to the current page */
4342         if (i > store_bottom) i = store_bottom;
4343
4344         /* Prompt */
4345 #ifdef JP
4346 sprintf(out_val, "¤É¤ì¤òÄ´¤Ù¤Þ¤¹¤«¡©");
4347 #else
4348         sprintf(out_val, "Which item do you want to examine? ");
4349 #endif
4350
4351
4352         /* Get the item number to be examined */
4353         if (!get_stock(&item, out_val, 0, i - 1)) return;
4354
4355         /* Get the actual index */
4356         item = item + store_top;
4357
4358         /* Get the actual item */
4359         o_ptr = &st_ptr->stock[item];
4360
4361         /* Require full knowledge */
4362         if (!(o_ptr->ident & IDENT_MENTAL))
4363         {
4364                 /* This can only happen in the home */
4365 #ifdef JP
4366 msg_print("¤³¤Î¥¢¥¤¥Æ¥à¤Ë¤Ä¤¤¤ÆÆäËÃΤäƤ¤¤ë¤³¤È¤Ï¤Ê¤¤¡£");
4367 #else
4368                 msg_print("You have no special knowledge about that item.");
4369 #endif
4370
4371                 return;
4372         }
4373
4374         /* Description */
4375         object_desc(o_name, o_ptr, 0);
4376
4377         /* Describe */
4378 #ifdef JP
4379 msg_format("%s¤òÄ´¤Ù¤Æ¤¤¤ë...", o_name);
4380 #else
4381         msg_format("Examining %s...", o_name);
4382 #endif
4383
4384
4385         /* Describe it fully */
4386         if (!screen_object(o_ptr, SCROBJ_FORCE_DETAIL))
4387 #ifdef JP
4388 msg_print("ÆäËÊѤï¤Ã¤¿¤È¤³¤í¤Ï¤Ê¤¤¤è¤¦¤À¡£");
4389 #else
4390                 msg_print("You see nothing special.");
4391 #endif
4392
4393
4394         return;
4395 }
4396
4397
4398 /*!
4399  * @brief Çîʪ´Û¤Î¥¢¥¤¥Æ¥à¤ò½üµî¤¹¤ë¥³¥Þ¥ó¥É¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó /
4400  * Remove an item from museum (Originally from TOband)
4401  * @return ¤Ê¤·
4402  */
4403 static void museum_remove_object(void)
4404 {
4405         int         i;
4406         int         item;
4407         object_type *o_ptr;
4408         char        o_name[MAX_NLEN];
4409         char        out_val[160];
4410
4411         /* Empty? */
4412         if (st_ptr->stock_num <= 0)
4413         {
4414 #ifdef JP
4415                 msg_print("Çîʪ´Û¤Ë¤Ï²¿¤âÃÖ¤¤¤Æ¤¢¤ê¤Þ¤»¤ó¡£");
4416 #else
4417                 msg_print("Museum is empty.");
4418 #endif
4419
4420                 return;
4421         }
4422
4423         /* Find the number of objects on this and following pages */
4424         i = st_ptr->stock_num - store_top;
4425
4426         /* And then restrict it to the current page */
4427         if (i > store_bottom) i = store_bottom;
4428
4429         /* Prompt */
4430 #ifdef JP
4431         sprintf(out_val, "¤É¤Î¥¢¥¤¥Æ¥à¤ÎŸ¼¨¤ò¤ä¤á¤µ¤»¤Þ¤¹¤«¡©");
4432 #else
4433         sprintf(out_val, "Which item do you want to order to remove? ");
4434 #endif
4435
4436         /* Get the item number to be removed */
4437         if (!get_stock(&item, out_val, 0, i - 1)) return;
4438
4439         /* Get the actual index */
4440         item = item + store_top;
4441
4442         /* Get the actual item */
4443         o_ptr = &st_ptr->stock[item];
4444
4445         /* Description */
4446         object_desc(o_name, o_ptr, 0);
4447
4448 #ifdef JP
4449         msg_print("Ÿ¼¨¤ò¤ä¤á¤µ¤»¤¿¥¢¥¤¥Æ¥à¤ÏÆóÅ٤ȸ«¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡ª");
4450         if (!get_check(format("ËÜÅö¤Ë%s¤ÎŸ¼¨¤ò¤ä¤á¤µ¤»¤Þ¤¹¤«¡©", o_name))) return;
4451 #else
4452         msg_print("You cannot see items which is removed from the Museum!");
4453         if (!get_check(format("Really order to remove %s from the Museum? ", o_name))) return;
4454 #endif
4455
4456         /* Message */
4457 #ifdef JP
4458         msg_format("%s¤ÎŸ¼¨¤ò¤ä¤á¤µ¤»¤¿¡£", o_name);
4459 #else
4460         msg_format("You ordered to remove %s.", o_name);
4461 #endif
4462
4463         /* Remove the items from the home */
4464         store_item_increase(item, -o_ptr->number);
4465         store_item_optimize(item);
4466
4467         (void)combine_and_reorder_home(STORE_MUSEUM);
4468
4469         /* The item is gone */
4470
4471         /* Nothing left */
4472         if (st_ptr->stock_num == 0) store_top = 0;
4473
4474         /* Nothing left on that screen */
4475         else if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
4476
4477         /* Redraw everything */
4478         display_inventory();
4479
4480         return;
4481 }
4482
4483
4484 /*
4485  * Hack -- set this to leave the store
4486  */
4487 static bool leave_store = FALSE;
4488
4489
4490 /*!
4491  * @brief Å¹ÊÞ½èÍý¥³¥Þ¥ó¥ÉÁªÂò¤Î¥á¥¤¥ó¥ë¡¼¥Á¥ó /
4492  * Process a command in a store
4493  * @return ¤Ê¤·
4494  * @note
4495  * <pre>
4496  * Note that we must allow the use of a few "special" commands
4497  * in the stores which are not allowed in the dungeon, and we
4498  * must disable some commands which are allowed in the dungeon
4499  * but not in the stores, to prevent chaos.
4500  * </pre>
4501  */
4502 static void store_process_command(void)
4503 {
4504 #ifdef ALLOW_REPEAT /* TNB */
4505
4506         /* Handle repeating the last command */
4507         repeat_check();
4508
4509 #endif /* ALLOW_REPEAT -- TNB */
4510
4511         if (rogue_like_commands && command_cmd == 'l')
4512         {
4513                 command_cmd = 'x';      /* hack! */
4514         }
4515
4516         /* Parse the command */
4517         switch (command_cmd)
4518         {
4519                 /* Leave */
4520                 case ESCAPE:
4521                 {
4522                         leave_store = TRUE;
4523                         break;
4524                 }
4525
4526                 /* ÆüËܸìÈÇÄɲà*/
4527                 /* 1 ¥Ú¡¼¥¸Ìá¤ë¥³¥Þ¥ó¥É: ²æ¤¬²È¤Î¥Ú¡¼¥¸¿ô¤¬Â¿¤¤¤Î¤Ç½ÅÊõ¤¹¤ë¤Ï¤º By BUG */
4528                 case '-':
4529                 {
4530                         if (st_ptr->stock_num <= store_bottom) {
4531 #ifdef JP
4532                                 msg_print("¤³¤ì¤ÇÁ´Éô¤Ç¤¹¡£");
4533 #else
4534                                 msg_print("Entire inventory is shown.");
4535 #endif
4536                         }
4537                         else{
4538                                 store_top -= store_bottom;
4539                                 if ( store_top < 0 )
4540                                         store_top = ((st_ptr->stock_num - 1 )/store_bottom) * store_bottom;
4541                                 if ( (cur_store_num == STORE_HOME) && (powerup_home == FALSE) )
4542                                         if ( store_top >= store_bottom ) store_top = store_bottom;
4543                                 display_inventory();
4544                         }
4545                         break;
4546                 }
4547
4548                 /* Browse */
4549                 case ' ':
4550                 {
4551                         if (st_ptr->stock_num <= store_bottom)
4552                         {
4553 #ifdef JP
4554                                 msg_print("¤³¤ì¤ÇÁ´Éô¤Ç¤¹¡£");
4555 #else
4556                                 msg_print("Entire inventory is shown.");
4557 #endif
4558
4559                         }
4560                         else
4561                         {
4562                                 store_top += store_bottom;
4563                                 /*
4564                                  * ±£¤·¥ª¥×¥·¥ç¥ó(powerup_home)¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ï
4565                                  * ²æ¤¬²È¤Ç¤Ï 2 ¥Ú¡¼¥¸¤Þ¤Ç¤·¤«É½¼¨¤·¤Ê¤¤
4566                                  */
4567                                 if ((cur_store_num == STORE_HOME) && 
4568                                     (powerup_home == FALSE) && 
4569                                         (st_ptr->stock_num >= STORE_INVEN_MAX))
4570                                 {
4571                                         if (store_top >= (STORE_INVEN_MAX - 1))
4572                                         {
4573                                                 store_top = 0;
4574                                         }
4575                                 }
4576                                 else
4577                                 {
4578                                         if (store_top >= st_ptr->stock_num) store_top = 0;
4579                                 }
4580
4581                                 display_inventory();
4582                         }
4583                         break;
4584                 }
4585
4586                 /* Redraw */
4587                 case KTRL('R'):
4588                 {
4589                         do_cmd_redraw();
4590                         display_store();
4591                         break;
4592                 }
4593
4594                 /* Get (purchase) */
4595                 case 'g':
4596                 {
4597                         store_purchase();
4598                         break;
4599                 }
4600
4601                 /* Drop (Sell) */
4602                 case 'd':
4603                 {
4604                         store_sell();
4605                         break;
4606                 }
4607
4608                 /* Examine */
4609                 case 'x':
4610                 {
4611                         store_examine();
4612                         break;
4613                 }
4614
4615                 /* Ignore return */
4616                 case '\r':
4617                 {
4618                         break;
4619                 }
4620
4621                 /*** Inventory Commands ***/
4622
4623                 /* Wear/wield equipment */
4624                 case 'w':
4625                 {
4626                         do_cmd_wield();
4627                         break;
4628                 }
4629
4630                 /* Take off equipment */
4631                 case 't':
4632                 {
4633                         do_cmd_takeoff();
4634                         break;
4635                 }
4636
4637                 /* Destroy an item */
4638                 case 'k':
4639                 {
4640                         do_cmd_destroy();
4641                         break;
4642                 }
4643
4644                 /* Equipment list */
4645                 case 'e':
4646                 {
4647                         do_cmd_equip();
4648                         break;
4649                 }
4650
4651                 /* Inventory list */
4652                 case 'i':
4653                 {
4654                         do_cmd_inven();
4655                         break;
4656                 }
4657
4658
4659                 /*** Various commands ***/
4660
4661                 /* Identify an object */
4662                 case 'I':
4663                 {
4664                         do_cmd_observe();
4665                         break;
4666                 }
4667
4668                 /* Hack -- toggle windows */
4669                 case KTRL('I'):
4670                 {
4671                         toggle_inven_equip();
4672                         break;
4673                 }
4674
4675
4676
4677                 /*** Use various objects ***/
4678
4679                 /* Browse a book */
4680                 case 'b':
4681                 {
4682                         if ( (p_ptr->pclass == CLASS_MINDCRAFTER) ||
4683                              (p_ptr->pclass == CLASS_BERSERKER) ||
4684                              (p_ptr->pclass == CLASS_NINJA) ||
4685                              (p_ptr->pclass == CLASS_MIRROR_MASTER) 
4686                              ) do_cmd_mind_browse();
4687                         else if (p_ptr->pclass == CLASS_SMITH)
4688                                 do_cmd_kaji(TRUE);
4689                         else if (p_ptr->pclass == CLASS_MAGIC_EATER)
4690                                 do_cmd_magic_eater(TRUE, FALSE);
4691                         else if (p_ptr->pclass == CLASS_SNIPER)
4692                                 do_cmd_snipe_browse();
4693                         else do_cmd_browse();
4694                         break;
4695                 }
4696
4697                 /* Inscribe an object */
4698                 case '{':
4699                 {
4700                         do_cmd_inscribe();
4701                         break;
4702                 }
4703
4704                 /* Uninscribe an object */
4705                 case '}':
4706                 {
4707                         do_cmd_uninscribe();
4708                         break;
4709                 }
4710
4711
4712
4713                 /*** Help and Such ***/
4714
4715                 /* Help */
4716                 case '?':
4717                 {
4718                         do_cmd_help();
4719                         break;
4720                 }
4721
4722                 /* Identify symbol */
4723                 case '/':
4724                 {
4725                         do_cmd_query_symbol();
4726                         break;
4727                 }
4728
4729                 /* Character description */
4730                 case 'C':
4731                 {
4732                         p_ptr->town_num = old_town_num;
4733                         do_cmd_change_name();
4734                         p_ptr->town_num = inner_town_num;
4735                         display_store();
4736                         break;
4737                 }
4738
4739
4740                 /*** System Commands ***/
4741
4742                 /* Hack -- User interface */
4743                 case '!':
4744                 {
4745                         (void)Term_user(0);
4746                         break;
4747                 }
4748
4749                 /* Single line from a pref file */
4750                 case '"':
4751                 {
4752                         p_ptr->town_num = old_town_num;
4753                         do_cmd_pref();
4754                         p_ptr->town_num = inner_town_num;
4755                         break;
4756                 }
4757
4758                 /* Interact with macros */
4759                 case '@':
4760                 {
4761                         p_ptr->town_num = old_town_num;
4762                         do_cmd_macros();
4763                         p_ptr->town_num = inner_town_num;
4764                         break;
4765                 }
4766
4767                 /* Interact with visuals */
4768                 case '%':
4769                 {
4770                         p_ptr->town_num = old_town_num;
4771                         do_cmd_visuals();
4772                         p_ptr->town_num = inner_town_num;
4773                         break;
4774                 }
4775
4776                 /* Interact with colors */
4777                 case '&':
4778                 {
4779                         p_ptr->town_num = old_town_num;
4780                         do_cmd_colors();
4781                         p_ptr->town_num = inner_town_num;
4782                         break;
4783                 }
4784
4785                 /* Interact with options */
4786                 case '=':
4787                 {
4788                         do_cmd_options();
4789                         (void)combine_and_reorder_home(STORE_HOME);
4790                         do_cmd_redraw();
4791                         display_store();
4792                         break;
4793                 }
4794
4795                 /*** Misc Commands ***/
4796
4797                 /* Take notes */
4798                 case ':':
4799                 {
4800                         do_cmd_note();
4801                         break;
4802                 }
4803
4804                 /* Version info */
4805                 case 'V':
4806                 {
4807                         do_cmd_version();
4808                         break;
4809                 }
4810
4811                 /* Repeat level feeling */
4812                 case KTRL('F'):
4813                 {
4814                         do_cmd_feeling();
4815                         break;
4816                 }
4817
4818                 /* Show previous message */
4819                 case KTRL('O'):
4820                 {
4821                         do_cmd_message_one();
4822                         break;
4823                 }
4824
4825                 /* Show previous messages */
4826                 case KTRL('P'):
4827                 {
4828                         do_cmd_messages(0);
4829                         break;
4830                 }
4831
4832                 case '|':
4833                 {
4834                         do_cmd_nikki();
4835                         break;
4836                 }
4837
4838                 /* Check artifacts, uniques etc. */
4839                 case '~':
4840                 {
4841                         do_cmd_knowledge();
4842                         break;
4843                 }
4844
4845                 /* Load "screen dump" */
4846                 case '(':
4847                 {
4848                         do_cmd_load_screen();
4849                         break;
4850                 }
4851
4852                 /* Save "screen dump" */
4853                 case ')':
4854                 {
4855                         do_cmd_save_screen();
4856                         break;
4857                 }
4858
4859                 /* Hack -- Unknown command */
4860                 default:
4861                 {
4862                         if ((cur_store_num == STORE_MUSEUM) && (command_cmd == 'r'))
4863                         {
4864                                 museum_remove_object();
4865                         }
4866                         else
4867                         {
4868 #ifdef JP
4869                                 msg_print("¤½¤Î¥³¥Þ¥ó¥É¤ÏŹ¤ÎÃæ¤Ç¤Ï»È¤¨¤Þ¤»¤ó¡£");
4870 #else
4871                                 msg_print("That command does not work in stores.");
4872 #endif
4873                         }
4874
4875                         break;
4876                 }
4877         }
4878 }
4879
4880
4881 /*!
4882  * @brief Å¹ÊÞ½èÍýÁ´ÂΤΥᥤ¥ó¥ë¡¼¥Á¥ó /
4883  * Enter a store, and interact with it. *
4884  * @return ¤Ê¤·
4885  * @note
4886  * <pre>
4887  * Note that we use the standard "request_command()" function
4888  * to get a command, allowing us to use "command_arg" and all
4889  * command macros and other nifty stuff, but we use the special
4890  * "shopping" argument, to force certain commands to be converted
4891  * into other commands, normally, we convert "p" (pray) and "m"
4892  * (cast magic) into "g" (get), and "s" (search) into "d" (drop).
4893  * </pre>
4894  */
4895 void do_cmd_store(void)
4896 {
4897         int         which;
4898         int         maintain_num;
4899         int         i;
4900         cave_type   *c_ptr;
4901         bool        need_redraw_store_inv; /* To redraw missiles damage and prices in store */
4902         int w, h;
4903
4904         /* Get term size */
4905         Term_get_size(&w, &h);
4906
4907         /* Calculate stocks per 1 page */
4908         xtra_stock = MIN(14+26, ((h > 24) ? (h - 24) : 0));
4909         store_bottom = MIN_STOCK + xtra_stock;
4910
4911         /* Access the player grid */
4912         c_ptr = &cave[py][px];
4913
4914         /* Verify a store */
4915         if (!cave_have_flag_grid(c_ptr, FF_STORE))
4916         {
4917 #ifdef JP
4918                 msg_print("¤³¤³¤Ë¤ÏŹ¤¬¤¢¤ê¤Þ¤»¤ó¡£");
4919 #else
4920                 msg_print("You see no store here.");
4921 #endif
4922
4923                 return;
4924         }
4925
4926         /* Extract the store code */
4927         which = f_info[c_ptr->feat].subtype;
4928
4929         old_town_num = p_ptr->town_num;
4930         if ((which == STORE_HOME) || (which == STORE_MUSEUM)) p_ptr->town_num = 1;
4931         if (dun_level) p_ptr->town_num = NO_TOWN;
4932         inner_town_num = p_ptr->town_num;
4933
4934         /* Hack -- Check the "locked doors" */
4935         if ((town[p_ptr->town_num].store[which].store_open >= turn) ||
4936             (ironman_shops))
4937         {
4938 #ifdef JP
4939                 msg_print("¥É¥¢¤Ë¸°¤¬¤«¤«¤Ã¤Æ¤¤¤ë¡£");
4940 #else
4941                 msg_print("The doors are locked.");
4942 #endif
4943
4944                 p_ptr->town_num = old_town_num;
4945                 return;
4946         }
4947
4948         /* Calculate the number of store maintainances since the last visit */
4949         maintain_num = (turn - town[p_ptr->town_num].store[which].last_visit) / (TURNS_PER_TICK * STORE_TICKS);
4950
4951         /* Maintain the store max. 10 times */
4952         if (maintain_num > 10) maintain_num = 10;
4953
4954         if (maintain_num)
4955         {
4956                 /* Maintain the store */
4957                 for (i = 0; i < maintain_num; i++)
4958                         store_maint(p_ptr->town_num, which);
4959
4960                 /* Save the visit */
4961                 town[p_ptr->town_num].store[which].last_visit = turn;
4962         }
4963
4964         /* Forget the lite */
4965         forget_lite();
4966
4967         /* Forget the view */
4968         forget_view();
4969
4970
4971         /* Hack -- Character is in "icky" mode */
4972         character_icky = TRUE;
4973
4974
4975         /* No command argument */
4976         command_arg = 0;
4977
4978         /* No repeated command */
4979         command_rep = 0;
4980
4981         /* No automatic command */
4982         command_new = 0;
4983
4984         /* Do not expand macros */
4985         get_com_no_macros = TRUE;
4986
4987         /* Save the store number */
4988         cur_store_num = which;
4989
4990         /* Hack -- save the store feature */
4991         cur_store_feat = c_ptr->feat;
4992
4993         /* Save the store and owner pointers */
4994         st_ptr = &town[p_ptr->town_num].store[cur_store_num];
4995         ot_ptr = &owners[cur_store_num][st_ptr->owner];
4996
4997
4998         /* Start at the beginning */
4999         store_top = 0;
5000
5001         play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BUILD);
5002
5003         /* Display the store */
5004         display_store();
5005
5006         /* Do not leave */
5007         leave_store = FALSE;
5008
5009         /* Interact with player */
5010         while (!leave_store)
5011         {
5012                 /* Hack -- Clear line 1 */
5013                 prt("", 1, 0);
5014
5015                 /* Clear */
5016                 clear_from(20 + xtra_stock);
5017
5018
5019                 /* Basic commands */
5020 #ifdef JP
5021                 prt(" ESC) ·úʪ¤«¤é½Ð¤ë", 21 + xtra_stock, 0);
5022 #else
5023                 prt(" ESC) Exit from Building.", 21 + xtra_stock, 0);
5024 #endif
5025
5026
5027                 /* Browse if necessary */
5028                 if (st_ptr->stock_num > store_bottom)
5029                 {
5030 #ifdef JP
5031                         prt(" -)Á°¥Ú¡¼¥¸", 22 + xtra_stock, 0);
5032                         prt(" ¥¹¥Ú¡¼¥¹) ¼¡¥Ú¡¼¥¸", 23 + xtra_stock, 0);
5033 #else
5034                         prt(" -) Previous page", 22 + xtra_stock, 0);
5035                         prt(" SPACE) Next page", 23 + xtra_stock, 0);
5036 #endif
5037
5038                 }
5039
5040                 /* Home commands */
5041                 if (cur_store_num == STORE_HOME)
5042                 {
5043 #ifdef JP
5044                         prt("g) ¥¢¥¤¥Æ¥à¤ò¼è¤ë", 21 + xtra_stock, 27);
5045                         prt("d) ¥¢¥¤¥Æ¥à¤òÃÖ¤¯", 22 + xtra_stock, 27);
5046                         prt("x) ²È¤Î¥¢¥¤¥Æ¥à¤òÄ´¤Ù¤ë", 23 + xtra_stock, 27);
5047 #else
5048                         prt("g) Get an item.", 21 + xtra_stock, 27);
5049                         prt("d) Drop an item.", 22 + xtra_stock, 27);
5050                         prt("x) eXamine an item in the home.", 23 + xtra_stock, 27);
5051 #endif
5052                 }
5053
5054                 /* Museum commands */
5055                 else if (cur_store_num == STORE_MUSEUM)
5056                 {
5057 #ifdef JP
5058                         prt("d) ¥¢¥¤¥Æ¥à¤òÃÖ¤¯", 21 + xtra_stock, 27);
5059                         prt("r) ¥¢¥¤¥Æ¥à¤ÎŸ¼¨¤ò¤ä¤á¤ë", 22 + xtra_stock, 27);
5060                         prt("x) Çîʪ´Û¤Î¥¢¥¤¥Æ¥à¤òÄ´¤Ù¤ë", 23 + xtra_stock, 27);
5061 #else
5062                         prt("d) Drop an item.", 21 + xtra_stock, 27);
5063                         prt("r) order to Remove an item.", 22 + xtra_stock, 27);
5064                         prt("x) eXamine an item in the museum.", 23 + xtra_stock, 27);
5065 #endif
5066                 }
5067
5068                 /* Shop commands XXX XXX XXX */
5069                 else
5070                 {
5071 #ifdef JP
5072                         prt("p) ¾¦ÉʤòÇ㤦", 21 + xtra_stock, 30);
5073                         prt("s) ¥¢¥¤¥Æ¥à¤òÇä¤ë", 22 + xtra_stock, 30);
5074                         prt("x) ¾¦ÉʤòÄ´¤Ù¤ë", 23 + xtra_stock,30);
5075 #else
5076                         prt("p) Purchase an item.", 21 + xtra_stock, 30);
5077                         prt("s) Sell an item.", 22 + xtra_stock, 30);
5078                         prt("x) eXamine an item in the shop", 23 + xtra_stock,30);
5079 #endif
5080                 }
5081
5082 #ifdef JP
5083                 /* ´ðËÜŪ¤Ê¥³¥Þ¥ó¥É¤ÎÄɲÃɽ¼¨ */
5084
5085                 prt("i/e) »ý¤Áʪ/ÁõÈ÷¤Î°ìÍ÷", 21 + xtra_stock, 56);
5086
5087                 if (rogue_like_commands)
5088                 {
5089                         prt("w/T) ÁõÈ÷¤¹¤ë/¤Ï¤º¤¹", 22 + xtra_stock, 56);
5090                 }
5091                 else
5092                 {
5093                         prt("w/t) ÁõÈ÷¤¹¤ë/¤Ï¤º¤¹", 22 + xtra_stock, 56);
5094                 }
5095 #else
5096                 prt("i/e) Inventry/Equipment list", 21 + xtra_stock, 56);
5097
5098                 if (rogue_like_commands)
5099                 {
5100                         prt("w/T) Wear/Take off equipment", 22 + xtra_stock, 56);
5101                 }
5102                 else
5103                 {
5104                         prt("w/t) Wear/Take off equipment", 22 + xtra_stock, 56);
5105                 }
5106 #endif
5107                 /* Prompt */
5108 #ifdef JP
5109                 prt("¥³¥Þ¥ó¥É:", 20 + xtra_stock, 0);
5110 #else
5111                 prt("You may: ", 20 + xtra_stock, 0);
5112 #endif
5113
5114
5115                 /* Get a command */
5116                 request_command(TRUE);
5117
5118                 /* Process the command */
5119                 store_process_command();
5120
5121                 /*
5122                  * Hack -- To redraw missiles damage and prices in store
5123                  * If player's charisma changes, or if player changes a bow, PU_BONUS is set
5124                  */
5125                 need_redraw_store_inv = (p_ptr->update & PU_BONUS) ? TRUE : FALSE;
5126
5127                 /* Hack -- Character is still in "icky" mode */
5128                 character_icky = TRUE;
5129
5130                 /* Notice stuff */
5131                 notice_stuff();
5132
5133                 /* Handle stuff */
5134                 handle_stuff();
5135
5136                 /* XXX XXX XXX Pack Overflow */
5137                 if (inventory[INVEN_PACK].k_idx)
5138                 {
5139                         int item = INVEN_PACK;
5140
5141                         object_type *o_ptr = &inventory[item];
5142
5143                         /* Hack -- Flee from the store */
5144                         if (cur_store_num != STORE_HOME)
5145                         {
5146                                 /* Message */
5147 #ifdef JP
5148                                 if (cur_store_num == STORE_MUSEUM)
5149                                         msg_print("¥¶¥Ã¥¯¤«¤é¥¢¥¤¥Æ¥à¤¬¤¢¤Õ¤ì¤½¤¦¤Ê¤Î¤Ç¡¢¤¢¤ï¤Æ¤ÆÇîʪ´Û¤«¤é½Ð¤¿...");
5150                                 else
5151                                         msg_print("¥¶¥Ã¥¯¤«¤é¥¢¥¤¥Æ¥à¤¬¤¢¤Õ¤ì¤½¤¦¤Ê¤Î¤Ç¡¢¤¢¤ï¤Æ¤ÆŹ¤«¤é½Ð¤¿...");
5152 #else
5153                                 if (cur_store_num == STORE_MUSEUM)
5154                                         msg_print("Your pack is so full that you flee the Museum...");
5155                                 else
5156                                         msg_print("Your pack is so full that you flee the store...");
5157 #endif
5158
5159
5160                                 /* Leave */
5161                                 leave_store = TRUE;
5162                         }
5163
5164                         /* Hack -- Flee from the home */
5165                         else if (!store_check_num(o_ptr))
5166                         {
5167                                 /* Message */
5168 #ifdef JP
5169                                 msg_print("¥¶¥Ã¥¯¤«¤é¥¢¥¤¥Æ¥à¤¬¤¢¤Õ¤ì¤½¤¦¤Ê¤Î¤Ç¡¢¤¢¤ï¤Æ¤Æ²È¤«¤é½Ð¤¿...");
5170 #else
5171                                 msg_print("Your pack is so full that you flee your home...");
5172 #endif
5173
5174
5175                                 /* Leave */
5176                                 leave_store = TRUE;
5177                         }
5178
5179                         /* Hack -- Drop items into the home */
5180                         else
5181                         {
5182                                 int item_pos;
5183
5184                                 object_type forge;
5185                                 object_type *q_ptr;
5186
5187                                 char o_name[MAX_NLEN];
5188
5189
5190                                 /* Give a message */
5191 #ifdef JP
5192                                 msg_print("¥¶¥Ã¥¯¤«¤é¥¢¥¤¥Æ¥à¤¬¤¢¤Õ¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª");
5193 #else
5194                                 msg_print("Your pack overflows!");
5195 #endif
5196
5197
5198                                 /* Get local object */
5199                                 q_ptr = &forge;
5200
5201                                 /* Grab a copy of the item */
5202                                 object_copy(q_ptr, o_ptr);
5203
5204                                 /* Describe it */
5205                                 object_desc(o_name, q_ptr, 0);
5206
5207                                 /* Message */
5208 #ifdef JP
5209                                 msg_format("%s¤¬Íî¤Á¤¿¡£(%c)", o_name, index_to_label(item));
5210 #else
5211                                 msg_format("You drop %s (%c).", o_name, index_to_label(item));
5212 #endif
5213
5214
5215                                 /* Remove it from the players inventory */
5216                                 inven_item_increase(item, -255);
5217                                 inven_item_describe(item);
5218                                 inven_item_optimize(item);
5219
5220                                 /* Handle stuff */
5221                                 handle_stuff();
5222
5223                                 /* Let the home carry it */
5224                                 item_pos = home_carry(q_ptr);
5225
5226                                 /* Redraw the home */
5227                                 if (item_pos >= 0)
5228                                 {
5229                                         store_top = (item_pos / store_bottom) * store_bottom;
5230                                         display_inventory();
5231                                 }
5232                         }
5233                 }
5234
5235                 /* Hack -- Redisplay store prices if charisma changes */
5236                 /* Hack -- Redraw missiles damage if player changes bow */
5237                 if (need_redraw_store_inv) display_inventory();
5238
5239                 /* Hack -- get kicked out of the store */
5240                 if (st_ptr->store_open >= turn) leave_store = TRUE;
5241         }
5242
5243         select_floor_music();
5244
5245         p_ptr->town_num = old_town_num;
5246
5247         /* Free turn XXX XXX XXX */
5248         energy_use = 100;
5249
5250
5251         /* Hack -- Character is no longer in "icky" mode */
5252         character_icky = FALSE;
5253
5254
5255         /* Hack -- Cancel automatic command */
5256         command_new = 0;
5257
5258         /* Hack -- Cancel "see" mode */
5259         command_see = FALSE;
5260
5261         /* Allow expanding macros */
5262         get_com_no_macros = FALSE;
5263
5264         /* Flush messages XXX XXX XXX */
5265         msg_print(NULL);
5266
5267
5268         /* Clear the screen */
5269         Term_clear();
5270
5271
5272         /* Update everything */
5273         p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
5274         p_ptr->update |= (PU_MONSTERS);
5275
5276         /* Redraw entire screen */
5277         p_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY);
5278
5279         /* Redraw map */
5280         p_ptr->redraw |= (PR_MAP);
5281
5282         /* Window stuff */
5283         p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5284 }
5285
5286
5287
5288 /*!
5289  * @brief ¸½ºß¤ÎÄ®¤ÎŹ¼ç¤ò¸òÂ夵¤»¤ë /
5290  * Shuffle one of the stores.
5291  * @param which Å¹ÊÞ¼ïÎà¤ÎID
5292  * @return ¤Ê¤·
5293  */
5294 void store_shuffle(int which)
5295 {
5296         int i, j;
5297
5298
5299         /* Ignore home */
5300         if (which == STORE_HOME) return;
5301         if (which == STORE_MUSEUM) return;
5302
5303
5304         /* Save the store index */
5305         cur_store_num = which;
5306
5307         /* Activate that store */
5308         st_ptr = &town[p_ptr->town_num].store[cur_store_num];
5309
5310         j = st_ptr->owner;
5311         /* Pick a new owner */
5312         while(1)
5313         {
5314                 st_ptr->owner = (byte)randint0(MAX_OWNERS);
5315                 if (j == st_ptr->owner) continue;
5316                 for (i = 1;i < max_towns; i++)
5317                 {
5318                         if (i == p_ptr->town_num) continue;
5319                         if (st_ptr->owner == town[i].store[cur_store_num].owner) break;
5320                 }
5321                 if (i == max_towns) break;
5322         }
5323
5324         /* Activate the new owner */
5325         ot_ptr = &owners[cur_store_num][st_ptr->owner];
5326
5327
5328         /* Reset the owner data */
5329         st_ptr->insult_cur = 0;
5330         st_ptr->store_open = 0;
5331         st_ptr->good_buy = 0;
5332         st_ptr->bad_buy = 0;
5333
5334
5335         /* Hack -- discount all the items */
5336         for (i = 0; i < st_ptr->stock_num; i++)
5337         {
5338                 object_type *o_ptr;
5339
5340                 /* Get the item */
5341                 o_ptr = &st_ptr->stock[i];
5342
5343                 if (!object_is_artifact(o_ptr))
5344                 {
5345                         /* Hack -- Sell all non-artifact old items for "half price" */
5346                         o_ptr->discount = 50;
5347
5348                         /* Hack -- Items are no longer "fixed price" */
5349                         o_ptr->ident &= ~(IDENT_FIXED);
5350
5351                         /* Mega-Hack -- Note that the item is "on sale" */
5352 #ifdef JP
5353                         o_ptr->inscription = quark_add("Çä½ÐÃæ");
5354 #else
5355                         o_ptr->inscription = quark_add("on sale");
5356 #endif
5357                 }
5358         }
5359 }
5360
5361
5362 /*!
5363  * @brief Å¹¤ÎÉÊ·¤¨¤òÊѲ½¤µ¤»¤ë /
5364  * Maintain the inventory at the stores.
5365  * @param town_num Ä®¤ÎID
5366  * @param store_num Å¹ÊÞ¼ïÎà¤ÎID
5367  * @return ¤Ê¤·
5368  */
5369 void store_maint(int town_num, int store_num)
5370 {
5371         int             j;
5372
5373         cur_store_num = store_num;
5374
5375         /* Ignore home */
5376         if (store_num == STORE_HOME) return;
5377         if (store_num == STORE_MUSEUM) return;
5378
5379         /* Activate that store */
5380         st_ptr = &town[town_num].store[store_num];
5381
5382         /* Activate the owner */
5383         ot_ptr = &owners[store_num][st_ptr->owner];
5384
5385         /* Store keeper forgives the player */
5386         st_ptr->insult_cur = 0;
5387
5388         /* Mega-Hack -- prune the black market */
5389         if (store_num == STORE_BLACK)
5390         {
5391                 /* Destroy crappy black market items */
5392                 for (j = st_ptr->stock_num - 1; j >= 0; j--)
5393                 {
5394                         object_type *o_ptr = &st_ptr->stock[j];
5395
5396                         /* Destroy crappy items */
5397                         if (black_market_crap(o_ptr))
5398                         {
5399                                 /* Destroy the item */
5400                                 store_item_increase(j, 0 - o_ptr->number);
5401                                 store_item_optimize(j);
5402                         }
5403                 }
5404         }
5405
5406
5407         /* Choose the number of slots to keep */
5408         j = st_ptr->stock_num;
5409
5410         /* Sell a few items */
5411         j = j - randint1(STORE_TURNOVER);
5412
5413         /* Never keep more than "STORE_MAX_KEEP" slots */
5414         if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
5415
5416         /* Always "keep" at least "STORE_MIN_KEEP" items */
5417         if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
5418
5419         /* Hack -- prevent "underflow" */
5420         if (j < 0) j = 0;
5421
5422         /* Destroy objects until only "j" slots are left */
5423         while (st_ptr->stock_num > j) store_delete();
5424
5425
5426         /* Choose the number of slots to fill */
5427         j = st_ptr->stock_num;
5428
5429         /* Buy some more items */
5430         j = j + randint1(STORE_TURNOVER);
5431
5432         /* Never keep more than "STORE_MAX_KEEP" slots */
5433         if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
5434
5435         /* Always "keep" at least "STORE_MIN_KEEP" items */
5436         if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
5437
5438         /* Hack -- prevent "overflow" */
5439         if (j >= st_ptr->stock_size) j = st_ptr->stock_size - 1;
5440
5441         /* Acquire some new items */
5442         while (st_ptr->stock_num < j) store_create();
5443 }
5444
5445
5446 /*!
5447  * @brief Å¹ÊÞ¾ðÊó¤ò½é´ü²½¤¹¤ë /
5448  * Initialize the stores
5449  * @param town_num Ä®¤ÎID
5450  * @param store_num Å¹ÊÞ¼ïÎà¤ÎID
5451  * @return ¤Ê¤·
5452  */
5453 void store_init(int town_num, int store_num)
5454 {
5455         int             k;
5456
5457         cur_store_num = store_num;
5458
5459         /* Activate that store */
5460         st_ptr = &town[town_num].store[store_num];
5461
5462
5463         /* Pick an owner */
5464         while(1)
5465         {
5466                 int i;
5467
5468                 st_ptr->owner = (byte)randint0(MAX_OWNERS);
5469                 for (i = 1;i < max_towns; i++)
5470                 {
5471                         if (i == town_num) continue;
5472                         if (st_ptr->owner == town[i].store[store_num].owner) break;
5473                 }
5474                 if (i == max_towns) break;
5475         }
5476
5477         /* Activate the new owner */
5478         ot_ptr = &owners[store_num][st_ptr->owner];
5479
5480
5481         /* Initialize the store */
5482         st_ptr->store_open = 0;
5483         st_ptr->insult_cur = 0;
5484         st_ptr->good_buy = 0;
5485         st_ptr->bad_buy = 0;
5486
5487         /* Nothing in stock */
5488         st_ptr->stock_num = 0;
5489
5490         /*
5491          * MEGA-HACK - Last visit to store is
5492          * BEFORE player birth to enable store restocking
5493          */
5494         st_ptr->last_visit = -10L * TURNS_PER_TICK * STORE_TICKS;
5495
5496         /* Clear any old items */
5497         for (k = 0; k < st_ptr->stock_size; k++)
5498         {
5499                 object_wipe(&st_ptr->stock[k]);
5500         }
5501 }
5502
5503
5504 /*!
5505  * @brief ¥¢¥¤¥Æ¥à¤òÄ®¤Î¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Ë°ÜÆ°¤µ¤»¤ë /
5506  * @param o_ptr °ÜÆ°¤µ¤»¤¿¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½Â¤Âλ²¾È¥Ý¥¤¥ó¥¿
5507  * @return ¤Ê¤·
5508  */
5509 void move_to_black_market(object_type *o_ptr)
5510 {
5511         /* Not in town */
5512         if (!p_ptr->town_num) return;
5513
5514         st_ptr = &town[p_ptr->town_num].store[STORE_BLACK];
5515
5516         o_ptr->ident |= IDENT_STORE;
5517
5518         (void)store_carry(o_ptr);
5519
5520         object_wipe(o_ptr); /* Don't leave a bogus object behind... */
5521 }
5522