OSDN Git Service

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