OSDN Git Service

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