4 * Copyright (c) 1997 Ben Harrison, James E. Wilson, Robert A. Koeneke
6 * This software may be copied and distributed for educational, research,
7 * and not for profit purposes provided that this copyright and statement
8 * are included in all such copies. Other copyrights may also apply.
11 /* Purpose: Store commands */
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;
23 static s16b old_town_num = 0;
24 static s16b inner_town_num = 0;
25 #define RUMOR_CHANCE 8
27 #define MAX_COMMENT_1 6
29 static cptr comment_1[MAX_COMMENT_1] =
50 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÄɲåá¥Ã¥»¡¼¥¸¡Ê¾µÂú¡Ë */
51 static cptr comment_1_B[MAX_COMMENT_1] = {
52 "¤Þ¤¢¡¢¤½¤ì¤Ç¤¤¤¤¤ä¡£",
53 "º£Æü¤Ï¤½¤ì¤Ç´ªÊÛ¤·¤Æ¤ä¤ë¡£",
60 #define MAX_COMMENT_2A 2
62 static cptr comment_2a[MAX_COMMENT_2A] =
65 "»ä¤ÎǦÂÑÎϤò»î¤·¤Æ¤¤¤ë¤Î¤«¤¤¡© $%s ¤¬ºÇ¸å¤À¡£",
66 "²æËý¤Ë¤â¸ÂÅÙ¤¬¤¢¤ë¤¾¡£ $%s ¤¬ºÇ¸å¤À¡£"
68 "You try my patience. %s is final.",
69 "My patience grows thin. %s is final."
74 #define MAX_COMMENT_2B 12
76 static cptr comment_2b[MAX_COMMENT_2B] =
79 " $%s ¤°¤é¤¤¤Ï½Ð¤µ¤Ê¤¤ã¥À¥á¤À¤è¡£",
80 " $%s ¤Ê¤é¼õ¤±¼è¤Ã¤Æ¤â¤¤¤¤¤¬¡£",
81 "¥Ï¡ª $%s °Ê²¼¤Ï¤Ê¤¤¤Í¡£",
82 "²¿¤ÆÅÛ¤À¡ª $%s °Ê²¼¤Ï¤¢¤êÆÀ¤Ê¤¤¤¾¡£",
83 "¤½¤ì¤¸¤ã¾¯¤Ê¤¹¤®¤ë¡ª $%s ¤ÏÍߤ·¤¤¤È¤³¤í¤À¡£",
84 "¥Ð¥«¤Ë¤·¤Æ¤¤¤ë¡ª $%s ¤Ï¤â¤é¤ï¤Ê¤¤¤È¡£",
85 "±³¤À¤í¤¦¡ª $%s ¤Ç¤É¤¦¤À¤¤¡©",
86 "¤ª¤¤¤ª¤¤¡ª $%s ¤ò¹Í¤¨¤Æ¤¯¤ì¤Ê¤¤¤«¡©",
87 "1000ɤ¤Î¥ª¡¼¥¯¤Î¥Î¥ß¤Ë¶ì¤·¤á¤é¤ì¤ë¤¬¤¤¤¤¡ª $%s ¤À¡£",
88 "¤ªÁ°¤ÎÂçÀڤʤâ¤Î¤ËºÒ¤¤¤¢¤ì¡ª $%s ¤Ç¤É¤¦¤À¡£",
89 "¥â¥ë¥´¥¹¤Ë¾ÞÌ£¤µ¤ì¤ë¤¬¤¤¤¤¡ªËÜÅö¤Ï $%s ¤Ê¤ó¤À¤í¤¦¡©",
90 "¤ªÁ°¤ÎÊì¿Æ¤Ï¥ª¡¼¥¬¤«¡ª $%s ¤Ï½Ð¤¹¤Ä¤â¤ê¤Ê¤ó¤À¤í¡©"
92 "I can take no less than %s gold pieces.",
93 "I will accept no less than %s gold pieces.",
94 "Ha! No less than %s gold pieces.",
95 "You knave! No less than %s gold pieces.",
96 "That's a pittance! I want %s gold pieces.",
97 "That's an insult! I want %s gold pieces.",
98 "As if! How about %s gold pieces?",
99 "My arse! How about %s gold pieces?",
100 "May the fleas of 1000 orcs molest you! Try %s gold pieces.",
101 "May your most favourite parts go moldy! Try %s gold pieces.",
102 "May Morgoth find you tasty! Perhaps %s gold pieces?",
103 "Your mother was an Ogre! Perhaps %s gold pieces?"
109 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÇä¤ë¤È¤¡Ë */
110 static cptr comment_2b_B[MAX_COMMENT_2B] = {
111 "¤¤¤¯¤é²¶Íͤ¬¤ª¿Í¹¥¤·¤È¤Ï¤¤¤¨ $%s ¤¬¸Â³¦¤À¤Í¡£·ù¤Ê¤éµ¢¤ê¤Ê¡£",
112 "¶â¤¬¤Ê¤¤¤Î¤«¤¤¡¢¤¢¤ó¤¿¡©¤Þ¤º¤Ï²È¤Ëµ¢¤Ã¤Æ $%s ·¤¨¤Æ¤¤Ê¡£",
113 "ʪ¤Î²ÁÃͤ¬Ê¬¤«¤é¤óÅÛ¤À¤Ê¡£¤³¤ì¤Ï $%s ¤¬ÉáÄ̤ʤó¤À¤è¡£",
114 "²¶¤ÎÉÕ¤±¤¿ÃÍÃʤËʸ¶ç¤¬¤¢¤ë¤Î¤«¡© $%s ¤¬¸Â³¦¤À¡£",
115 "¤Ò¤ç¤Ã¤È¤·¤Æ¿·¼ê¤Î¾éÃ̤«¤¤¡© $%s »ý¤Ã¤Æ¤Ê¤¤¤Ê¤éµ¢¤ê¤Ê¡£",
116 "¤¦¤Á¤Ï¾¤ÎŹ¤È¤Ï°ã¤¦¤ó¤À¤è¡£$%s ¤°¤é¤¤¤Ï½Ð¤·¤Ê¡£",
117 "Ç㤦µ¤¤¬¤Ê¤¤¤Ê¤éµ¢¤ê¤Ê¡£ $%s ¤À¤È¸À¤Ã¤Æ¤¤¤ë¤ó¤À¡£",
118 "Ïäˤʤé¤Ê¤¤¤Í¡£ $%s ¤¯¤é¤¤»ý¤Ã¤Æ¤¤¤ë¤ó¤À¤í¡©",
119 "¤Ï¡©¤Ê¤ó¤À¤½¤ê¤ã¡© $%s ¤Î´Ö°ã¤¤¤«¡¢¤Ò¤ç¤Ã¤È¤·¤Æ¡©",
120 "½Ð¸ý¤Ï¤¢¤Ã¤Á¤À¤è¡£¤½¤ì¤È¤â $%s ½Ð¤»¤ë¤Î¤«¤¤¡¢¤¢¤ó¤¿¤Ë¡£",
121 "Ì¿ÃΤ餺¤ÊÅÛ¤À¤Ê¡£ $%s ½Ð¤»¤Ðº£Æü¤Î½ê¤Ï´ªÊÛ¤·¤Æ¤ä¤ë¤è¡£",
122 "¤¦¤Á¤ÎŹ¤ÏÉÏ˳¿Í¤ªÃǤê¤À¡£ $%s ¤°¤é¤¤½Ð¤»¤Ê¤¤¤Î¤«¤¤¡©"
125 #define MAX_COMMENT_3A 2
127 static cptr comment_3a[MAX_COMMENT_3A] =
130 "»ä¤ÎǦÂÑÎϤò»î¤·¤Æ¤¤¤ë¤Î¤«¤¤¡© $%s ¤¬ºÇ¸å¤À¡£",
131 "²æËý¤Ë¤â¸ÂÅÙ¤¬¤¢¤ë¤¾¡£ $%s ¤¬ºÇ¸å¤À¡£"
133 "You try my patience. %s is final.",
134 "My patience grows thin. %s is final."
140 #define MAX_COMMENT_3B 12
142 static cptr comment_3b[MAX_COMMENT_3B] =
145 "Ëܲ»¤ò¸À¤¦¤È $%s ¤Ç¤¤¤¤¤ó¤À¤í¡©",
147 " $%s ¤°¤é¤¤¤Ê¤é½Ð¤·¤Æ¤â¤¤¤¤¤¬¡£",
148 " $%s °Ê¾åʧ¤¦¤Ê¤ó¤Æ¹Í¤¨¤é¤ì¤Ê¤¤¤Í¡£",
149 "¤Þ¤¢Íî¤Á¤Ä¤¤¤Æ¡£ $%s ¤Ç¤É¤¦¤À¤¤¡©",
150 "¤½¤Î¥¬¥é¥¯¥¿¤Ê¤é $%s ¤Ç°ú¤¼è¤ë¤è¡£",
151 "¤½¤ì¤¸¤ã¹â¤¹¤®¤ë¡ª $%s ¤¬¤¤¤¤¤È¤³¤À¤í¡£",
152 "¤É¤¦¤»¤¤¤é¤Ê¤¤¤ó¤À¤í¡ª $%s ¤Ç¤¤¤¤¤À¤í¡©",
153 "¤À¤á¤À¤á¡ª $%s ¤¬¤º¤Ã¤È¤ª»÷¹ç¤¤¤À¤è¡£",
154 "¥Ð¥«¤Ë¤·¤Æ¤¤¤ë¡ª $%s ¤¬¤»¤¤¤¼¤¤¤À¡£",
155 " $%s ¤Ê¤é´ò¤·¤¤¤È¤³¤í¤À¤¬¤Ê¤¢¡£",
156 " $%s ¡¢¤½¤ì°Ê¾å¤Ï¥Ó¥¿°ìʸ½Ð¤µ¤Ê¤¤¤è¡ª"
158 "Perhaps %s gold pieces?",
159 "How about %s gold pieces?",
160 "I will pay no more than %s gold pieces.",
161 "I can afford no more than %s gold pieces.",
162 "Be reasonable. How about %s gold pieces?",
163 "I'll buy it as scrap for %s gold pieces.",
164 "That is too much! How about %s gold pieces?",
165 "That looks war surplus! Say %s gold pieces?",
166 "Never! %s is more like it.",
167 "That's an insult! %s is more like it.",
168 "%s gold pieces and be thankful for it!",
169 "%s gold pieces and not a copper more!"
175 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÇ㤤¼è¤ê¡Ë */
176 static cptr comment_3b_B[MAX_COMMENT_3B] = {
177 " $%s ¤Ã¤Æ¤È¤³¤í¤À¤Í¡£¤½¤Î¤É¤¦¤·¤è¤¦¤â¤Ê¤¤¥¬¥é¥¯¥¿¤Ï¡£",
178 "¤³¤Î²¶¤¬ $%s ¤Ã¤Æ¸À¤Ã¤Æ¤¤¤ë¤ó¤À¤«¤é¡¢¤½¤ÎÄ̤ê¤Ë¤·¤¿Êý¤¬¿È¤Î¤¿¤á¤À¤¾¡£",
179 "²¶¤ÎÍ¥¤·¤µ¤Ë´Å¤¨¤ë¤Î¤â¤¤¤¤²Ã¸º¤Ë¤·¤Æ¤ª¤±¡£ $%s ¤À¡£",
180 "¤½¤ÎÉʤʤé $%s ¤ÇÇä¤Ã¤Æ¤¯¤ì¤Æ¤¤¤ë¤¬¤Í¡¢¾ï¼±¤¢¤ë¿Â»Î¤Ï¤ß¤ó¤Ê¡£",
181 "¤³¤ê¤ã¤Þ¤¿¡¢¤¬¤á¤Ä¤¤ÅÛ¤À¤Ê¡£¤¤¤¯¤é²¶¤¬²¹¸ü¤È¤Ï¤¤¤¨ $%s ¤¬¸Â³¦¤À¡£",
182 " $%s ¤À¡£Ê̤˲¶¤Ï¤½¤ó¤Ê¥¬¥é¥¯¥¿Íߤ·¤¯¤Ï¤Ê¤¤¤ó¤À¤«¤é¡£",
183 "²¶¤Î´ÕÄê³Û¤¬µ¤¤ËÆþ¤é¤Ê¤¤¤Î¤«¡© $%s ¡¢·ù¤Ê¤éµ¢¤ê¤Ê¡£",
184 " $%s ¤Ç°ú¤¼è¤Ã¤Æ¤ä¤ë¤è¡£´î¤ó¤Ç¼õ¤±¼è¤ê¤Ê¡¢ÉÏ˳¿Í¡£",
185 "ʪ¤Î²ÁÃͤ¬Ê¬¤«¤é¤óÅۤϻÏËö¤Ë¤ª¤¨¤ó¤Ê¡£¤½¤ì¤Ï $%s ¤Ê¤ó¤À¤è¡£",
186 "¤½¤ó¤Ê¤Ë¶â¤¬Íߤ·¤¤¤Î¤«¡¢¤¢¤ó¤¿¡© $%s ¤ÇËþ¤Ǥ¤ó¤Î¤«¡©",
187 "Æþ¤ëŹ´Ö°ã¤¨¤Æ¤ó¤¸¤ã¤Ê¤¤¤Î¤«¡© $%s ¤Ç·ù¤Ê¤é¾¤ò¤¢¤¿¤Ã¤Æ¤¯¤ì¡£",
188 "²¶¤Î¸À¤¤Ãͤ˥±¥Á¤ò¤Ä¤±¤ëÅÛ¤¬¤¤¤ë¤È¤Ï¡ª ¤½¤ÎÅÙ¶»¤ËÌȤ¸¤Æ $%s ¤À¡£"
191 #define MAX_COMMENT_4A 4
193 static cptr comment_4a[MAX_COMMENT_4A] =
196 "¤â¤¦¤¿¤¯¤µ¤ó¤À¡ª²¿ÅÙ¤â»ä¤ò¤ï¤º¤é¤ï¤»¤Ê¤¤¤Ç¤¯¤ì¡ª",
197 "¤¦¤¬¡¼¡ª°ìÆü¤Î²æËý¤Î¸ÂÅÙ¤òĶ¤¨¤Æ¤¤¤ë¡ª",
198 "¤â¤¦¤¤¤¤¡ª»þ´Ö¤Î̵Â̰ʳ°¤Î¤Ê¤Ë¤â¤Î¤Ç¤â¤Ê¤¤¡ª",
199 "¤â¤¦¤ä¤Ã¤Æ¤é¤ì¤Ê¤¤¤è¡ª´é¤â¸«¤¿¤¯¤Ê¤¤¡ª"
201 "Enough! You have abused me once too often!",
202 "Arghhh! I have had enough abuse for one day!",
203 "That does it! You shall waste my time no more!",
204 "This is getting nowhere! I'm going to Londis!"
210 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÅܤê¤ÎĺÅÀ¡Ë */
211 static cptr comment_4a_B[MAX_COMMENT_4A] = {
212 "¤Ê¤á¤ä¤¬¤Ã¤Æ¡ª²¹¸ü¤Ê²¶ÍͤǤâ¸Â³¦¤¬¤¢¤ë¤Ã¤Æ¤³¤È¤òÃΤ졪",
213 "²¶¤ò¤³¤³¤Þ¤ÇÅܤ餻¤Æ...Ì¿¤¬¤¢¤ë¤À¤±¤Ç¤â¤¢¤ê¤¬¤¿¤¤¤È»×¤¨¡ª",
214 "¤Õ¤¶¤±¤Æ¤ë¤Î¤«¡ªÎä¤ä¤«¤·¤Ê¤éÁê¼ê¤ò¸«¤Æ¤«¤é¤Ë¤·¤í¡ª",
215 "¤¤¤¤¤«¤²¤ó¤Ë¤·¤í¡ªº£ÅÙ¤³¤ó¤Ê¤Þ¤Í¤·¤¿¤é¤¿¤À¤¸¤ã¤ª¤«¤Í¤¨¤¾¡ª"
218 #define MAX_COMMENT_4B 4
220 static cptr comment_4b[MAX_COMMENT_4B] =
224 "²¶¤ÎÁ°¤«¤é¾Ã¤¨¼º¤»¤í¡ª",
225 "¤É¤Ã¤«¤Ë¹Ô¤Ã¤Á¤Þ¤¨¡ª",
226 "½Ð¤í¡¢½Ð¤í¡¢½Ð¤Æ¹Ô¤±¡ª"
229 "Get out of my sight!",
230 "Begone, you scoundrel!",
237 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÄɤ¤½Ð¤·¡Ë */
238 static cptr comment_4b_B[MAX_COMMENT_4B] = {
239 "ÆóÅ٤Ȥ¦¤Á¤ËÍè¤ë¤ó¤¸¤ã¤Í¤¨¡ª¡ª",
240 "¤È¤Ã¤È¤È¡¢¤É¤Ã¤«¤Ø¼º¤»¤í¡ª¡ª",
241 "º£¤¹¤°¾Ã¤¨¼º¤»¤í¡ª¡ª",
242 "½Ð¤Æ¤¤¤±¡ª½Ð¤Æ¤¤¤±¡ª¡ª"
245 #define MAX_COMMENT_5 8
247 static cptr comment_5[MAX_COMMENT_5] =
252 "¤â¤Ã¤È¿¿ÌÌÌܤ˸À¤Ã¤Æ¤¯¤ì¡ª",
253 "¸ò¾Ä¤¹¤ëµ¤¤¬¤¢¤ë¤Î¤«¤¤¡©",
254 "Îä¤ä¤«¤·¤ËÍ褿¤Î¤«¡ª",
257 "¤Õ¡¼¤à¡¢Îɤ¤Å·µ¤¤À¡£"
261 "You will have to do better than that!",
262 "Do you wish to do business or not?",
263 "You've got to be kidding!",
264 "You'd better be kidding!",
265 "You try my patience.",
266 "Hmmm, nice weather we're having."
272 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥ÈÍÑÄɲåá¥Ã¥»¡¼¥¸¡ÊÅܤê¡Ë */
273 static cptr comment_5_B[MAX_COMMENT_5] = {
274 "»þ´Ö¤Î̵Â̤À¤Ê¡¢¤³¤ì¤Ï¡£",
275 "Ìñ²ð¤Ê¤ªµÒÍͤÀ¤Ê¡ª",
276 "Ïä·¤Æʬ¤«¤ëÁê¼ê¤¸¤ã¤Ê¤µ¤½¤¦¤À¡£",
277 "Äˤ¤Ìܤˤ¢¤¤¤¿¤¤¤é¤·¤¤¤Ê¡ª",
278 "¤Ê¤ó¤Æ¶¯ÍߤÊÅÛ¤À¡ª",
280 "¤É¤¦¤·¤è¤¦¤â¤Ê¤¤ÉÏ˳¿Í¤À¡ª",
281 "·ö²Þ¤òÇä¤Ã¤Æ¤¤¤ë¤Î¤«¡©"
284 #define MAX_COMMENT_6 4
286 static cptr comment_6[MAX_COMMENT_6] =
289 "¤É¤¦¤ä¤éʹ¤´Ö°ã¤¨¤¿¤é¤·¤¤¡£",
290 "¼ºÎé¡¢¤è¤¯Ê¹¤³¤¨¤Ê¤«¤Ã¤¿¤è¡£",
291 "¤¹¤Þ¤Ê¤¤¡¢²¿¤À¤Ã¤Æ¡©",
292 "°¤¤¡¢¤â¤¦°ìÅÙ¸À¤Ã¤Æ¤¯¤ì¤ë¡©"
294 "I must have heard you wrong.",
295 "I'm sorry, I missed that.",
296 "I'm sorry, what was that?",
297 "Sorry, what was that again?"
307 static void say_comment_1(void)
312 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î¤È¤¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
313 if ( cur_store_num == STORE_BLACK ) {
314 msg_print(comment_1_B[randint0(MAX_COMMENT_1)]);
317 msg_print(comment_1[randint0(MAX_COMMENT_1)]);
320 msg_print(comment_1[randint0(MAX_COMMENT_1)]);
324 if (one_in_(RUMOR_CHANCE))
327 msg_print("Ź¼ç¤Ï¼ª¤¦¤Á¤·¤¿:");
329 msg_print("The shopkeeper whispers something into your ear:");
334 if (!get_rnd_line_jonly("rumors_j.txt", 0, rumour, 10))
336 if (!get_rnd_line("rumors.txt", 0, rumour))
345 * Continue haggling (player is buying)
347 static void say_comment_2(s32b value, int annoyed)
351 /* Prepare a string to insert */
352 sprintf(tmp_val, "%ld", (long)value);
357 /* Formatted message */
358 msg_format(comment_2a[randint0(MAX_COMMENT_2A)], tmp_val);
364 /* Formatted message */
366 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
367 if ( cur_store_num == STORE_BLACK ){
368 msg_format(comment_2b_B[randint0(MAX_COMMENT_2B)], tmp_val);
371 msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val);
374 msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val);
382 * Continue haggling (player is selling)
384 static void say_comment_3(s32b value, int annoyed)
388 /* Prepare a string to insert */
389 sprintf(tmp_val, "%ld", (long)value);
394 /* Formatted message */
395 msg_format(comment_3a[randint0(MAX_COMMENT_3A)], tmp_val);
401 /* Formatted message */
403 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
404 if ( cur_store_num == STORE_BLACK ){
405 msg_format(comment_3b_B[randint0(MAX_COMMENT_3B)], tmp_val);
408 msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val);
411 msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val);
419 * Kick 'da bum out. -RAK-
421 static void say_comment_4(void)
424 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
425 if ( cur_store_num == STORE_BLACK ){
426 msg_print(comment_4a_B[randint0(MAX_COMMENT_4A)]);
427 msg_print(comment_4b_B[randint0(MAX_COMMENT_4B)]);
430 msg_print(comment_4a[randint0(MAX_COMMENT_4A)]);
431 msg_print(comment_4b[randint0(MAX_COMMENT_4B)]);
434 msg_print(comment_4a[randint0(MAX_COMMENT_4A)]);
435 msg_print(comment_4b[randint0(MAX_COMMENT_4B)]);
442 * You are insulting me
444 static void say_comment_5(void)
447 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸¤ò½Ð¤¹ */
448 if ( cur_store_num == STORE_BLACK ){
449 msg_print(comment_5_B[randint0(MAX_COMMENT_5)]);
452 msg_print(comment_5[randint0(MAX_COMMENT_5)]);
455 msg_print(comment_5[randint0(MAX_COMMENT_5)]);
462 * That makes no sense.
464 static void say_comment_6(void)
466 msg_print(comment_6[randint0(MAX_COMMENT_6)]);
472 * Messages for reacting to purchase prices.
475 #define MAX_COMMENT_7A 4
477 static cptr comment_7a[MAX_COMMENT_7A] =
482 "狼¤¬¤à¤»¤Óµã¤¯À¼¤¬Ê¹¤³¤¨¤ë...¡£",
483 "Ź¼ç¤¬²ù¤·¤²¤Ë¤ï¤á¤¤¤Æ¤¤¤ë¡ª"
487 "You hear someone sobbing...",
488 "The shopkeeper howls in agony!"
493 #define MAX_COMMENT_7B 4
495 static cptr comment_7b[MAX_COMMENT_7B] =
500 "Ź¼ç¤¬º¨¤á¤·¤½¤¦¤Ë¸«¤Æ¤¤¤ë¡£",
505 "The shopkeeper curses at you.",
506 "The shopkeeper glares at you."
511 #define MAX_COMMENT_7C 4
513 static cptr comment_7c[MAX_COMMENT_7C] =
517 "·¯¤¬Å·»È¤Ë¸«¤¨¤ë¤è¡ª",
518 "Ź¼ç¤¬¥¯¥¹¥¯¥¹¾Ð¤Ã¤Æ¤¤¤ë¡£",
519 "Ź¼ç¤¬ÂçÀ¼¤Ç¾Ð¤Ã¤Æ¤¤¤ë¡£"
522 "You've made my day!",
523 "The shopkeeper giggles.",
524 "The shopkeeper laughs loudly."
529 #define MAX_COMMENT_7D 4
531 static cptr comment_7d[MAX_COMMENT_7D] =
535 "¤³¤ó¤Ê¤ª¤¤¤·¤¤»×¤¤¤ò¤·¤¿¤é¡¢¿¿ÌÌÌܤËƯ¤±¤Ê¤¯¤Ê¤ë¤Ê¤¡¡£",
536 "Ź¼ç¤Ï´ò¤·¤¯¤ÆÄ·¤Í²ó¤Ã¤Æ¤¤¤ë¡£",
537 "Ź¼ç¤ÏËþÌ̤˾Фߤò¤¿¤¿¤¨¤Æ¤¤¤ë¡£"
540 "I think I'll retire!",
541 "The shopkeeper jumps for joy.",
542 "The shopkeeper smiles gleefully."
549 * Let a shop-keeper React to a purchase
551 * We paid "price", it was worth "value", and we thought it was worth "guess"
553 static void purchase_analyze(s32b price, s32b value, s32b guess)
555 /* Item was worthless, but we bought it */
556 if ((value <= 0) && (price > value))
559 msg_print(comment_7a[randint0(MAX_COMMENT_7A)]);
561 chg_virtue(V_HONOUR, -1);
562 chg_virtue(V_JUSTICE, -1);
568 /* Item was cheaper than we thought, and we paid more than necessary */
569 else if ((value < guess) && (price > value))
572 msg_print(comment_7b[randint0(MAX_COMMENT_7B)]);
574 chg_virtue(V_JUSTICE, -1);
576 chg_virtue(V_HONOUR, -1);
582 /* Item was a good bargain, and we got away with it */
583 else if ((value > guess) && (value < (4 * guess)) && (price < value))
586 msg_print(comment_7c[randint0(MAX_COMMENT_7C)]);
589 chg_virtue(V_HONOUR, -1);
591 chg_virtue(V_HONOUR, 1);
597 /* Item was a great bargain, and we got away with it */
598 else if ((value > guess) && (price < value))
601 msg_print(comment_7d[randint0(MAX_COMMENT_7D)]);
604 chg_virtue(V_HONOUR, -1);
606 chg_virtue(V_HONOUR, 1);
608 if (10 * price < value)
609 chg_virtue(V_SACRIFICE, 1);
621 /* ÆüËܸìÈǤξì¹ç¤Ï¾å¤ÎÊý¤Ë°ÜÆ°¤·¤Æ¤¢¤ê¤Þ¤¹ */
624 * We store the current "store number" here so everyone can access it
626 static int cur_store_num = 7;
629 * We store the current "store page" here so everyone can access it
631 static int store_top = 0;
634 * We store the current "store pointer" here so everyone can access it
636 static store_type *st_ptr = NULL;
639 * We store the current "owner type" here so everyone can access it
641 static owner_type *ot_ptr = NULL;
645 * We store the current "store feat" here so everyone can access it
647 static int cur_store_feat;
656 * Buying and selling adjustments for race combinations.
657 * Entry[owner][player] gives the basic "cost inflation".
659 static byte rgold_adj[MAX_RACES][MAX_RACES] =
661 /*Hum, HfE, Elf, Hal, Gno, Dwa, HfO, HfT, Dun, HiE, Barbarian,
662 HfOg, HGn, HTn, Cyc, Yek, Klc, Kbd, Nbl, DkE, Drc, Mind Flayer,
663 Imp, Glm, Skl, Zombie, Vampire, Spectre, Fairy, Beastman, Ent,
667 { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
668 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
669 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140,
670 100, 120, 110, 105 },
673 { 110, 100, 100, 105, 110, 120, 125, 130, 110, 100, 110,
674 120, 115, 108, 115, 110, 110, 120, 120, 115, 115, 110,
675 120, 110, 110, 110, 120, 110, 100, 125, 100, 95, 140,
676 110, 115, 110, 110 },
679 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
680 120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108,
681 120, 115, 110, 110, 120, 110, 100, 125, 100, 95, 140,
682 110, 110, 105, 110 },
685 { 115, 110, 105, 95, 105, 110, 115, 130, 115, 105, 115,
686 125, 120, 120, 125, 115, 110, 120, 120, 120, 115, 115,
687 120, 110, 120, 120, 130, 110, 110, 130, 110, 95, 140,
688 115, 120, 105, 115 },
691 { 115, 115, 110, 105, 95, 110, 115, 130, 115, 110, 115,
692 120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110,
693 120, 101, 110, 110, 120, 120, 115, 130, 115, 95, 140,
694 115, 110, 110, 115 },
697 { 115, 120, 120, 110, 110, 95, 125, 135, 115, 120, 115,
698 125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120,
699 120, 105, 115, 115, 115, 115, 120, 130, 120, 95, 140,
700 115, 110, 115, 115 },
703 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
704 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
705 115, 125, 120, 120, 115, 120, 125, 115, 125, 95, 140,
706 115, 110, 115, 115 },
709 { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
710 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
711 110, 115, 112, 112, 115, 112, 120, 110, 120, 95, 140,
712 110, 110, 115, 110 },
715 { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
716 120, 120, 105, 120, 115, 105, 115, 120, 110, 105, 105,
717 120, 105, 120, 120, 125, 120, 105, 135, 105, 95, 140,
718 100, 110, 110, 100 },
721 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
722 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
723 125, 115, 120, 120, 125, 120, 100, 125, 100, 95, 140,
724 110, 110, 105, 110 },
726 /* Human / Barbarian (copied from human) */
727 { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
728 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
729 115, 105, 125, 125, 130, 125, 115, 120, 115, 95, 140,
730 100, 120, 110, 100 },
732 /* Half-Ogre: theoretical, copied from half-troll */
733 { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
734 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
735 110, 115, 112, 112, 115, 112, 120, 110, 120, 95, 140,
736 110, 110, 115, 110 },
738 /* Half-Giant: theoretical, copied from half-troll */
739 { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
740 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
741 110, 115, 112, 112, 115, 112, 130, 120, 130, 95, 140,
742 110, 110, 115, 110 },
744 /* Half-Titan: theoretical, copied from High_Elf */
745 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
746 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
747 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140,
748 110, 110, 115, 110 },
750 /* Cyclops: theoretical, copied from half-troll */
751 { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
752 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
753 110, 115, 112, 112, 115, 112, 130, 130, 130, 95, 140,
754 110, 110, 115, 110 },
756 /* Yeek: theoretical, copied from Half-Orc */
757 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
758 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
759 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140,
760 115, 110, 115, 115 },
762 /* Klackon: theoretical, copied from Gnome */
763 { 115, 115, 110, 105, 95, 110, 115, 130, 115, 110, 115,
764 120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110,
765 120, 101, 110, 110, 120, 120, 130, 130, 130, 95, 140,
766 115, 110, 115, 115 },
768 /* Kobold: theoretical, copied from Half-Orc */
769 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
770 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
771 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140,
772 115, 110, 115, 115 },
774 /* Nibelung: theoretical, copied from Dwarf */
775 { 115, 120, 120, 110, 110, 95, 125, 135, 115, 120, 115,
776 125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120,
777 120, 105, 115, 115, 120, 120, 130, 130, 130, 95, 140,
778 115, 135, 115, 115 },
781 { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115,
782 115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110,
783 110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120,
784 110, 101, 115, 110 },
786 /* Draconian: theoretical, copied from High_Elf */
787 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
788 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
789 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140,
790 110, 110, 115, 110 },
792 /* Mind Flayer: theoretical, copied from High_Elf */
793 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
794 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
795 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140,
796 110, 110, 115, 110 },
798 /* Imp: theoretical, copied from High_Elf */
799 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
800 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
801 125, 115, 120, 120, 120, 120, 130, 130, 130, 120, 120,
802 110, 110, 115, 110 },
804 /* Golem: theoretical, copied from High_Elf */
805 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
806 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
807 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140,
808 110, 110, 115, 110 },
810 /* Skeleton: theoretical, copied from half-orc */
811 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
812 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
813 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
814 115, 110, 125, 115 },
816 /* Zombie: Theoretical, copied from half-orc */
817 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
818 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
819 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
820 115, 110, 125, 115 },
822 /* Vampire: Theoretical, copied from half-orc */
823 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
824 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
825 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
826 115, 110, 125, 115 },
828 /* Spectre: Theoretical, copied from half-orc */
829 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
830 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
831 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
832 115, 110, 125, 115 },
834 /* Sprite: Theoretical, copied from half-orc */
835 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
836 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
837 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140,
838 115, 110, 105, 115 },
840 /* Beastman: Theoretical, copied from half-orc */
841 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
842 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
843 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140,
844 115, 110, 115, 115 },
847 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
848 120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108,
849 120, 115, 110, 110, 120, 110, 100, 125, 100, 95, 140,
850 110, 110, 105, 110 },
853 { 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
854 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
855 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 160,
859 { 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
860 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
861 140, 140, 140, 140, 140, 140, 140, 140, 140, 160, 120,
862 140, 140, 140, 140 },
865 { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
866 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
867 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140,
868 100, 120, 110, 100 },
871 { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115,
872 115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110,
873 110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120,
874 110, 101, 115, 110 },
877 { 110, 110, 105, 105, 110, 115, 115, 115, 110, 105, 110,
878 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
879 115, 115, 125, 125, 125, 125, 105, 115, 105, 95, 140,
880 110, 115, 100, 110 },
883 { 105, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
884 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
885 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140,
886 100, 120, 110, 100 },
893 * Determine the price of an item (qty one) in a store.
895 * This function takes into account the player's charisma, and the
896 * shop-keepers friendliness, and the shop-keeper's base greed, but
897 * never lets a shop-keeper lose money in a transaction.
899 * The "greed" value should exceed 100 when the player is "buying" the
900 * item, and should be less than 100 when the player is "selling" it.
902 * Hack -- the black market always charges twice as much as it should.
904 * Charisma adjustment runs from 80 to 130
905 * Racial adjustment runs from 95 to 130
907 * Since greed/charisma/racial adjustments are centered at 100, we need
908 * to adjust (by 200) to extract a usable multiplier. Note that the
909 * "greed" value is always something (?).
911 static s32b price_item(object_type *o_ptr, int greed, bool flip)
918 /* Get the value of one of the items */
919 price = object_value(o_ptr);
921 /* Worthless items */
922 if (price <= 0) return (0L);
925 /* Compute the racial factor */
926 factor = rgold_adj[ot_ptr->owner_race][p_ptr->prace];
928 /* Add in the charisma factor */
929 factor += adj_chr_gold[p_ptr->stat_ind[A_CHR]];
935 /* Adjust for greed */
936 adjust = 100 + (300 - (greed + factor));
938 /* Never get "silly" */
939 if (adjust > 100) adjust = 100;
941 /* Mega-Hack -- Black market sucks */
942 if (cur_store_num == STORE_BLACK)
945 /* Compute the final price (with rounding) */
946 /* Hack -- prevent underflow */
947 price = (price * adjust + 50L) / 100L;
950 /* Shop is selling */
953 /* Adjust for greed */
954 adjust = 100 + ((greed + factor) - 300);
956 /* Never get "silly" */
957 if (adjust < 100) adjust = 100;
959 /* Mega-Hack -- Black market sucks */
960 if (cur_store_num == STORE_BLACK)
963 /* Compute the final price (with rounding) */
964 /* Hack -- prevent overflow */
965 price = (s32b)(((u32b)price * (u32b)adjust + 50UL) / 100UL);
968 /* Note -- Never become "free" */
969 if (price <= 0L) return (1L);
971 /* Return the price */
977 * Certain "cheap" objects should be created in "piles"
978 * Some objects can be sold at a "discount" (in small piles)
980 static void mass_produce(object_type *o_ptr)
985 s32b cost = object_value(o_ptr);
988 /* Analyze the type */
991 /* Food, Flasks, and Lites */
996 if (cost <= 5L) size += damroll(3, 5);
997 if (cost <= 20L) size += damroll(3, 5);
998 if (cost <= 50L) size += damroll(2, 2);
1005 if (cost <= 60L) size += damroll(3, 5);
1006 if (cost <= 240L) size += damroll(1, 5);
1007 if (o_ptr->sval == SV_SCROLL_STAR_IDENTIFY) size += damroll(3, 5);
1008 if (o_ptr->sval == SV_SCROLL_STAR_REMOVE_CURSE) size += damroll(1, 4);
1013 case TV_SORCERY_BOOK:
1014 case TV_NATURE_BOOK:
1018 case TV_ARCANE_BOOK:
1020 case TV_DAEMON_BOOK:
1021 case TV_CRUSADE_BOOK:
1023 case TV_HISSATSU_BOOK:
1025 if (cost <= 50L) size += damroll(2, 3);
1026 if (cost <= 500L) size += damroll(1, 3);
1044 if (object_is_artifact(o_ptr)) break;
1045 if (object_is_ego(o_ptr)) break;
1046 if (cost <= 10L) size += damroll(3, 5);
1047 if (cost <= 100L) size += damroll(3, 5);
1056 if (cost <= 5L) size += damroll(5, 5);
1057 if (cost <= 50L) size += damroll(5, 5);
1058 if (cost <= 500L) size += damroll(5, 5);
1064 if (cost <= 100L) size += damroll(2, 2);
1065 if (cost <= 1000L) size += damroll(2, 2);
1078 * Because many rods (and a few wands and staffs) are useful mainly
1079 * in quantity, the Black Market will occasionally have a bunch of
1086 if ((cur_store_num == STORE_BLACK) && one_in_(3))
1088 if (cost < 1601L) size += damroll(1, 5);
1089 else if (cost < 3201L) size += damroll(1, 3);
1092 /* Ensure that mass-produced rods and wands get the correct pvals. */
1093 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
1095 o_ptr->pval *= size;
1102 /* Pick a discount */
1107 else if (one_in_(25))
1111 else if (one_in_(150))
1115 else if (one_in_(300))
1119 else if (one_in_(500))
1125 if (o_ptr->art_name)
1127 if (cheat_peek && discount)
1130 msg_print("¥é¥ó¥À¥à¥¢¡¼¥Æ¥£¥Õ¥¡¥¯¥È¤ÏÃÍ°ú¤¤Ê¤·¡£");
1132 msg_print("No discount on random artifacts.");
1139 /* Save the discount */
1140 o_ptr->discount = discount;
1142 /* Save the total pile size */
1143 o_ptr->number = size - (size * discount / 100);
1149 * Determine if a store item can "absorb" another item
1151 * See "object_similar()" for the same function for the "player"
1153 static bool store_object_similar(object_type *o_ptr, object_type *j_ptr)
1157 /* Hack -- Identical items cannot be stacked */
1158 if (o_ptr == j_ptr) return (0);
1160 /* Different objects cannot be stacked */
1161 if (o_ptr->k_idx != j_ptr->k_idx) return (0);
1163 /* Different charges (etc) cannot be stacked, unless wands or rods. */
1164 if ((o_ptr->pval != j_ptr->pval) && (o_ptr->tval != TV_WAND) && (o_ptr->tval != TV_ROD)) return (0);
1166 /* Require many identical values */
1167 if (o_ptr->to_h != j_ptr->to_h) return (0);
1168 if (o_ptr->to_d != j_ptr->to_d) return (0);
1169 if (o_ptr->to_a != j_ptr->to_a) return (0);
1171 /* Require identical "ego-item" names */
1172 if (o_ptr->name2 != j_ptr->name2) return (0);
1174 /* Artifacts don't stack! */
1175 if (object_is_artifact(o_ptr) || object_is_artifact(j_ptr)) return (0);
1177 /* Hack -- Identical art_flags! */
1178 for (i = 0; i < TR_FLAG_SIZE; i++)
1179 if (o_ptr->art_flags[i] != j_ptr->art_flags[i]) return (0);
1181 /* Hack -- Never stack "powerful" items */
1182 if (o_ptr->xtra1 || j_ptr->xtra1) return (0);
1184 /* Hack -- Never stack recharging items */
1185 if (o_ptr->timeout || j_ptr->timeout) return (0);
1187 /* Require many identical values */
1188 if (o_ptr->ac != j_ptr->ac) return (0);
1189 if (o_ptr->dd != j_ptr->dd) return (0);
1190 if (o_ptr->ds != j_ptr->ds) return (0);
1192 /* Hack -- Never stack chests */
1193 if (o_ptr->tval == TV_CHEST) return (0);
1194 if (o_ptr->tval == TV_STATUE) return (0);
1195 if (o_ptr->tval == TV_CAPTURE) return (0);
1197 /* Require matching discounts */
1198 if (o_ptr->discount != j_ptr->discount) return (0);
1200 /* They match, so they must be similar */
1206 * Allow a store item to absorb another item
1208 static void store_object_absorb(object_type *o_ptr, object_type *j_ptr)
1210 int max_num = (o_ptr->tval == TV_ROD) ?
1211 MIN(99, MAX_SHORT / k_info[o_ptr->k_idx].pval) : 99;
1212 int total = o_ptr->number + j_ptr->number;
1213 int diff = (total > max_num) ? total - max_num : 0;
1215 /* Combine quantity, lose excess items */
1216 o_ptr->number = (total > max_num) ? max_num : total;
1218 /* Hack -- if rods are stacking, add the pvals (maximum timeouts) together. -LM- */
1219 if (o_ptr->tval == TV_ROD)
1221 o_ptr->pval += j_ptr->pval * (j_ptr->number - diff) / j_ptr->number;
1224 /* Hack -- if wands are stacking, combine the charges. -LM- */
1225 if (o_ptr->tval == TV_WAND)
1227 o_ptr->pval += j_ptr->pval * (j_ptr->number - diff) / j_ptr->number;
1233 * Check to see if the shop will be carrying too many objects -RAK-
1234 * Note that the shop, just like a player, will not accept things
1235 * it cannot hold. Before, one could "nuke" potions this way.
1237 * Return value is now int:
1239 * -1 : Can be combined to existing slot.
1240 * 1 : Cannot be combined but there are empty spaces.
1242 static int store_check_num(object_type *o_ptr)
1247 /* The "home" acts like the player */
1248 if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
1250 bool old_stack_force_notes = stack_force_notes;
1251 bool old_stack_force_costs = stack_force_costs;
1253 if (cur_store_num != STORE_HOME)
1255 stack_force_notes = FALSE;
1256 stack_force_costs = FALSE;
1259 /* Check all the items */
1260 for (i = 0; i < st_ptr->stock_num; i++)
1262 /* Get the existing item */
1263 j_ptr = &st_ptr->stock[i];
1265 /* Can the new object be combined with the old one? */
1266 if (object_similar(j_ptr, o_ptr))
1268 if (cur_store_num != STORE_HOME)
1270 stack_force_notes = old_stack_force_notes;
1271 stack_force_costs = old_stack_force_costs;
1278 if (cur_store_num != STORE_HOME)
1280 stack_force_notes = old_stack_force_notes;
1281 stack_force_costs = old_stack_force_costs;
1285 /* Normal stores do special stuff */
1288 /* Check all the items */
1289 for (i = 0; i < st_ptr->stock_num; i++)
1291 /* Get the existing item */
1292 j_ptr = &st_ptr->stock[i];
1294 /* Can the new object be combined with the old one? */
1295 if (store_object_similar(j_ptr, o_ptr)) return -1;
1299 /* Free space is always usable */
1301 * ¥ª¥×¥·¥ç¥ó powerup_home ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È
1302 * ²æ¤¬²È¤¬ 20 ¥Ú¡¼¥¸¤Þ¤Ç»È¤¨¤ë
1304 if ((cur_store_num == STORE_HOME) && ( powerup_home == FALSE )) {
1305 if (st_ptr->stock_num < ((st_ptr->stock_size) / 10)) {
1310 if (st_ptr->stock_num < st_ptr->stock_size) {
1315 /* But there was no room at the inn... */
1320 static bool is_blessed(object_type *o_ptr)
1322 u32b flgs[TR_FLAG_SIZE];
1323 object_flags(o_ptr, flgs);
1324 if (have_flag(flgs, TR_BLESSED)) return (TRUE);
1325 else return (FALSE);
1331 * Determine if the current store will purchase the given item
1333 * Note that a shop-keeper must refuse to buy "worthless" items
1335 static bool store_will_buy(object_type *o_ptr)
1337 /* Hack -- The Home is simple */
1338 if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) return (TRUE);
1340 /* Switch on the store */
1341 switch (cur_store_num)
1346 /* Analyze the type */
1347 switch (o_ptr->tval)
1350 if (o_ptr->sval != SV_POTION_WATER) return FALSE;
1362 case TV_BOTTLE: /* 'Green', recycling Angband */
1377 /* Analyze the type */
1378 switch (o_ptr->tval)
1399 /* Analyze the type */
1400 switch (o_ptr->tval)
1409 case TV_HISSATSU_BOOK:
1413 if(o_ptr->sval == SV_WIZSTAFF) return (FALSE);
1425 /* Analyze the type */
1426 switch (o_ptr->tval)
1429 case TV_CRUSADE_BOOK:
1439 monster_race *r_ptr = &r_info[o_ptr->pval];
1442 if (!(r_ptr->flags3 & RF3_EVIL))
1445 if (r_ptr->flags3 & RF3_GOOD) break;
1447 /* Accept animals */
1448 if (r_ptr->flags3 & RF3_ANIMAL) break;
1451 if (my_strchr("?!", r_ptr->d_char)) break;
1457 if (is_blessed(o_ptr)) break;
1466 case STORE_ALCHEMIST:
1468 /* Analyze the type */
1469 switch (o_ptr->tval)
1483 /* Analyze the type */
1484 switch (o_ptr->tval)
1486 case TV_SORCERY_BOOK:
1487 case TV_NATURE_BOOK:
1491 case TV_ARCANE_BOOK:
1493 case TV_DAEMON_BOOK:
1506 if(o_ptr->sval == SV_WIZSTAFF) break;
1507 else return (FALSE);
1514 /* Bookstore Shop */
1517 /* Analyze the type */
1518 switch (o_ptr->tval)
1520 case TV_SORCERY_BOOK:
1521 case TV_NATURE_BOOK:
1526 case TV_ARCANE_BOOK:
1528 case TV_DAEMON_BOOK:
1529 case TV_CRUSADE_BOOK:
1539 /* XXX XXX XXX Ignore "worthless" items */
1540 if (object_value(o_ptr) <= 0) return (FALSE);
1548 * Combine and reorder items in the home
1550 bool combine_and_reorder_home(int store_num)
1554 object_type forge, *o_ptr, *j_ptr;
1555 bool flag = FALSE, combined;
1556 store_type *old_st_ptr = st_ptr;
1557 bool old_stack_force_notes = stack_force_notes;
1558 bool old_stack_force_costs = stack_force_costs;
1560 st_ptr = &town[1].store[store_num];
1561 if (store_num != STORE_HOME)
1563 stack_force_notes = FALSE;
1564 stack_force_costs = FALSE;
1571 /* Combine the items in the home (backwards) */
1572 for (i = st_ptr->stock_num - 1; i > 0; i--)
1575 o_ptr = &st_ptr->stock[i];
1577 /* Skip empty items */
1578 if (!o_ptr->k_idx) continue;
1580 /* Scan the items above that item */
1581 for (j = 0; j < i; j++)
1586 j_ptr = &st_ptr->stock[j];
1588 /* Skip empty items */
1589 if (!j_ptr->k_idx) continue;
1592 * Get maximum number of the stack if these
1593 * are similar, get zero otherwise.
1595 max_num = object_similar_part(j_ptr, o_ptr);
1597 /* Can we (partialy) drop "o_ptr" onto "j_ptr"? */
1598 if (max_num && j_ptr->number < max_num)
1600 if (o_ptr->number + j_ptr->number <= max_num)
1602 /* Add together the item counts */
1603 object_absorb(j_ptr, o_ptr);
1605 /* One object is gone */
1606 st_ptr->stock_num--;
1608 /* Slide everything down */
1609 for (k = i; k < st_ptr->stock_num; k++)
1611 /* Structure copy */
1612 st_ptr->stock[k] = st_ptr->stock[k + 1];
1615 /* Erase the "final" slot */
1616 object_wipe(&st_ptr->stock[k]);
1620 int old_num = o_ptr->number;
1621 int remain = j_ptr->number + o_ptr->number - max_num;
1623 /* Add together the item counts */
1624 object_absorb(j_ptr, o_ptr);
1626 o_ptr->number = remain;
1628 /* Hack -- if rods are stacking, add the pvals (maximum timeouts) and current timeouts together. -LM- */
1629 if (o_ptr->tval == TV_ROD)
1631 o_ptr->pval = o_ptr->pval * remain / old_num;
1632 o_ptr->timeout = o_ptr->timeout * remain / old_num;
1635 /* Hack -- if wands are stacking, combine the charges. -LM- */
1636 else if (o_ptr->tval == TV_WAND)
1638 o_ptr->pval = o_ptr->pval * remain / old_num;
1655 /* Re-order the items in the home (forwards) */
1656 for (i = 0; i < st_ptr->stock_num; i++)
1659 o_ptr = &st_ptr->stock[i];
1661 /* Skip empty slots */
1662 if (!o_ptr->k_idx) continue;
1664 /* Get the "value" of the item */
1665 o_value = object_value(o_ptr);
1667 /* Scan every occupied slot */
1668 for (j = 0; j < st_ptr->stock_num; j++)
1670 if (object_sort_comp(o_ptr, o_value, &st_ptr->stock[j])) break;
1673 /* Never move down */
1674 if (j >= i) continue;
1679 /* Get local object */
1682 /* Save a copy of the moving item */
1683 object_copy(j_ptr, &st_ptr->stock[i]);
1685 /* Slide the objects */
1686 for (k = i; k > j; k--)
1688 /* Slide the item */
1689 object_copy(&st_ptr->stock[k], &st_ptr->stock[k - 1]);
1692 /* Insert the moving item */
1693 object_copy(&st_ptr->stock[j], j_ptr);
1696 st_ptr = old_st_ptr;
1697 if (store_num != STORE_HOME)
1699 stack_force_notes = old_stack_force_notes;
1700 stack_force_costs = old_stack_force_costs;
1708 * Add the item "o_ptr" to the inventory of the "Home"
1710 * In all cases, return the slot (or -1) where the object was placed
1712 * Note that this is a hacked up version of "inven_carry()".
1714 * Also note that it may not correctly "adapt" to "knowledge" bacoming
1715 * known, the player may have to pick stuff up and drop it again.
1717 static int home_carry(object_type *o_ptr)
1723 bool old_stack_force_notes = stack_force_notes;
1724 bool old_stack_force_costs = stack_force_costs;
1726 if (cur_store_num != STORE_HOME)
1728 stack_force_notes = FALSE;
1729 stack_force_costs = FALSE;
1732 /* Check each existing item (try to combine) */
1733 for (slot = 0; slot < st_ptr->stock_num; slot++)
1735 /* Get the existing item */
1736 j_ptr = &st_ptr->stock[slot];
1738 /* The home acts just like the player */
1739 if (object_similar(j_ptr, o_ptr))
1741 /* Save the new number of items */
1742 object_absorb(j_ptr, o_ptr);
1744 if (cur_store_num != STORE_HOME)
1746 stack_force_notes = old_stack_force_notes;
1747 stack_force_costs = old_stack_force_costs;
1755 if (cur_store_num != STORE_HOME)
1757 stack_force_notes = old_stack_force_notes;
1758 stack_force_costs = old_stack_force_costs;
1763 * ±£¤·µ¡Ç½: ¥ª¥×¥·¥ç¥ó powerup_home ¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¤È
1764 * ²æ¤¬²È¤¬ 20 ¥Ú¡¼¥¸¤Þ¤Ç»È¤¨¤ë
1767 if ((cur_store_num != STORE_HOME) || (powerup_home == TRUE)) {
1768 if (st_ptr->stock_num >= st_ptr->stock_size) {
1773 if (st_ptr->stock_num >= ((st_ptr->stock_size) / 10)) {
1779 /* Determine the "value" of the item */
1780 value = object_value(o_ptr);
1782 /* Check existing slots to see if we must "slide" */
1783 for (slot = 0; slot < st_ptr->stock_num; slot++)
1785 if (object_sort_comp(o_ptr, value, &st_ptr->stock[slot])) break;
1788 /* Slide the others up */
1789 for (i = st_ptr->stock_num; i > slot; i--)
1791 st_ptr->stock[i] = st_ptr->stock[i-1];
1794 /* More stuff now */
1795 st_ptr->stock_num++;
1797 /* Insert the new item */
1798 st_ptr->stock[slot] = *o_ptr;
1800 chg_virtue(V_SACRIFICE, -1);
1802 (void)combine_and_reorder_home(cur_store_num);
1804 /* Return the location */
1810 * Add the item "o_ptr" to a real stores inventory.
1812 * If the item is "worthless", it is thrown away (except in the home).
1814 * If the item cannot be combined with an object already in the inventory,
1815 * make a new slot for it, and calculate its "per item" price. Note that
1816 * this price will be negative, since the price will not be "fixed" yet.
1817 * Adding an item to a "fixed" price stack will not change the fixed price.
1819 * In all cases, return the slot (or -1) where the object was placed
1821 static int store_carry(object_type *o_ptr)
1824 s32b value, j_value;
1828 /* Evaluate the object */
1829 value = object_value(o_ptr);
1831 /* Cursed/Worthless items "disappear" when sold */
1832 if (value <= 0) return (-1);
1834 /* All store items are fully *identified* */
1835 o_ptr->ident |= IDENT_MENTAL;
1837 /* Erase the inscription */
1838 o_ptr->inscription = 0;
1840 /* Erase the "feeling" */
1841 o_ptr->feeling = FEEL_NONE;
1843 /* Check each existing item (try to combine) */
1844 for (slot = 0; slot < st_ptr->stock_num; slot++)
1846 /* Get the existing item */
1847 j_ptr = &st_ptr->stock[slot];
1849 /* Can the existing items be incremented? */
1850 if (store_object_similar(j_ptr, o_ptr))
1852 /* Hack -- extra items disappear */
1853 store_object_absorb(j_ptr, o_ptr);
1861 if (st_ptr->stock_num >= st_ptr->stock_size) return (-1);
1864 /* Check existing slots to see if we must "slide" */
1865 for (slot = 0; slot < st_ptr->stock_num; slot++)
1868 j_ptr = &st_ptr->stock[slot];
1870 /* Objects sort by decreasing type */
1871 if (o_ptr->tval > j_ptr->tval) break;
1872 if (o_ptr->tval < j_ptr->tval) continue;
1874 /* Objects sort by increasing sval */
1875 if (o_ptr->sval < j_ptr->sval) break;
1876 if (o_ptr->sval > j_ptr->sval) continue;
1879 * Hack: otherwise identical rods sort by
1880 * increasing recharge time --dsb
1882 if (o_ptr->tval == TV_ROD)
1884 if (o_ptr->pval < j_ptr->pval) break;
1885 if (o_ptr->pval > j_ptr->pval) continue;
1888 /* Evaluate that slot */
1889 j_value = object_value(j_ptr);
1891 /* Objects sort by decreasing value */
1892 if (value > j_value) break;
1893 if (value < j_value) continue;
1896 /* Slide the others up */
1897 for (i = st_ptr->stock_num; i > slot; i--)
1899 st_ptr->stock[i] = st_ptr->stock[i-1];
1902 /* More stuff now */
1903 st_ptr->stock_num++;
1905 /* Insert the new item */
1906 st_ptr->stock[slot] = *o_ptr;
1908 /* Return the location */
1914 * Increase, by a given amount, the number of a certain item
1915 * in a certain store. This can result in zero items.
1917 static void store_item_increase(int item, int num)
1923 o_ptr = &st_ptr->stock[item];
1925 /* Verify the number */
1926 cnt = o_ptr->number + num;
1927 if (cnt > 255) cnt = 255;
1928 else if (cnt < 0) cnt = 0;
1929 num = cnt - o_ptr->number;
1931 /* Save the new number */
1932 o_ptr->number += num;
1937 * Remove a slot if it is empty
1939 static void store_item_optimize(int item)
1945 o_ptr = &st_ptr->stock[item];
1948 if (!o_ptr->k_idx) return;
1950 /* Must have no items */
1951 if (o_ptr->number) return;
1954 st_ptr->stock_num--;
1956 /* Slide everyone */
1957 for (j = item; j < st_ptr->stock_num; j++)
1959 st_ptr->stock[j] = st_ptr->stock[j + 1];
1962 /* Nuke the final slot */
1963 object_wipe(&st_ptr->stock[j]);
1968 * This function will keep 'crap' out of the black market.
1969 * Crap is defined as any item that is "available" elsewhere
1970 * Based on a suggestion by "Lee Vogt" <lvogt@cig.mcel.mot.com>
1972 static bool black_market_crap(object_type *o_ptr)
1976 /* Ego items are never crap */
1977 if (object_is_ego(o_ptr)) return (FALSE);
1979 /* Good items are never crap */
1980 if (o_ptr->to_a > 0) return (FALSE);
1981 if (o_ptr->to_h > 0) return (FALSE);
1982 if (o_ptr->to_d > 0) return (FALSE);
1984 /* Check all stores */
1985 for (i = 0; i < MAX_STORES; i++)
1987 if (i == STORE_HOME) continue;
1988 if (i == STORE_MUSEUM) continue;
1990 /* Check every item in the store */
1991 for (j = 0; j < town[p_ptr->town_num].store[i].stock_num; j++)
1993 object_type *j_ptr = &town[p_ptr->town_num].store[i].stock[j];
1995 /* Duplicate item "type", assume crappy */
1996 if (o_ptr->k_idx == j_ptr->k_idx) return (TRUE);
2006 * Attempt to delete (some of) a random item from the store
2007 * Hack -- we attempt to "maintain" piles of items when possible.
2009 static void store_delete(void)
2013 /* Pick a random slot */
2014 what = randint0(st_ptr->stock_num);
2016 /* Determine how many items are here */
2017 num = st_ptr->stock[what].number;
2019 /* Hack -- sometimes, only destroy half the items */
2020 if (randint0(100) < 50) num = (num + 1) / 2;
2022 /* Hack -- sometimes, only destroy a single item */
2023 if (randint0(100) < 50) num = 1;
2025 /* Hack -- decrement the maximum timeouts and total charges of rods and wands. -LM- */
2026 if ((st_ptr->stock[what].tval == TV_ROD) || (st_ptr->stock[what].tval == TV_WAND))
2028 st_ptr->stock[what].pval -= num * st_ptr->stock[what].pval / st_ptr->stock[what].number;
2031 /* Actually destroy (part of) the item */
2032 store_item_increase(what, -num);
2033 store_item_optimize(what);
2038 * Creates a random item and gives it to a store
2039 * This algorithm needs to be rethought. A lot.
2040 * Currently, "normal" stores use a pre-built array.
2042 * Note -- the "level" given to "obj_get_num()" is a "favored"
2043 * level, that is, there is a much higher chance of getting
2044 * items with a level approaching that of the given level...
2046 * Should we check for "permission" to have the given item?
2048 static void store_create(void)
2050 int i, tries, level;
2056 /* Paranoia -- no room left */
2057 if (st_ptr->stock_num >= st_ptr->stock_size) return;
2060 /* Hack -- consider up to four items */
2061 for (tries = 0; tries < 4; tries++)
2064 if (cur_store_num == STORE_BLACK)
2066 /* Pick a level for object/magic */
2067 level = 25 + randint0(25);
2069 /* Random item (usually of given level) */
2070 i = get_obj_num(level);
2072 /* Handle failure */
2079 /* Hack -- Pick an item to sell */
2080 i = st_ptr->table[randint0(st_ptr->table_num)];
2082 /* Hack -- fake level for apply_magic() */
2083 level = rand_range(1, STORE_OBJ_LEVEL);
2087 /* Get local object */
2090 /* Create a new object of the chosen kind */
2091 object_prep(q_ptr, i);
2093 /* Apply some "low-level" magic (no artifacts) */
2094 apply_magic(q_ptr, level, AM_NO_FIXED_ART);
2096 /* Require valid object */
2097 if (!store_will_buy(q_ptr)) continue;
2099 /* Hack -- Charge lite's */
2100 if (q_ptr->tval == TV_LITE)
2102 if (q_ptr->sval == SV_LITE_TORCH) q_ptr->xtra4 = FUEL_TORCH / 2;
2103 if (q_ptr->sval == SV_LITE_LANTERN) q_ptr->xtra4 = FUEL_LAMP / 2;
2107 /* The item is "known" */
2108 object_known(q_ptr);
2110 /* Mark it storebought */
2111 q_ptr->ident |= IDENT_STORE;
2113 /* Mega-Hack -- no chests in stores */
2114 if (q_ptr->tval == TV_CHEST) continue;
2116 /* Prune the black market */
2117 if (cur_store_num == STORE_BLACK)
2119 /* Hack -- No "crappy" items */
2120 if (black_market_crap(q_ptr)) continue;
2122 /* Hack -- No "cheap" items */
2123 if (object_value(q_ptr) < 10) continue;
2125 /* No "worthless" items */
2126 /* if (object_value(q_ptr) <= 0) continue; */
2129 /* Prune normal stores */
2132 /* No "worthless" items */
2133 if (object_value(q_ptr) <= 0) continue;
2137 /* Mass produce and/or Apply discount */
2138 mass_produce(q_ptr);
2140 /* Attempt to carry the (known) item */
2141 (void)store_carry(q_ptr);
2143 /* Definitely done */
2151 * Eliminate need to bargain if player has haggled well in the past
2153 static bool noneedtobargain(s32b minprice)
2155 s32b good = st_ptr->good_buy;
2156 s32b bad = st_ptr->bad_buy;
2158 /* Cheap items are "boring" */
2159 if (minprice < 10L) return (TRUE);
2161 /* Perfect haggling */
2162 if (good == MAX_SHORT) return (TRUE);
2164 /* Reward good haggles, punish bad haggles, notice price */
2165 if (good > ((3 * bad) + (5 + (minprice/50)))) return (TRUE);
2167 /* Return the flag */
2173 * Update the bargain info
2175 static void updatebargain(s32b price, s32b minprice, int num)
2177 /* Hack -- auto-haggle */
2178 if (!manual_haggle) return;
2180 /* Cheap items are "boring" */
2181 if ((minprice/num) < 10L) return;
2183 /* Count the successful haggles */
2184 if (price == minprice)
2186 /* Just count the good haggles */
2187 if (st_ptr->good_buy < MAX_SHORT)
2193 /* Count the failed haggles */
2196 /* Just count the bad haggles */
2197 if (st_ptr->bad_buy < MAX_SHORT)
2207 * Re-displays a single store entry
2209 static void display_entry(int pos)
2215 char o_name[MAX_NLEN];
2222 o_ptr = &st_ptr->stock[pos];
2224 /* Get the "offset" */
2227 /* Label it, clear the line --(-- */
2228 (void)sprintf(out_val, "%c) ", I2A(i));
2229 prt(out_val, i+6, 0);
2232 if (show_item_graph)
2234 byte a = object_attr(o_ptr);
2235 char c = object_char(o_ptr);
2242 Term_queue_bigchar(cur_col, i + 6, a, c, 0, 0);
2246 /* Describe an item in the home */
2247 if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
2251 /* Leave room for weights, if necessary -DRS- */
2252 if (show_weights) maxwid -= 10;
2254 /* Describe the object */
2255 object_desc(o_name, o_ptr, 0);
2256 o_name[maxwid] = '\0';
2257 c_put_str(tval_to_attr[o_ptr->tval], o_name, i+6, cur_col);
2262 /* Only show the weight of an individual item */
2263 int wgt = o_ptr->weight;
2265 sprintf(out_val, "%3d.%1d kg", lbtokg1(wgt) , lbtokg2(wgt) );
2266 put_str(out_val, i+6, 67);
2268 (void)sprintf(out_val, "%3d.%d lb", wgt / 10, wgt % 10);
2269 put_str(out_val, i+6, 68);
2275 /* Describe an item (fully) in a store */
2278 /* Must leave room for the "price" */
2281 /* Leave room for weights, if necessary -DRS- */
2282 if (show_weights) maxwid -= 7;
2284 /* Describe the object (fully) */
2285 object_desc(o_name, o_ptr, 0);
2286 o_name[maxwid] = '\0';
2287 c_put_str(tval_to_attr[o_ptr->tval], o_name, i+6, cur_col);
2292 /* Only show the weight of an individual item */
2293 int wgt = o_ptr->weight;
2295 sprintf(out_val, "%3d.%1d", lbtokg1(wgt) , lbtokg2(wgt) );
2296 put_str(out_val, i+6, 60);
2298 (void)sprintf(out_val, "%3d.%d", wgt / 10, wgt % 10);
2299 put_str(out_val, i+6, 61);
2304 /* Display a "fixed" cost */
2305 if (o_ptr->ident & (IDENT_FIXED))
2307 /* Extract the "minimum" price */
2308 x = price_item(o_ptr, ot_ptr->min_inflate, FALSE);
2310 /* Actually draw the price (not fixed) */
2312 (void)sprintf(out_val, "%9ld¸Ç", (long)x);
2314 (void)sprintf(out_val, "%9ld F", (long)x);
2317 put_str(out_val, i+6, 68);
2320 /* Display a "taxed" cost */
2321 else if (!manual_haggle)
2323 /* Extract the "minimum" price */
2324 x = price_item(o_ptr, ot_ptr->min_inflate, FALSE);
2326 /* Hack -- Apply Sales Tax if needed */
2327 if (!noneedtobargain(x)) x += x / 10;
2329 /* Actually draw the price (with tax) */
2330 (void)sprintf(out_val, "%9ld ", (long)x);
2331 put_str(out_val, i+6, 68);
2334 /* Display a "haggle" cost */
2337 /* Extrect the "maximum" price */
2338 x = price_item(o_ptr, ot_ptr->max_inflate, FALSE);
2340 /* Actually draw the price (not fixed) */
2341 (void)sprintf(out_val, "%9ld ", (long)x);
2342 put_str(out_val, i+6, 68);
2349 * Displays a store's inventory -RAK-
2350 * All prices are listed as "per individual object". -BEN-
2352 static void display_inventory(void)
2356 /* Display the next 12 items */
2357 for (k = 0; k < 12; k++)
2359 /* Do not display "dead" items */
2360 if (store_top + k >= st_ptr->stock_num) break;
2362 /* Display that line */
2363 display_entry(store_top + k);
2366 /* Erase the extra lines and the "more" prompt */
2367 for (i = k; i < 13; i++) prt("", i + 6, 0);
2369 /* Assume "no current page" */
2371 put_str(" ", 5, 20);
2373 put_str(" ", 5, 20);
2377 /* Visual reminder of "more items" */
2378 if (st_ptr->stock_num > 12)
2380 /* Show "more" reminder (after the last item) */
2382 prt("-³¤¯-", k + 6, 3);
2384 prt("-more-", k + 6, 3);
2388 /* Indicate the "current page" */
2389 /* Trailing spaces are to display (Page xx) and (Page x) */
2391 put_str(format("(%d¥Ú¡¼¥¸) ", store_top/12 + 1), 5, 20);
2393 put_str(format("(Page %d) ", store_top/12 + 1), 5, 20);
2401 * Displays players gold -RAK-
2403 static void store_prt_gold(void)
2408 prt("¼ê»ý¤Á¤Î¤ª¶â: ", 19, 53);
2410 prt("Gold Remaining: ", 19, 53);
2414 sprintf(out_val, "%9ld", (long)p_ptr->au);
2415 prt(out_val, 19, 68);
2420 * Displays store (after clearing screen) -RAK-
2422 static void display_store(void)
2430 /* The "Home" is special */
2431 if (cur_store_num == STORE_HOME)
2433 /* Put the owner name */
2435 put_str("²æ¤¬²È", 3, 31);
2437 put_str("Your Home", 3, 30);
2441 /* Label the item descriptions */
2443 put_str("¥¢¥¤¥Æ¥à¤Î°ìÍ÷", 5, 4);
2445 put_str("Item Description", 5, 3);
2449 /* If showing weights, show label */
2453 put_str("½Å¤µ", 5, 72);
2455 put_str("Weight", 5, 70);
2461 /* The "Home" is special */
2462 else if (cur_store_num == STORE_MUSEUM)
2464 /* Put the owner name */
2466 put_str("Çîʪ´Û", 3, 31);
2468 put_str("Museum", 3, 30);
2472 /* Label the item descriptions */
2474 put_str("¥¢¥¤¥Æ¥à¤Î°ìÍ÷", 5, 4);
2476 put_str("Item Description", 5, 3);
2480 /* If showing weights, show label */
2484 put_str("½Å¤µ", 5, 72);
2486 put_str("Weight", 5, 70);
2495 cptr store_name = (f_name + f_info[cur_store_feat].name);
2496 cptr owner_name = (ot_ptr->owner_name);
2497 cptr race_name = race_info[ot_ptr->owner_race].title;
2499 /* Put the owner name and race */
2500 sprintf(buf, "%s (%s)", owner_name, race_name);
2501 put_str(buf, 3, 10);
2503 /* Show the max price in the store (above prices) */
2504 sprintf(buf, "%s (%ld)", store_name, (long)(ot_ptr->max_cost));
2507 /* Label the item descriptions */
2509 put_str("¾¦ÉʤΰìÍ÷", 5, 7);
2511 put_str("Item Description", 5, 3);
2515 /* If showing weights, show label */
2519 put_str("½Å¤µ", 5, 62);
2521 put_str("Weight", 5, 60);
2526 /* Label the asking price (in stores) */
2528 put_str("²Á³Ê", 5, 73);
2530 put_str("Price", 5, 72);
2535 /* Display the current gold */
2538 /* Draw in the inventory */
2539 display_inventory();
2545 * Get the ID of a store item and return its value -RAK-
2547 static int get_stock(int *com_val, cptr pmt, int i, int j)
2553 #ifdef ALLOW_REPEAT /* TNB */
2555 /* Get the item index */
2556 if (repeat_pull(com_val))
2558 /* Verify the item */
2559 if ((*com_val >= i) && (*com_val <= j))
2566 #endif /* ALLOW_REPEAT -- TNB */
2568 /* Paranoia XXX XXX XXX */
2572 /* Assume failure */
2575 /* Build the prompt */
2577 (void)sprintf(out_val, "(%s:%c-%c, ESC¤ÇÃæÃÇ) %s",
2578 (((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) ? "¥¢¥¤¥Æ¥à" : "¾¦ÉÊ"),
2579 I2A(i), I2A(j), pmt);
2581 (void)sprintf(out_val, "(Items %c-%c, ESC to exit) %s",
2582 I2A(i), I2A(j), pmt);
2586 /* Ask until done */
2592 if (!get_com(out_val, &command, FALSE)) break;
2595 k = (islower(command) ? A2I(command) : -1);
2597 /* Legal responses */
2598 if ((k >= i) && (k <= j))
2608 /* Clear the prompt */
2612 if (command == ESCAPE) return (FALSE);
2614 #ifdef ALLOW_REPEAT /* TNB */
2616 repeat_push(*com_val);
2618 #endif /* ALLOW_REPEAT -- TNB */
2626 * Increase the insult counter and get angry if too many -RAK-
2628 static int increase_insults(void)
2630 /* Increase insults */
2631 st_ptr->insult_cur++;
2633 /* Become insulted */
2634 if (st_ptr->insult_cur > ot_ptr->insult_max)
2640 st_ptr->insult_cur = 0;
2641 st_ptr->good_buy = 0;
2642 st_ptr->bad_buy = 0;
2645 st_ptr->store_open = turn + TURNS_PER_TICK*TOWN_DAWN/8 + randint1(TURNS_PER_TICK*TOWN_DAWN/8);
2657 * Decrease insults -RAK-
2659 static void decrease_insults(void)
2661 /* Decrease insults */
2662 if (st_ptr->insult_cur) st_ptr->insult_cur--;
2667 * Have insulted while haggling -RAK-
2669 static int haggle_insults(void)
2671 /* Increase insults */
2672 if (increase_insults()) return (TRUE);
2674 /* Display and flush insult */
2683 * Mega-Hack -- Enable "increments"
2685 static bool allow_inc = FALSE;
2688 * Mega-Hack -- Last "increment" during haggling
2690 static s32b last_inc = 0L;
2696 static int get_haggle(cptr pmt, s32b *poffer, s32b price, int final)
2706 /* Clear old increment if necessary */
2707 if (!allow_inc) last_inc = 0L;
2714 sprintf(buf, "%s [¾µÂú] ", pmt);
2716 sprintf(buf, "%s [accept] ", pmt);
2721 /* Old (negative) increment, and not final */
2722 else if (last_inc < 0)
2725 sprintf(buf, "%s [-$%ld] ", pmt, (long)(ABS(last_inc)));
2727 sprintf(buf, "%s [-%ld] ", pmt, (long)(ABS(last_inc)));
2732 /* Old (positive) increment, and not final */
2733 else if (last_inc > 0)
2736 sprintf(buf, "%s [+$%ld] ", pmt, (long)(ABS(last_inc)));
2738 sprintf(buf, "%s [+%ld] ", pmt, (long)(ABS(last_inc)));
2746 sprintf(buf, "%s ", pmt);
2750 /* Paranoia XXX XXX XXX */
2754 /* Ask until done */
2759 /* Display prompt */
2763 strcpy(out_val, "");
2766 * Ask the user for a response.
2767 * Don't allow to use numpad as cursor key.
2769 res = askfor_aux(out_val, 32, FALSE);
2775 if (!res) return FALSE;
2777 /* Skip leading spaces */
2778 for (p = out_val; *p == ' '; p++) /* loop */;
2780 /* Empty response */
2783 /* Accept current price */
2791 /* Use previous increment */
2792 if (allow_inc && last_inc)
2794 *poffer += last_inc;
2799 /* Normal response */
2802 /* Extract a number */
2805 /* Handle "incremental" number */
2806 if ((*p == '+' || *p == '-'))
2808 /* Allow increments */
2811 /* Use the given "increment" */
2818 /* Handle normal number */
2821 /* Use the given "number" */
2830 msg_print("Ãͤ¬¤ª¤«¤·¤¤¤Ç¤¹¡£");
2832 msg_print("Invalid response.");
2844 * Receive an offer (from the player)
2846 * Return TRUE if offer is NOT okay
2848 static bool receive_offer(cptr pmt, s32b *poffer,
2849 s32b last_offer, int factor,
2850 s32b price, int final)
2852 /* Haggle till done */
2855 /* Get a haggle (or cancel) */
2856 if (!get_haggle(pmt, poffer, price, final)) return (TRUE);
2858 /* Acceptable offer */
2859 if (((*poffer) * factor) >= (last_offer * factor)) break;
2861 /* Insult, and check for kicked out */
2862 if (haggle_insults()) return (TRUE);
2864 /* Reject offer (correctly) */
2865 (*poffer) = last_offer;
2874 * Haggling routine -RAK-
2876 * Return TRUE if purchase is NOT successful
2878 static bool purchase_haggle(object_type *o_ptr, s32b *price)
2880 s32b cur_ask, final_ask;
2881 s32b last_offer, offer;
2883 s32b min_per, max_per;
2884 int flag, loop_flag, noneed;
2885 int annoyed = 0, final = FALSE;
2887 bool cancel = FALSE;
2890 cptr pmt = "Ä󼨲Á³Ê";
2892 cptr pmt = "Asking";
2902 /* Extract the starting offer and the final offer */
2903 cur_ask = price_item(o_ptr, ot_ptr->max_inflate, FALSE);
2904 final_ask = price_item(o_ptr, ot_ptr->min_inflate, FALSE);
2906 /* Determine if haggling is necessary */
2907 noneed = noneedtobargain(final_ask);
2909 /* No need to haggle */
2910 if (noneed || !manual_haggle)
2912 /* No need to haggle */
2915 /* Message summary */
2917 msg_print("·ë¶É¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
2919 msg_print("You eventually agree upon the price.");
2925 /* No haggle option */
2928 /* Message summary */
2930 msg_print("¤¹¤ó¤Ê¤ê¤È¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
2932 msg_print("You quickly agree upon the price.");
2937 /* Apply Sales Tax */
2938 final_ask += final_ask / 10;
2942 cur_ask = final_ask;
2944 /* Go to final offer */
2946 pmt = "ºÇ½ªÄ󼨲Á³Ê";
2948 pmt = "Final Offer";
2955 /* Haggle for the whole pile */
2956 cur_ask *= o_ptr->number;
2957 final_ask *= o_ptr->number;
2960 /* Haggle parameters */
2961 min_per = ot_ptr->haggle_per;
2962 max_per = min_per * 3;
2964 /* Mega-Hack -- artificial "last offer" value */
2965 last_offer = object_value(o_ptr) * o_ptr->number;
2966 last_offer = last_offer * (200 - (int)(ot_ptr->max_inflate)) / 100L;
2967 if (last_offer <= 0) last_offer = 1;
2972 /* No incremental haggling yet */
2975 /* Haggle until done */
2976 for (flag = FALSE; !flag; )
2980 while (!flag && loop_flag)
2982 (void)sprintf(out_val, "%s : %ld", pmt, (long)cur_ask);
2983 put_str(out_val, 1, 0);
2985 cancel = receive_offer("Ä󼨤¹¤ë¶â³Û? ",
2987 cancel = receive_offer("What do you offer? ",
2990 &offer, last_offer, 1, cur_ask, final);
2996 else if (offer > cur_ask)
3001 else if (offer == cur_ask)
3014 x1 = 100 * (offer - last_offer) / (cur_ask - last_offer);
3017 if (haggle_insults())
3023 else if (x1 > max_per)
3026 if (x1 < max_per) x1 = max_per;
3028 x2 = rand_range(x1-2, x1+2);
3029 x3 = ((cur_ask - offer) * x2 / 100L) + 1;
3030 /* don't let the price go up */
3035 if (cur_ask < final_ask)
3038 cur_ask = final_ask;
3040 pmt = "ºÇ½ªÄ󼨲Á³Ê";
3042 pmt = "Final Offer";
3048 (void)(increase_insults());
3053 else if (offer >= cur_ask)
3065 (void)sprintf(out_val, "Á°²ó¤ÎÄ󼨶â³Û: $%ld",
3067 (void)sprintf(out_val, "Your last offer: %ld",
3071 put_str(out_val, 1, 39);
3072 say_comment_2(cur_ask, annoyed);
3078 if (cancel) return (TRUE);
3080 /* Update bargaining info */
3081 updatebargain(*price, final_ask, o_ptr->number);
3089 * Haggling routine -RAK-
3091 * Return TRUE if purchase is NOT successful
3093 static bool sell_haggle(object_type *o_ptr, s32b *price)
3095 s32b purse, cur_ask, final_ask;
3096 s32b last_offer = 0, offer = 0;
3098 s32b min_per, max_per;
3099 int flag, loop_flag, noneed;
3100 int annoyed = 0, final = FALSE;
3101 bool cancel = FALSE;
3103 cptr pmt = "Ä󼨶â³Û";
3114 /* Obtain the starting offer and the final offer */
3115 cur_ask = price_item(o_ptr, ot_ptr->max_inflate, TRUE);
3116 final_ask = price_item(o_ptr, ot_ptr->min_inflate, TRUE);
3118 /* Determine if haggling is necessary */
3119 noneed = noneedtobargain(final_ask);
3121 /* Get the owner's payout limit */
3122 purse = (s32b)(ot_ptr->max_cost);
3124 /* No need to haggle */
3125 if (noneed || !manual_haggle || (final_ask >= purse))
3127 /* Apply Sales Tax (if needed) */
3128 if (!manual_haggle && !noneed)
3130 final_ask -= final_ask / 10;
3133 /* No reason to haggle */
3134 if (final_ask >= purse)
3138 msg_print("¨ºÂ¤Ë¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
3140 msg_print("You instantly agree upon the price.");
3145 /* Offer full purse */
3149 /* No need to haggle */
3154 msg_print("·ë¶É¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
3156 msg_print("You eventually agree upon the price.");
3162 /* No haggle option */
3165 /* Message summary */
3167 msg_print("¤¹¤ó¤Ê¤ê¤È¤³¤Î¶â³Û¤Ë¤Þ¤È¤Þ¤Ã¤¿¡£");
3169 msg_print("You quickly agree upon the price.");
3176 cur_ask = final_ask;
3181 pmt = "ºÇ½ªÄ󼨶â³Û";
3183 pmt = "Final Offer";
3188 /* Haggle for the whole pile */
3189 cur_ask *= o_ptr->number;
3190 final_ask *= o_ptr->number;
3193 /* XXX XXX XXX Display commands */
3195 /* Haggling parameters */
3196 min_per = ot_ptr->haggle_per;
3197 max_per = min_per * 3;
3199 /* Mega-Hack -- artificial "last offer" value */
3200 last_offer = object_value(o_ptr) * o_ptr->number;
3201 last_offer = last_offer * ot_ptr->max_inflate / 100L;
3206 /* No incremental haggling yet */
3210 for (flag = FALSE; !flag; )
3216 (void)sprintf(out_val, "%s : %ld", pmt, (long)cur_ask);
3217 put_str(out_val, 1, 0);
3219 cancel = receive_offer("Ä󼨤¹¤ë²Á³Ê? ",
3221 cancel = receive_offer("What price do you ask? ",
3224 &offer, last_offer, -1, cur_ask, final);
3230 else if (offer < cur_ask)
3233 /* rejected, reset offer for incremental haggling */
3236 else if (offer == cur_ask)
3247 if (flag || !loop_flag) break;
3252 x1 = 100 * (last_offer - offer) / (last_offer - cur_ask);
3255 if (haggle_insults())
3261 else if (x1 > max_per)
3264 if (x1 < max_per) x1 = max_per;
3266 x2 = rand_range(x1-2, x1+2);
3267 x3 = ((offer - cur_ask) * x2 / 100L) + 1;
3268 /* don't let the price go down */
3272 if (cur_ask > final_ask)
3274 cur_ask = final_ask;
3277 pmt = "ºÇ½ªÄ󼨶â³Û";
3279 pmt = "Final Offer";
3287 /* Äɲà $0 ¤ÇÇ㤤¼è¤é¤ì¤Æ¤·¤Þ¤¦¤Î¤òËÉ»ß By FIRST*/
3290 (void)(increase_insults());
3293 else if (offer <= cur_ask)
3304 (void)sprintf(out_val,
3306 "Á°²ó¤ÎÄ󼨲Á³Ê $%ld", (long)last_offer);
3308 "Your last bid %ld", (long)last_offer);
3311 put_str(out_val, 1, 39);
3312 say_comment_3(cur_ask, annoyed);
3318 if (cancel) return (TRUE);
3320 /* Update bargaining info */
3321 updatebargain(*price, final_ask, o_ptr->number);
3329 * Buy an item from a store -RAK-
3331 static void store_purchase(void)
3343 char o_name[MAX_NLEN];
3348 if (cur_store_num == STORE_MUSEUM)
3351 msg_print("Çîʪ´Û¤«¤é¼è¤ê½Ð¤¹¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£");
3353 msg_print("Museum.");
3359 if (st_ptr->stock_num <= 0)
3361 if (cur_store_num == STORE_HOME)
3363 msg_print("²æ¤¬²È¤Ë¤Ï²¿¤âÃÖ¤¤¤Æ¤¢¤ê¤Þ¤»¤ó¡£");
3365 msg_print("Your home is empty.");
3370 msg_print("¸½ºß¾¦Éʤκ߸ˤòÀڤ餷¤Æ¤¤¤Þ¤¹¡£");
3372 msg_print("I am currently out of stock.");
3379 /* Find the number of objects on this and following pages */
3380 i = (st_ptr->stock_num - store_top);
3382 /* And then restrict it to the current page */
3387 /* ¥Ö¥é¥Ã¥¯¥Þ¡¼¥±¥Ã¥È¤Î»þ¤ÏÊ̤Υá¥Ã¥»¡¼¥¸ */
3388 switch( cur_store_num ) {
3390 sprintf(out_val, "¤É¤Î¥¢¥¤¥Æ¥à¤ò¼è¤ê¤Þ¤¹¤«? ");
3393 sprintf(out_val, "¤É¤ì? ");
3396 sprintf(out_val, "¤É¤ÎÉÊʪ¤¬Íߤ·¤¤¤ó¤À¤¤? ");
3400 if (cur_store_num == STORE_HOME)
3402 sprintf(out_val, "Which item do you want to take? ");
3406 sprintf(out_val, "Which item are you interested in? ");
3411 /* Get the item number to be bought */
3412 if (!get_stock(&item, out_val, 0, i - 1)) return;
3414 /* Get the actual index */
3415 item = item + store_top;
3417 /* Get the actual item */
3418 o_ptr = &st_ptr->stock[item];
3420 /* Assume the player wants just one of them */
3423 /* Get local object */
3426 /* Get a copy of the object */
3427 object_copy(j_ptr, o_ptr);
3430 * If a rod or wand, allocate total maximum timeouts or charges
3431 * between those purchased and left on the shelf.
3433 reduce_charges(j_ptr, o_ptr->number - amt);
3435 /* Modify quantity */
3436 j_ptr->number = amt;
3438 /* Hack -- require room in pack */
3439 if (!inven_carry_okay(j_ptr))
3442 msg_print("¤½¤ó¤Ê¤Ë¥¢¥¤¥Æ¥à¤ò»ý¤Æ¤Ê¤¤¡£");
3444 msg_print("You cannot carry that many different items.");
3450 /* Determine the "best" price (per item) */
3451 best = price_item(j_ptr, ot_ptr->min_inflate, FALSE);
3453 /* Find out how many the player wants */
3454 if (o_ptr->number > 1)
3456 /* Hack -- note cost of "fixed" items */
3457 if ((cur_store_num != STORE_HOME) &&
3458 (o_ptr->ident & IDENT_FIXED))
3461 msg_format("°ì¤Ä¤Ë¤Ä¤ $%ld¤Ç¤¹¡£", (long)(best));
3463 msg_format("That costs %ld gold per item.", (long)(best));
3468 /* Get a quantity */
3469 amt = get_quantity(NULL, o_ptr->number);
3471 /* Allow user abort */
3472 if (amt <= 0) return;
3475 /* Get local object */
3478 /* Get desired object */
3479 object_copy(j_ptr, o_ptr);
3482 * If a rod or wand, allocate total maximum timeouts or charges
3483 * between those purchased and left on the shelf.
3485 reduce_charges(j_ptr, o_ptr->number - amt);
3487 /* Modify quantity */
3488 j_ptr->number = amt;
3490 /* Hack -- require room in pack */
3491 if (!inven_carry_okay(j_ptr))
3494 msg_print("¥¶¥Ã¥¯¤Ë¤½¤Î¥¢¥¤¥Æ¥à¤òÆþ¤ì¤ë·ä´Ö¤¬¤Ê¤¤¡£");
3496 msg_print("You cannot carry that many items.");
3502 /* Attempt to buy it */
3503 if (cur_store_num != STORE_HOME)
3505 /* Fixed price, quick buy */
3506 if (o_ptr->ident & (IDENT_FIXED))
3511 /* Go directly to the "best" deal */
3512 price = (best * j_ptr->number);
3518 /* Describe the object (fully) */
3519 object_desc(o_name, j_ptr, 0);
3523 msg_format("%s(%c)¤ò¹ØÆþ¤¹¤ë¡£", o_name, I2A(item));
3525 msg_format("Buying %s (%c).", o_name, I2A(item));
3530 /* Haggle for a final price */
3531 choice = purchase_haggle(j_ptr, &price);
3533 /* Hack -- Got kicked out */
3534 if (st_ptr->store_open >= turn) return;
3537 /* Player wants it */
3540 /* Fix the item price (if "correctly" haggled) */
3541 if (price == (best * j_ptr->number)) o_ptr->ident |= (IDENT_FIXED);
3543 /* Player can afford it */
3544 if (p_ptr->au >= price)
3549 if (cur_store_num == STORE_BLACK) /* The black market is illegal! */
3550 chg_virtue(V_JUSTICE, -1);
3551 if((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
3552 chg_virtue(V_NATURE, -1);
3560 /* Spend the money */
3563 /* Update the display */
3566 /* Hack -- buying an item makes you aware of it */
3567 object_aware(j_ptr);
3569 /* Hack -- clear the "fixed" flag from the item */
3570 j_ptr->ident &= ~(IDENT_FIXED);
3572 /* Describe the transaction */
3573 object_desc(o_name, j_ptr, 0);
3577 msg_format("%s¤ò $%ld¤Ç¹ØÆþ¤·¤Þ¤·¤¿¡£", o_name, (long)price);
3579 msg_format("You bought %s for %ld gold.", o_name, (long)price);
3582 strcpy(record_o_name, o_name);
3585 if (record_buy) do_cmd_write_nikki(NIKKI_BUY, 0, o_name);
3586 object_desc(o_name, o_ptr, OD_NAME_ONLY);
3587 if(record_rand_art && o_ptr->art_name)
3588 do_cmd_write_nikki(NIKKI_ART, 0, o_name);
3590 /* Erase the inscription */
3591 j_ptr->inscription = 0;
3593 /* Erase the "feeling" */
3594 j_ptr->feeling = FEEL_NONE;
3595 j_ptr->ident &= ~(IDENT_STORE);
3596 /* Give it to the player */
3597 item_new = inven_carry(j_ptr);
3599 /* Describe the final result */
3600 object_desc(o_name, &inventory[item_new], 0);
3604 msg_format("%s(%c)¤ò¼ê¤ËÆþ¤ì¤¿¡£", o_name, index_to_label(item_new));
3606 msg_format("You have %s (%c).",
3607 o_name, index_to_label(item_new));
3610 /* Auto-inscription */
3611 autopick_alter_item(item_new, FALSE);
3613 /* Now, reduce the original stack's pval. */
3614 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
3616 o_ptr->pval -= j_ptr->pval;
3622 /* Note how many slots the store used to have */
3623 i = st_ptr->stock_num;
3625 /* Remove the bought items from the store */
3626 store_item_increase(item, -amt);
3627 store_item_optimize(item);
3629 /* Store is empty */
3630 if (st_ptr->stock_num == 0)
3633 if (one_in_(STORE_SHUFFLE))
3638 msg_print("Ź¼ç¤Ï°úÂष¤¿¡£");
3640 msg_print("The shopkeeper retires.");
3644 /* Shuffle the store */
3645 store_shuffle(cur_store_num);
3648 sprintf(buf, "%s (%s)",
3649 ot_ptr->owner_name, race_info[ot_ptr->owner_race].title);
3650 put_str(buf, 3, 10);
3651 sprintf(buf, "%s (%ld)",
3652 (f_name + f_info[cur_store_feat].name), (long)(ot_ptr->max_cost));
3661 msg_print("Ź¼ç¤Ï¿·¤¿¤Êºß¸Ë¤ò¼è¤ê½Ð¤·¤¿¡£");
3663 msg_print("The shopkeeper brings out some new stock.");
3669 for (i = 0; i < 10; i++)
3671 /* Maintain the store */
3672 store_maint(p_ptr->town_num, cur_store_num);
3678 /* Redraw everything */
3679 display_inventory();
3682 /* The item is gone */
3683 else if (st_ptr->stock_num != i)
3685 /* Pick the correct screen */
3686 if (store_top >= st_ptr->stock_num) store_top -= 12;
3688 /* Redraw everything */
3689 display_inventory();
3692 /* Item is still here */
3695 /* Redraw the item */
3696 display_entry(item);
3700 /* Player cannot afford it */
3703 /* Simple message (no insult) */
3705 msg_print("¤ª¶â¤¬Â¤ê¤Þ¤»¤ó¡£");
3707 msg_print("You do not have enough gold.");
3714 /* Home is much easier */
3717 bool combined_or_reordered;
3719 /* Distribute charges of wands/rods */
3720 distribute_charges(o_ptr, j_ptr, amt);
3722 /* Give it to the player */
3723 item_new = inven_carry(j_ptr);
3725 /* Describe just the result */
3726 object_desc(o_name, &inventory[item_new], 0);
3730 msg_format("%s(%c)¤ò¼è¤Ã¤¿¡£",
3732 msg_format("You have %s (%c).",
3734 o_name, index_to_label(item_new));
3739 /* Take note if we take the last one */
3740 i = st_ptr->stock_num;
3742 /* Remove the items from the home */
3743 store_item_increase(item, -amt);
3744 store_item_optimize(item);
3746 combined_or_reordered = combine_and_reorder_home(STORE_HOME);
3748 /* Hack -- Item is still here */
3749 if (i == st_ptr->stock_num)
3751 /* Redraw everything */
3752 if (combined_or_reordered) display_inventory();
3754 /* Redraw the item */
3755 else display_entry(item);
3758 /* The item is gone */
3762 if (st_ptr->stock_num == 0) store_top = 0;
3764 /* Nothing left on that screen */
3765 else if (store_top >= st_ptr->stock_num) store_top -= 12;
3767 /* Redraw everything */
3768 display_inventory();
3770 chg_virtue(V_SACRIFICE, 1);
3774 /* Not kicked out */
3780 * Sell an item to the store (or home)
3782 static void store_sell(void)
3788 s32b price, value, dummy;
3797 char o_name[MAX_NLEN];
3800 /* Prepare a prompt */
3801 if (cur_store_num == STORE_HOME)
3803 q = "¤É¤Î¥¢¥¤¥Æ¥à¤òÃÖ¤¤Þ¤¹¤«? ";
3805 q = "Drop which item? ";
3808 else if (cur_store_num == STORE_MUSEUM)
3810 q = "¤É¤Î¥¢¥¤¥Æ¥à¤ò´ó£¤·¤Þ¤¹¤«? ";
3812 q = "Give which item? ";
3817 q = "¤É¤Î¥¢¥¤¥Æ¥à¤òÇä¤ê¤Þ¤¹¤«? ";
3819 q = "Sell which item? ";
3823 item_tester_no_ryoute = TRUE;
3824 /* Only allow items the store will buy */
3825 item_tester_hook = store_will_buy;
3828 /* ²æ¤¬²È¤Ç¤ª¤«¤·¤Ê¥á¥Ã¥»¡¼¥¸¤¬½Ð¤ë¥ª¥ê¥¸¥Ê¥ë¤Î¥Ð¥°¤ò½¤Àµ */
3829 if (cur_store_num == STORE_HOME)
3832 s = "ÃÖ¤±¤ë¥¢¥¤¥Æ¥à¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£";
3834 s = "You don't have any item to drop.";
3837 else if (cur_store_num == STORE_MUSEUM)
3840 s = "´ó£¤Ç¤¤ë¥¢¥¤¥Æ¥à¤ò»ý¤Ã¤Æ¤¤¤Þ¤»¤ó¡£";
3842 s = "You don't have any item to give.";
3848 s = "Íߤ·¤¤Êª¤¬¤Ê¤¤¤Ç¤¹¤Í¤¨¡£";
3850 s = "You have nothing that I want.";
3854 if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR))) return;
3856 /* Get the item (in the pack) */
3859 o_ptr = &inventory[item];
3862 /* Get the item (on the floor) */
3865 o_ptr = &o_list[0 - item];
3869 /* Hack -- Cannot remove cursed items */
3870 if ((item >= INVEN_RARM) && object_is_cursed(o_ptr))
3874 msg_print("¤Õ¡¼¤à¡¢¤É¤¦¤ä¤é¤½¤ì¤Ï¼ö¤ï¤ì¤Æ¤¤¤ë¤è¤¦¤À¤Í¡£");
3876 msg_print("Hmmm, it seems to be cursed.");
3885 /* Assume one item */
3888 /* Find out how many the player wants (letter means "all") */
3889 if (o_ptr->number > 1)
3891 /* Get a quantity */
3892 amt = get_quantity(NULL, o_ptr->number);
3894 /* Allow user abort */
3895 if (amt <= 0) return;
3898 /* Get local object */
3901 /* Get a copy of the object */
3902 object_copy(q_ptr, o_ptr);
3904 /* Modify quantity */
3905 q_ptr->number = amt;
3908 * Hack -- If a rod or wand, allocate total maximum
3909 * timeouts or charges to those being sold. -LM-
3911 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
3913 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
3916 /* Get a full description */
3917 object_desc(o_name, q_ptr, 0);
3919 /* Remove any inscription, feeling for stores */
3920 if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
3922 q_ptr->inscription = 0;
3923 q_ptr->feeling = FEEL_NONE;
3926 /* Is there room in the store (or the home?) */
3927 if (!store_check_num(q_ptr))
3929 if (cur_store_num == STORE_HOME)
3931 msg_print("²æ¤¬²È¤Ë¤Ï¤â¤¦ÃÖ¤¯¾ì½ê¤¬¤Ê¤¤¡£");
3933 msg_print("Your home is full.");
3936 else if (cur_store_num == STORE_MUSEUM)
3938 msg_print("Çîʪ´Û¤Ï¤â¤¦ËþÇÕ¤À¡£");
3940 msg_print("Museum is full.");
3945 msg_print("¤¹¤¤¤Þ¤»¤ó¤¬¡¢Å¹¤Ë¤Ï¤â¤¦ÃÖ¤¯¾ì½ê¤¬¤¢¤ê¤Þ¤»¤ó¡£");
3947 msg_print("I have not the room in my store to keep it.");
3955 if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
3957 /* Describe the transaction */
3959 msg_format("%s(%c)¤òÇäµÑ¤¹¤ë¡£", o_name, index_to_label(item));
3961 msg_format("Selling %s (%c).", o_name, index_to_label(item));
3967 choice = sell_haggle(q_ptr, &price);
3970 if (st_ptr->store_open >= turn) return;
3982 if (cur_store_num == STORE_BLACK) /* The black market is illegal! */
3983 chg_virtue(V_JUSTICE, -1);
3985 if((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
3986 chg_virtue(V_NATURE, 1);
3989 /* Get some money */
3992 /* Update the display */
3995 /* Get the "apparent" value */
3996 dummy = object_value(q_ptr) * q_ptr->number;
3999 identify_item(o_ptr);
4001 /* Get local object */
4004 /* Get a copy of the object */
4005 object_copy(q_ptr, o_ptr);
4007 /* Modify quantity */
4008 q_ptr->number = amt;
4010 /* Make it look like to be known */
4011 q_ptr->ident |= IDENT_STORE;
4014 * Hack -- If a rod or wand, let the shopkeeper know just
4015 * how many charges he really paid for. -LM-
4017 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4019 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
4022 /* Get the "actual" value */
4023 value = object_value(q_ptr) * q_ptr->number;
4025 /* Get the description all over again */
4026 object_desc(o_name, q_ptr, 0);
4028 /* Describe the result (in message buffer) */
4030 msg_format("%s¤ò $%ld¤ÇÇäµÑ¤·¤Þ¤·¤¿¡£", o_name, (long)price);
4032 msg_format("You sold %s for %ld gold.", o_name, (long)price);
4035 if (record_sell) do_cmd_write_nikki(NIKKI_SELL, 0, o_name);
4037 if (!((o_ptr->tval == TV_FIGURINE) && (value > 0)))
4039 /* Analyze the prices (and comment verbally) unless a figurine*/
4040 purchase_analyze(price, value, dummy);
4044 * Hack -- Allocate charges between those wands or rods sold
4045 * and retained, unless all are being sold. -LM-
4047 distribute_charges(o_ptr, q_ptr, amt);
4049 /* Reset timeouts of the sold items */
4052 /* Take the item from the player, describe the result */
4053 inven_item_increase(item, -amt);
4054 inven_item_describe(item);
4056 /* If items remain, auto-inscribe before optimizing */
4057 if (o_ptr->number > 0)
4058 autopick_alter_item(item, FALSE);
4060 inven_item_optimize(item);
4065 /* The store gets that (known) item */
4066 item_pos = store_carry(q_ptr);
4068 /* Re-display if item is now in store */
4071 store_top = (item_pos / 12) * 12;
4072 display_inventory();
4077 /* Player is at museum */
4078 else if (cur_store_num == STORE_MUSEUM)
4080 char o2_name[MAX_NLEN];
4081 object_desc(o2_name, q_ptr, OD_NAME_ONLY);
4083 if (-1 == store_check_num(q_ptr))
4086 msg_print("¤½¤ì¤ÈƱ¤¸ÉÊʪ¤Ï´û¤ËÇîʪ´Û¤Ë¤¢¤ë¤è¤¦¤Ç¤¹¡£");
4088 msg_print("The same object as it is already in the Museum.");
4094 msg_print("Çîʪ´Û¤Ë´ó£¤·¤¿¤â¤Î¤Ï¼è¤ê½Ð¤¹¤³¤È¤¬¤Ç¤¤Þ¤»¤ó¡ª¡ª");
4096 msg_print("You cannot take items which is given to the Museum back!!");
4100 if (!get_check(format("ËÜÅö¤Ë%s¤ò´ó£¤·¤Þ¤¹¤«¡©", o2_name))) return;
4102 if (!get_check(format("Really give %s to the Museum? ", o2_name))) return;
4106 identify_item(q_ptr);
4107 q_ptr->ident |= IDENT_MENTAL;
4109 /* Distribute charges of wands/rods */
4110 distribute_charges(o_ptr, q_ptr, amt);
4114 msg_format("%s¤òÃÖ¤¤¤¿¡£(%c)", o_name, index_to_label(item));
4116 msg_format("You drop %s (%c).", o_name, index_to_label(item));
4121 /* Take it from the players inventory */
4122 inven_item_increase(item, -amt);
4123 inven_item_describe(item);
4124 inven_item_optimize(item);
4129 /* Let the home carry it */
4130 item_pos = home_carry(q_ptr);
4132 /* Update store display */
4135 store_top = (item_pos / 12) * 12;
4136 display_inventory();
4139 /* Player is at home */
4142 /* Distribute charges of wands/rods */
4143 distribute_charges(o_ptr, q_ptr, amt);
4147 msg_format("%s¤òÃÖ¤¤¤¿¡£(%c)", o_name, index_to_label(item));
4149 msg_format("You drop %s (%c).", o_name, index_to_label(item));
4154 /* Take it from the players inventory */
4155 inven_item_increase(item, -amt);
4156 inven_item_describe(item);
4157 inven_item_optimize(item);
4162 /* Let the home carry it */
4163 item_pos = home_carry(q_ptr);
4165 /* Update store display */
4168 store_top = (item_pos / 12) * 12;
4169 display_inventory();
4173 if ((choice == 0) && (item >= INVEN_RARM))
4182 * Examine an item in a store -JDL-
4184 static void store_examine(void)
4189 char o_name[MAX_NLEN];
4194 if (st_ptr->stock_num <= 0)
4196 if (cur_store_num == STORE_HOME)
4198 msg_print("²æ¤¬²È¤Ë¤Ï²¿¤âÃÖ¤¤¤Æ¤¢¤ê¤Þ¤»¤ó¡£");
4200 msg_print("Your home is empty.");
4203 else if (cur_store_num == STORE_MUSEUM)
4205 msg_print("Çîʪ´Û¤Ë¤Ï²¿¤âÃÖ¤¤¤Æ¤¢¤ê¤Þ¤»¤ó¡£");
4207 msg_print("Museum is empty.");
4212 msg_print("¸½ºß¾¦Éʤκ߸ˤòÀڤ餷¤Æ¤¤¤Þ¤¹¡£");
4214 msg_print("I am currently out of stock.");
4221 /* Find the number of objects on this and following pages */
4222 i = (st_ptr->stock_num - store_top);
4224 /* And then restrict it to the current page */
4229 sprintf(out_val, "¤É¤ì¤òÄ´¤Ù¤Þ¤¹¤«¡©");
4231 sprintf(out_val, "Which item do you want to examine? ");
4235 /* Get the item number to be examined */
4236 if (!get_stock(&item, out_val, 0, i - 1)) return;
4238 /* Get the actual index */
4239 item = item + store_top;
4241 /* Get the actual item */
4242 o_ptr = &st_ptr->stock[item];
4244 /* Require full knowledge */
4245 if (!(o_ptr->ident & IDENT_MENTAL))
4247 /* This can only happen in the home */
4249 msg_print("¤³¤Î¥¢¥¤¥Æ¥à¤Ë¤Ä¤¤¤ÆÆäËÃΤäƤ¤¤ë¤³¤È¤Ï¤Ê¤¤¡£");
4251 msg_print("You have no special knowledge about that item.");
4258 object_desc(o_name, o_ptr, 0);
4262 msg_format("%s¤òÄ´¤Ù¤Æ¤¤¤ë...", o_name);
4264 msg_format("Examining %s...", o_name);
4268 /* Describe it fully */
4269 if (!screen_object(o_ptr, SCROBJ_FORCE_DETAIL))
4271 msg_print("ÆäËÊѤï¤Ã¤¿¤È¤³¤í¤Ï¤Ê¤¤¤è¤¦¤À¡£");
4273 msg_print("You see nothing special.");
4282 * Remove an item from museum (Originally from TOband)
4284 static void museum_remove_object(void)
4289 char o_name[MAX_NLEN];
4293 if (st_ptr->stock_num <= 0)
4296 msg_print("Çîʪ´Û¤Ë¤Ï²¿¤âÃÖ¤¤¤Æ¤¢¤ê¤Þ¤»¤ó¡£");
4298 msg_print("Museum is empty.");
4304 /* Find the number of objects on this and following pages */
4305 i = st_ptr->stock_num - store_top;
4307 /* And then restrict it to the current page */
4312 sprintf(out_val, "¤É¤Î¥¢¥¤¥Æ¥à¤ÎŸ¼¨¤ò¤ä¤á¤µ¤»¤Þ¤¹¤«¡©");
4314 sprintf(out_val, "Which item do you want to order to remove? ");
4317 /* Get the item number to be removed */
4318 if (!get_stock(&item, out_val, 0, i - 1)) return;
4320 /* Get the actual index */
4321 item = item + store_top;
4323 /* Get the actual item */
4324 o_ptr = &st_ptr->stock[item];
4327 object_desc(o_name, o_ptr, 0);
4330 msg_print("Ÿ¼¨¤ò¤ä¤á¤µ¤»¤¿¥¢¥¤¥Æ¥à¤ÏÆóÅ٤ȸ«¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡ª");
4331 if (!get_check(format("ËÜÅö¤Ë%s¤ÎŸ¼¨¤ò¤ä¤á¤µ¤»¤Þ¤¹¤«¡©", o_name))) return;
4333 msg_print("You cannot see items which is removed from the Museum!");
4334 if (!get_check(format("Really order to remove %s from the Museum? ", o_name))) return;
4339 msg_format("%s¤ÎŸ¼¨¤ò¤ä¤á¤µ¤»¤¿¡£", o_name);
4341 msg_format("You ordered to remove %s.", o_name);
4344 /* Remove the items from the home */
4345 store_item_increase(item, -o_ptr->number);
4346 store_item_optimize(item);
4348 (void)combine_and_reorder_home(STORE_MUSEUM);
4350 /* The item is gone */
4353 if (st_ptr->stock_num == 0) store_top = 0;
4355 /* Nothing left on that screen */
4356 else if (store_top >= st_ptr->stock_num) store_top -= 12;
4358 /* Redraw everything */
4359 display_inventory();
4366 * Hack -- set this to leave the store
4368 static bool leave_store = FALSE;
4372 * Process a command in a store
4374 * Note that we must allow the use of a few "special" commands
4375 * in the stores which are not allowed in the dungeon, and we
4376 * must disable some commands which are allowed in the dungeon
4377 * but not in the stores, to prevent chaos.
4379 static void store_process_command(void)
4381 #ifdef ALLOW_REPEAT /* TNB */
4383 /* Handle repeating the last command */
4386 #endif /* ALLOW_REPEAT -- TNB */
4388 if (rogue_like_commands && command_cmd == 'l')
4390 command_cmd = 'x'; /* hack! */
4393 /* Parse the command */
4394 switch (command_cmd)
4404 /* 1 ¥Ú¡¼¥¸Ìá¤ë¥³¥Þ¥ó¥É: ²æ¤¬²È¤Î¥Ú¡¼¥¸¿ô¤¬Â¿¤¤¤Î¤Ç½ÅÊõ¤¹¤ë¤Ï¤º By BUG */
4407 if (st_ptr->stock_num <= 12) {
4409 msg_print("¤³¤ì¤ÇÁ´Éô¤Ç¤¹¡£");
4411 msg_print("Entire inventory is shown.");
4416 if ( store_top < 0 )
4417 store_top = ((st_ptr->stock_num - 1 )/12) * 12;
4418 if ( (cur_store_num == STORE_HOME) && (powerup_home == FALSE) )
4419 if ( store_top >= 12 ) store_top = 12;
4420 display_inventory();
4428 if (st_ptr->stock_num <= 12)
4431 msg_print("¤³¤ì¤ÇÁ´Éô¤Ç¤¹¡£");
4433 msg_print("Entire inventory is shown.");
4441 * ±£¤·¥ª¥×¥·¥ç¥ó(powerup_home)¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¤¤Ï
4442 * ²æ¤¬²È¤Ç¤Ï 2 ¥Ú¡¼¥¸¤Þ¤Ç¤·¤«É½¼¨¤·¤Ê¤¤
4444 if ((cur_store_num == STORE_HOME) &&
4445 (powerup_home == FALSE) &&
4446 (st_ptr->stock_num >= STORE_INVEN_MAX))
4448 if (store_top >= (STORE_INVEN_MAX - 1))
4455 if (store_top >= st_ptr->stock_num) store_top = 0;
4458 display_inventory();
4471 /* Get (purchase) */
4498 /*** Inventory Commands ***/
4500 /* Wear/wield equipment */
4507 /* Take off equipment */
4514 /* Destroy an item */
4521 /* Equipment list */
4528 /* Inventory list */
4536 /*** Various commands ***/
4538 /* Identify an object */
4545 /* Hack -- toggle windows */
4548 toggle_inven_equip();
4554 /*** Use various objects ***/
4559 if ( (p_ptr->pclass == CLASS_MINDCRAFTER) ||
4560 (p_ptr->pclass == CLASS_BERSERKER) ||
4561 (p_ptr->pclass == CLASS_NINJA) ||
4562 (p_ptr->pclass == CLASS_MIRROR_MASTER)
4563 ) do_cmd_mind_browse();
4564 else if (p_ptr->pclass == CLASS_SMITH)
4566 else if (p_ptr->pclass == CLASS_MAGIC_EATER)
4567 do_cmd_magic_eater(TRUE);
4568 else do_cmd_browse();
4572 /* Inscribe an object */
4579 /* Uninscribe an object */
4582 do_cmd_uninscribe();
4588 /*** Help and Such ***/
4597 /* Identify symbol */
4600 do_cmd_query_symbol();
4604 /* Character description */
4607 p_ptr->town_num = old_town_num;
4608 do_cmd_change_name();
4609 p_ptr->town_num = inner_town_num;
4615 /*** System Commands ***/
4617 /* Hack -- User interface */
4624 /* Single line from a pref file */
4627 p_ptr->town_num = old_town_num;
4629 p_ptr->town_num = inner_town_num;
4633 /* Interact with macros */
4636 p_ptr->town_num = old_town_num;
4638 p_ptr->town_num = inner_town_num;
4642 /* Interact with visuals */
4645 p_ptr->town_num = old_town_num;
4647 p_ptr->town_num = inner_town_num;
4651 /* Interact with colors */
4654 p_ptr->town_num = old_town_num;
4656 p_ptr->town_num = inner_town_num;
4660 /* Interact with options */
4664 (void)combine_and_reorder_home(STORE_HOME);
4670 /*** Misc Commands ***/
4686 /* Repeat level feeling */
4693 /* Show previous message */
4696 do_cmd_message_one();
4700 /* Show previous messages */
4713 /* Check artifacts, uniques etc. */
4720 /* Load "screen dump" */
4723 do_cmd_load_screen();
4727 /* Save "screen dump" */
4730 do_cmd_save_screen();
4734 /* Hack -- Unknown command */
4737 if ((cur_store_num == STORE_MUSEUM) && (command_cmd == 'r'))
4739 museum_remove_object();
4744 msg_print("¤½¤Î¥³¥Þ¥ó¥É¤ÏŹ¤ÎÃæ¤Ç¤Ï»È¤¨¤Þ¤»¤ó¡£");
4746 msg_print("That command does not work in stores.");
4757 * Enter a store, and interact with it.
4759 * Note that we use the standard "request_command()" function
4760 * to get a command, allowing us to use "command_arg" and all
4761 * command macros and other nifty stuff, but we use the special
4762 * "shopping" argument, to force certain commands to be converted
4763 * into other commands, normally, we convert "p" (pray) and "m"
4764 * (cast magic) into "g" (get), and "s" (search) into "d" (drop).
4766 void do_cmd_store(void)
4772 bool need_redraw_store_inv; /* To redraw missiles damage and prices in store */
4775 /* Access the player grid */
4776 c_ptr = &cave[py][px];
4778 /* Verify a store */
4779 if (!cave_have_flag_grid(c_ptr, FF_STORE))
4782 msg_print("¤³¤³¤Ë¤ÏŹ¤¬¤¢¤ê¤Þ¤»¤ó¡£");
4784 msg_print("You see no store here.");
4790 /* Extract the store code */
4791 which = f_info[c_ptr->feat].subtype;
4793 old_town_num = p_ptr->town_num;
4794 if ((which == STORE_HOME) || (which == STORE_MUSEUM)) p_ptr->town_num = 1;
4795 if (dun_level) p_ptr->town_num = NO_TOWN;
4796 inner_town_num = p_ptr->town_num;
4798 /* Hack -- Check the "locked doors" */
4799 if ((town[p_ptr->town_num].store[which].store_open >= turn) ||
4803 msg_print("¥É¥¢¤Ë¸°¤¬¤«¤«¤Ã¤Æ¤¤¤ë¡£");
4805 msg_print("The doors are locked.");
4808 p_ptr->town_num = old_town_num;
4812 /* Calculate the number of store maintainances since the last visit */
4813 maintain_num = (turn - town[p_ptr->town_num].store[which].last_visit) / (TURNS_PER_TICK * STORE_TICKS);
4815 /* Maintain the store max. 10 times */
4816 if (maintain_num > 10) maintain_num = 10;
4820 /* Maintain the store */
4821 for (i = 0; i < maintain_num; i++)
4822 store_maint(p_ptr->town_num, which);
4824 /* Save the visit */
4825 town[p_ptr->town_num].store[which].last_visit = turn;
4828 /* Forget the lite */
4831 /* Forget the view */
4835 /* Hack -- Character is in "icky" mode */
4836 character_icky = TRUE;
4839 /* No command argument */
4842 /* No repeated command */
4845 /* No automatic command */
4849 /* Save the store number */
4850 cur_store_num = which;
4852 /* Hack -- save the store feature */
4853 cur_store_feat = c_ptr->feat;
4855 /* Save the store and owner pointers */
4856 st_ptr = &town[p_ptr->town_num].store[cur_store_num];
4857 ot_ptr = &owners[cur_store_num][st_ptr->owner];
4860 /* Start at the beginning */
4863 /* Display the store */
4867 leave_store = FALSE;
4869 /* Interact with player */
4870 while (!leave_store)
4872 /* Hack -- Clear line 1 */
4879 /* Basic commands */
4881 prt(" ESC) ·úʪ¤«¤é½Ð¤ë", 21, 0);
4883 prt(" ESC) Exit from Building.", 21, 0);
4887 /* Browse if necessary */
4888 if (st_ptr->stock_num > 12)
4891 prt(" -)Á°¥Ú¡¼¥¸", 22, 0);
4892 prt(" ¥¹¥Ú¡¼¥¹) ¼¡¥Ú¡¼¥¸", 23, 0);
4894 prt(" -) Previous page", 22, 0);
4895 prt(" SPACE) Next page", 23, 0);
4901 if (cur_store_num == STORE_HOME)
4904 prt("g) ¥¢¥¤¥Æ¥à¤ò¼è¤ë", 21, 27);
4905 prt("d) ¥¢¥¤¥Æ¥à¤òÃÖ¤¯", 22, 27);
4906 prt("x) ²È¤Î¥¢¥¤¥Æ¥à¤òÄ´¤Ù¤ë", 23,27);
4908 prt("g) Get an item.", 21, 27);
4909 prt("d) Drop an item.", 22, 27);
4910 prt("x) eXamine an item in the home.", 23,27);
4914 /* Museum commands */
4915 else if (cur_store_num == STORE_MUSEUM)
4918 prt("d) ¥¢¥¤¥Æ¥à¤òÃÖ¤¯", 21, 27);
4919 prt("r) ¥¢¥¤¥Æ¥à¤ÎŸ¼¨¤ò¤ä¤á¤ë", 22, 27);
4920 prt("x) Çîʪ´Û¤Î¥¢¥¤¥Æ¥à¤òÄ´¤Ù¤ë", 23, 27);
4922 prt("d) Drop an item.", 21, 27);
4923 prt("r) order to Remove an item.", 22, 27);
4924 prt("x) eXamine an item in the museum.", 23, 27);
4928 /* Shop commands XXX XXX XXX */
4932 prt("p) ¾¦ÉʤòÇ㤦", 21, 30);
4933 prt("s) ¥¢¥¤¥Æ¥à¤òÇä¤ë", 22, 30);
4934 prt("x) ¾¦ÉʤòÄ´¤Ù¤ë", 23,30);
4936 prt("p) Purchase an item.", 21, 30);
4937 prt("s) Sell an item.", 22, 30);
4938 prt("x) eXamine an item in the shop", 23,30);
4943 /* ´ðËÜŪ¤Ê¥³¥Þ¥ó¥É¤ÎÄɲÃɽ¼¨ */
4945 prt("i/e) »ý¤Áʪ/ÁõÈ÷¤Î°ìÍ÷", 21, 56);
4947 if (rogue_like_commands)
4949 prt("w/T) ÁõÈ÷¤¹¤ë/¤Ï¤º¤¹", 22, 56);
4953 prt("w/t) ÁõÈ÷¤¹¤ë/¤Ï¤º¤¹", 22, 56);
4956 prt("i/e) Inventry/Equipment list", 21, 56);
4958 if (rogue_like_commands)
4960 prt("w/T) Wear/Take off equipment", 22, 56);
4964 prt("w/t) Wear/Take off equipment", 22, 56);
4969 prt("¥³¥Þ¥ó¥É:", 20, 0);
4971 prt("You may: ", 20, 0);
4976 request_command(TRUE);
4978 /* Process the command */
4979 store_process_command();
4982 * Hack -- To redraw missiles damage and prices in store
4983 * If player's charisma changes, or if player changes a bow, PU_BONUS is set
4985 need_redraw_store_inv = (p_ptr->update & PU_BONUS) ? TRUE : FALSE;
4987 /* Hack -- Character is still in "icky" mode */
4988 character_icky = TRUE;
4996 /* XXX XXX XXX Pack Overflow */
4997 if (inventory[INVEN_PACK].k_idx)
4999 int item = INVEN_PACK;
5001 object_type *o_ptr = &inventory[item];
5003 /* Hack -- Flee from the store */
5004 if (cur_store_num != STORE_HOME)
5008 if (cur_store_num == STORE_MUSEUM)
5009 msg_print("¥¶¥Ã¥¯¤«¤é¥¢¥¤¥Æ¥à¤¬¤¢¤Õ¤ì¤½¤¦¤Ê¤Î¤Ç¡¢¤¢¤ï¤Æ¤ÆÇîʪ´Û¤«¤é½Ð¤¿...");
5011 msg_print("¥¶¥Ã¥¯¤«¤é¥¢¥¤¥Æ¥à¤¬¤¢¤Õ¤ì¤½¤¦¤Ê¤Î¤Ç¡¢¤¢¤ï¤Æ¤ÆŹ¤«¤é½Ð¤¿...");
5013 if (cur_store_num == STORE_MUSEUM)
5014 msg_print("Your pack is so full that you flee the Museum...");
5016 msg_print("Your pack is so full that you flee the store...");
5024 /* Hack -- Flee from the home */
5025 else if (!store_check_num(o_ptr))
5029 msg_print("¥¶¥Ã¥¯¤«¤é¥¢¥¤¥Æ¥à¤¬¤¢¤Õ¤ì¤½¤¦¤Ê¤Î¤Ç¡¢¤¢¤ï¤Æ¤Æ²È¤«¤é½Ð¤¿...");
5031 msg_print("Your pack is so full that you flee your home...");
5039 /* Hack -- Drop items into the home */
5047 char o_name[MAX_NLEN];
5050 /* Give a message */
5052 msg_print("¥¶¥Ã¥¯¤«¤é¥¢¥¤¥Æ¥à¤¬¤¢¤Õ¤ì¤Æ¤·¤Þ¤Ã¤¿¡ª");
5054 msg_print("Your pack overflows!");
5058 /* Get local object */
5061 /* Grab a copy of the item */
5062 object_copy(q_ptr, o_ptr);
5065 object_desc(o_name, q_ptr, 0);
5069 msg_format("%s¤¬Íî¤Á¤¿¡£(%c)", o_name, index_to_label(item));
5071 msg_format("You drop %s (%c).", o_name, index_to_label(item));
5075 /* Remove it from the players inventory */
5076 inven_item_increase(item, -255);
5077 inven_item_describe(item);
5078 inven_item_optimize(item);
5083 /* Let the home carry it */
5084 item_pos = home_carry(q_ptr);
5086 /* Redraw the home */
5089 store_top = (item_pos / 12) * 12;
5090 display_inventory();
5095 /* Hack -- Redisplay store prices if charisma changes */
5096 /* Hack -- Redraw missiles damage if player changes bow */
5097 if (need_redraw_store_inv) display_inventory();
5099 /* Hack -- get kicked out of the store */
5100 if (st_ptr->store_open >= turn) leave_store = TRUE;
5103 p_ptr->town_num = old_town_num;
5105 /* Free turn XXX XXX XXX */
5109 /* Hack -- Character is no longer in "icky" mode */
5110 character_icky = FALSE;
5113 /* Hack -- Cancel automatic command */
5116 /* Hack -- Cancel "see" mode */
5117 command_see = FALSE;
5120 /* Flush messages XXX XXX XXX */
5124 /* Clear the screen */
5128 /* Update everything */
5129 p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
5130 p_ptr->update |= (PU_MONSTERS);
5132 /* Redraw entire screen */
5133 p_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY);
5136 p_ptr->redraw |= (PR_MAP);
5139 p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5145 * Shuffle one of the stores.
5147 void store_shuffle(int which)
5153 if (which == STORE_HOME) return;
5154 if (which == STORE_MUSEUM) return;
5157 /* Save the store index */
5158 cur_store_num = which;
5160 /* Activate that store */
5161 st_ptr = &town[p_ptr->town_num].store[cur_store_num];
5164 /* Pick a new owner */
5167 st_ptr->owner = (byte)randint0(MAX_OWNERS);
5168 if (j == st_ptr->owner) continue;
5169 for (i = 1;i < max_towns; i++)
5171 if (i == p_ptr->town_num) continue;
5172 if (st_ptr->owner == town[i].store[cur_store_num].owner) break;
5174 if (i == max_towns) break;
5177 /* Activate the new owner */
5178 ot_ptr = &owners[cur_store_num][st_ptr->owner];
5181 /* Reset the owner data */
5182 st_ptr->insult_cur = 0;
5183 st_ptr->store_open = 0;
5184 st_ptr->good_buy = 0;
5185 st_ptr->bad_buy = 0;
5188 /* Hack -- discount all the items */
5189 for (i = 0; i < st_ptr->stock_num; i++)
5194 o_ptr = &st_ptr->stock[i];
5196 if (!object_is_artifact(o_ptr))
5198 /* Hack -- Sell all non-artifact old items for "half price" */
5199 o_ptr->discount = 50;
5201 /* Hack -- Items are no longer "fixed price" */
5202 o_ptr->ident &= ~(IDENT_FIXED);
5204 /* Mega-Hack -- Note that the item is "on sale" */
5206 o_ptr->inscription = quark_add("Çä½ÐÃæ");
5208 o_ptr->inscription = quark_add("on sale");
5216 * Maintain the inventory at the stores.
5218 void store_maint(int town_num, int store_num)
5222 cur_store_num = store_num;
5225 if (store_num == STORE_HOME) return;
5226 if (store_num == STORE_MUSEUM) return;
5228 /* Activate that store */
5229 st_ptr = &town[town_num].store[store_num];
5231 /* Activate the owner */
5232 ot_ptr = &owners[store_num][st_ptr->owner];
5234 /* Store keeper forgives the player */
5235 st_ptr->insult_cur = 0;
5237 /* Mega-Hack -- prune the black market */
5238 if (store_num == STORE_BLACK)
5240 /* Destroy crappy black market items */
5241 for (j = st_ptr->stock_num - 1; j >= 0; j--)
5243 object_type *o_ptr = &st_ptr->stock[j];
5245 /* Destroy crappy items */
5246 if (black_market_crap(o_ptr))
5248 /* Destroy the item */
5249 store_item_increase(j, 0 - o_ptr->number);
5250 store_item_optimize(j);
5256 /* Choose the number of slots to keep */
5257 j = st_ptr->stock_num;
5259 /* Sell a few items */
5260 j = j - randint1(STORE_TURNOVER);
5262 /* Never keep more than "STORE_MAX_KEEP" slots */
5263 if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
5265 /* Always "keep" at least "STORE_MIN_KEEP" items */
5266 if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
5268 /* Hack -- prevent "underflow" */
5271 /* Destroy objects until only "j" slots are left */
5272 while (st_ptr->stock_num > j) store_delete();
5275 /* Choose the number of slots to fill */
5276 j = st_ptr->stock_num;
5278 /* Buy some more items */
5279 j = j + randint1(STORE_TURNOVER);
5281 /* Never keep more than "STORE_MAX_KEEP" slots */
5282 if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
5284 /* Always "keep" at least "STORE_MIN_KEEP" items */
5285 if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
5287 /* Hack -- prevent "overflow" */
5288 if (j >= st_ptr->stock_size) j = st_ptr->stock_size - 1;
5290 /* Acquire some new items */
5291 while (st_ptr->stock_num < j) store_create();
5296 * Initialize the stores
5298 void store_init(int town_num, int store_num)
5302 cur_store_num = store_num;
5304 /* Activate that store */
5305 st_ptr = &town[town_num].store[store_num];
5313 st_ptr->owner = (byte)randint0(MAX_OWNERS);
5314 for (i = 1;i < max_towns; i++)
5316 if (i == town_num) continue;
5317 if (st_ptr->owner == town[i].store[store_num].owner) break;
5319 if (i == max_towns) break;
5322 /* Activate the new owner */
5323 ot_ptr = &owners[store_num][st_ptr->owner];
5326 /* Initialize the store */
5327 st_ptr->store_open = 0;
5328 st_ptr->insult_cur = 0;
5329 st_ptr->good_buy = 0;
5330 st_ptr->bad_buy = 0;
5332 /* Nothing in stock */
5333 st_ptr->stock_num = 0;
5336 * MEGA-HACK - Last visit to store is
5337 * BEFORE player birth to enable store restocking
5339 st_ptr->last_visit = -10L * TURNS_PER_TICK * STORE_TICKS;
5341 /* Clear any old items */
5342 for (k = 0; k < st_ptr->stock_size; k++)
5344 object_wipe(&st_ptr->stock[k]);
5349 void move_to_black_market(object_type *o_ptr)
5352 if (!p_ptr->town_num) return;
5354 st_ptr = &town[p_ptr->town_num].store[STORE_BLACK];
5356 o_ptr->ident |= IDENT_STORE;
5358 (void)store_carry(o_ptr);
5360 object_wipe(o_ptr); /* Don't leave a bogus object behind... */