OSDN Git Service

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