OSDN Git Service

[Refactor] #39962 Separated cmd-help.c/h from files.c
[hengband/hengband.git] / src / store.c
1 /*!
2  * @file store.c
3  * @brief 店の処理 / Store commands
4  * @date 2014/02/02
5  * @author
6  * Copyright (c) 1989 James E. Wilson, Robert A. Koeneke\n
7  * This software may be copied and distributed for educational, research, and\n
8  * not for profit purposes provided that this copyright and statement are\n
9  * included in all such copies.\n
10  * 2014 Deskull rearranged comment for Doxygen.
11  */
12
13 #include "angband.h"
14 #include "core.h"
15 #include "util.h"
16 #include "term.h"
17
18 #include "floor.h"
19 #include "cmd/cmd-basic.h"
20 #include "cmd/cmd-dump.h"
21 #include "cmd/cmd-help.h"
22 #include "cmd/cmd-item.h"
23 #include "cmd/cmd-smith.h"
24 #include "cmd/cmd-zapwand.h"
25 #include "cmd/cmd-magiceat.h"
26 #include "spells.h"
27 #include "store.h"
28 #include "avatar.h"
29 #include "cmd-spell.h"
30 #include "rumor.h"
31 #include "player-status.h"
32 #include "player-class.h"
33 #include "player-inventory.h"
34 #include "object-flavor.h"
35 #include "object-hook.h"
36 #include "floor-events.h"
37 #include "snipe.h"
38 #include "files.h"
39 #include "player-effects.h"
40 #include "player-race.h"
41 #include "mind.h"
42 #include "world.h"
43 #include "objectkind.h"
44 #include "autopick.h"
45 #include "floor-town.h"
46 #include "japanese.h"
47 #include "view-mainwindow.h"
48 #include "wild.h"
49
50 #define MIN_STOCK 12
51
52  /*!
53   * @brief 闘技場のモンスターID及び報酬アイテムテーブル /
54   * Store owners (exactly four "possible" owners per store, chosen randomly)
55   * @details
56   * <pre>
57   * { name, purse, max greed, min greed, haggle_per, tolerance, race, unused }
58   *
59   * Lifted extra shopkeepers from CthAngband (don't you just love open source
60   * development? ;-)). Since this gave less than 32 unique names for some
61   * shops, those have their first x names copied to reach 32.
62   *
63   * For the weapon and armour shops, several owners have a limit of 5k.
64   *
65   * I want to do 50k owners, but the purse is currently s16b. Perhaps
66   * we should just store 1/10th of the purse?
67   * </pre>
68   */
69 const owner_type owners[MAX_STORES][MAX_OWNERS] =
70 {
71         {
72                 /* General store - 32 unique names */
73                 /*
74                   Raistlin は dragonlance の powerful wizard 。
75                   Rincewind the Chicken は Terry Pratchett の Discworld の登場人物 上記のパロディ?、
76                   { "憶病者ラストリン",       200,    175,  108,   4,  12,  RACE_HUMAN},
77                   { "Raistlin the Chicken",       200,    175, 108,  4, 12, RACE_HUMAN},
78                 */
79
80 #ifdef JP
81                 { "フレンドリーなビルボ",       200,    170,  108,   5,  15,  RACE_HOBBIT},
82                 { "憶病者リンスウィンド",       200,    175,  108,   4,  12,  RACE_HUMAN},
83                 { "背の低いサルタン",             300,    170,  107,   5,  15,  RACE_GNOME},
84                 { "ハンサムなライア=エル",      300,    165,  107,   6,  18,  RACE_ELF},
85                 { "親切なファリルマウエン",         250,    170, 108,  5, 15, RACE_HOBBIT},
86                 { "臆病者ヴォワラン",       500,    175, 108,  4, 12, RACE_HUMAN},
87                 { "チビのエラシュナク",          750,    170, 107,  5, 15, RACE_BEASTMAN},
88                 { "ハンサムなグラッグ",        1000,    165, 107,  6, 18, RACE_HALF_TITAN},
89                 { "ケチなフォロビア",         250,    170, 108,  5, 15, RACE_HUMAN},
90                 { "馬鹿のエリス",       500,    175, 108,  4, 12, RACE_HUMAN},
91                 { "腹ペコのフィルバート",          750,    170, 107,  5, 15, RACE_VAMPIRE},
92                 { "スナーグル・サシグア",        1000,    165, 107,  6, 18, RACE_MIND_FLAYER},
93                 { "長死きエロワーズ",         250,    170, 108,  5, 15, RACE_SPECTRE},
94                 { "ノロマのフンディ",       500,    175, 108,  4, 12, RACE_ZOMBIE},
95                 { "グランサス",          750,    170, 107,  5, 15, RACE_SKELETON},
96                 { "丁寧なロラックス",        1000,    165, 107,  6, 18, RACE_VAMPIRE},
97                 { "ブッチ",         250,    170, 108,  5, 15, RACE_HALF_ORC},
98                 { "美しきエルベレス",       500,    175, 108,  4, 12, RACE_HIGH_ELF},
99                 { "こそこそサーレス",          750,    170, 107,  5, 15, RACE_GNOME},
100                 { "ナーロック",        1000,    165, 107,  6, 18, RACE_DWARF},
101                 { "チビのヘイネッカ",         250,    170, 108,  5, 15, RACE_GNOME},
102                 { "きちがいロワラン",       500,    175, 108,  4, 12, RACE_HALF_GIANT},
103                 { "毒息のウート",          750,    170, 107,  5, 15, RACE_DRACONIAN},
104                 { "でぶっちょアラァカ",        1000,    165, 107,  6, 18, RACE_DRACONIAN},
105                 { "低能なプーゴー",         250,    170, 108,  5, 15, RACE_BEASTMAN},
106                 { "フェロールフィリアン",       500,    175, 108,  4, 12, RACE_ELF},
107                 { "年寄りマロカ",          750,    170, 107,  5, 15, RACE_GNOME},
108                 { "勇敢なサシン",        1000,    165, 107,  6, 18, RACE_HALF_GIANT},
109                 { "田舎者アビエマール",         250,    170, 108,  5, 15, RACE_HUMAN},
110                 { "貧乏なハーク",       500,    175, 108,  4, 12, RACE_HALF_ORC},
111                 { "みじめなソアリン",          750,    170, 107,  5, 15, RACE_ZOMBIE},
112                 { "質素なメルラ",        1000,    165, 107,  6, 18, RACE_ELF},
113 #else
114                 { "Bilbo the Friendly",         200,    170, 108,  5, 15, RACE_HOBBIT},
115                 { "Rincewind the Chicken",       200,    175, 108,  4, 12, RACE_HUMAN},
116                 { "Sultan the Midget",          300,    170, 107,  5, 15, RACE_GNOME},
117                 { "Lyar-el the Comely",         300,    165, 107,  6, 18, RACE_ELF},
118                 { "Falilmawen the Friendly",         250,    170, 108,  5, 15, RACE_HOBBIT},
119                 { "Voirin the Cowardly",       500,    175, 108,  4, 12, RACE_HUMAN},
120                 { "Erashnak the Midget",          750,    170, 107,  5, 15, RACE_BEASTMAN},
121                 { "Grug the Comely",        1000,    165, 107,  6, 18, RACE_HALF_TITAN},
122                 { "Forovir the Cheap",         250,    170, 108,  5, 15, RACE_HUMAN},
123                 { "Ellis the Fool",       500,    175, 108,  4, 12, RACE_HUMAN},
124                 { "Filbert the Hungry",          750,    170, 107,  5, 15, RACE_VAMPIRE},
125                 { "Fthnargl Psathiggua",        1000,    165, 107,  6, 18, RACE_MIND_FLAYER},
126                 { "Eloise Long-Dead",         250,    170, 108,  5, 15, RACE_SPECTRE},
127                 { "Fundi the Slow",       500,    175, 108,  4, 12, RACE_ZOMBIE},
128                 { "Granthus",          750,    170, 107,  5, 15, RACE_SKELETON},
129                 { "Lorax the Suave",        1000,    165, 107,  6, 18, RACE_VAMPIRE},
130                 { "Butch",         250,    170, 108,  5, 15, RACE_HALF_ORC},
131                 { "Elbereth the Beautiful",       500,    175, 108,  4, 12, RACE_HIGH_ELF},
132                 { "Sarleth the Sneaky",          750,    170, 107,  5, 15, RACE_GNOME},
133                 { "Narlock",        1000,    165, 107,  6, 18, RACE_DWARF},
134                 { "Haneka the Small",         250,    170, 108,  5, 15, RACE_GNOME},
135                 { "Loirin the Mad",       500,    175, 108,  4, 12, RACE_HALF_GIANT},
136                 { "Wuto Poisonbreath",          750,    170, 107,  5, 15, RACE_DRACONIAN},
137                 { "Araaka the Rotund",        1000,    165, 107,  6, 18, RACE_DRACONIAN},
138                 { "Poogor the Dumb",         250,    170, 108,  5, 15, RACE_BEASTMAN},
139                 { "Felorfiliand",       500,    175, 108,  4, 12, RACE_ELF},
140                 { "Maroka the Aged",          750,    170, 107,  5, 15, RACE_GNOME},
141                 { "Sasin the Bold",        1000,    165, 107,  6, 18, RACE_HALF_GIANT},
142                 { "Abiemar the Peasant",         250,    170, 108,  5, 15, RACE_HUMAN},
143                 { "Hurk the Poor",       500,    175, 108,  4, 12, RACE_HALF_ORC},
144                 { "Soalin the Wretched",          750,    170, 107,  5, 15, RACE_ZOMBIE},
145                 { "Merulla the Humble",        1000,    165, 107,  6, 18, RACE_ELF},
146 #endif
147         },
148         {
149                 /* Armoury - 28 unique names */
150 #ifdef JP
151                 { "醜悪コン=ダー",      5000,   210,  115,   5,   7,  RACE_HALF_ORC},
152                 { "頑固者ダーグ=ロウ",  10000,  190,  111,   4,   9,  RACE_HUMAN},
153                 { "賢者デカド",                 25000,  200,  112,   4,  10,  RACE_DUNADAN},
154                 { "鍛冶屋のウィーランド",   30000,  200,  112,   4,   5,  RACE_DWARF},
155                 { "醜悪コン=ダー",           10000,   210, 115,  5,  7, RACE_HALF_ORC},
156                 { "頑固者ダーグ=ロウ",          15000,  190, 111,  4,  9, RACE_HUMAN},
157                 { "ハンサムなデカド",            25000,  200, 112,  4, 10, RACE_AMBERITE},
158                 { "エロー・ドラゴンスケイル",          30000,  200, 112,  4,  5, RACE_ELF},
159                 { "デリカトス",           10000,   210, 115,  5,  7, RACE_SPRITE},
160                 { "巨大なグルース",          15000,  190, 111,  4,  9, RACE_HALF_GIANT},
161                 { "アニムス",            25000,  200, 112,  4, 10, RACE_GOLEM},
162                 { "マルヴァス",          30000,  200, 112,  4,  5, RACE_HALF_TITAN},
163                 { "セラクシス",           10000,   210, 115,  5,  7, RACE_ZOMBIE},
164                 { "デス・チル",          5000,  190, 111,  4,  9, RACE_SPECTRE},
165                 { "微かなドリオス",            25000,  200, 112,  4, 10, RACE_SPECTRE},
166                 { "冷たいバスリック",          30000,  200, 112,  4,  5, RACE_VAMPIRE},
167                 { "冷酷ヴェンジェラ",           10000,   210, 115,  5,  7, RACE_HALF_TROLL},
168                 { "強者ウィラナ",          15000,  190, 111,  4,  9, RACE_HUMAN},
169                 { "ヨジョ二世",            25000,  200, 112,  4, 10, RACE_DWARF},
170                 { "優しいラナラー",          30000,  200, 112,  4,  5, RACE_AMBERITE},
171                 { "不浄のホルバグ",           5000,   210, 115,  5,  7, RACE_HALF_ORC},
172                 { "テレパスのエレレン",          15000,  190, 111,  4,  9, RACE_DARK_ELF},
173                 { "イスドリリアス",            25000,  200, 112,  4, 10, RACE_SPRITE},
174                 { "一つ目ヴェグナー",          5000,  200, 112,  4,  5, RACE_CYCLOPS},
175                 { "混沌のロディッシュ",           10000,   210, 115,  5,  7, RACE_BEASTMAN},
176                 { "剣豪ヘジン",          15000,  190, 111,  4,  9, RACE_NIBELUNG},
177                 { "ずる屋のエルベレリス",           10000,  200, 112,  4, 10, RACE_DARK_ELF},
178                 { "インプのザサス",          30000,  200, 112,  4,  5, RACE_IMP},
179                 { "醜悪コン=ダー",           5000,   210, 115,  5,  7, RACE_HALF_ORC},
180                 { "頑固者ダーグ=ロウ",          10000,  190, 111,  4,  9, RACE_HUMAN},
181                 { "ハンサムなデカド",            25000,  200, 112,  4, 10, RACE_AMBERITE},
182                 { "鍛冶屋のウィーランド",          30000,  200, 112,  4,  5, RACE_DWARF},
183 #else
184                 { "Kon-Dar the Ugly",           5000,   210, 115,  5,  7, RACE_HALF_ORC},
185                 { "Darg-Low the Grim",          10000,  190, 111,  4,  9, RACE_HUMAN},
186                 { "Decado the Handsome",            25000,  200, 112,  4, 10, RACE_DUNADAN},
187                 { "Wieland the Smith",          30000,  200, 112,  4,  5, RACE_DWARF},
188                 { "Kon-Dar the Ugly",           10000,   210, 115,  5,  7, RACE_HALF_ORC},
189                 { "Darg-Low the Grim",          15000,  190, 111,  4,  9, RACE_HUMAN},
190                 { "Decado the Handsome",            25000,  200, 112,  4, 10, RACE_AMBERITE},
191                 { "Elo Dragonscale",          30000,  200, 112,  4,  5, RACE_ELF},
192                 { "Delicatus",           10000,   210, 115,  5,  7, RACE_SPRITE},
193                 { "Gruce the Huge",          15000,  190, 111,  4,  9, RACE_HALF_GIANT},
194                 { "Animus",            25000,  200, 112,  4, 10, RACE_GOLEM},
195                 { "Malvus",          30000,  200, 112,  4,  5, RACE_HALF_TITAN},
196                 { "Selaxis",           10000,   210, 115,  5,  7, RACE_ZOMBIE},
197                 { "Deathchill",          5000,  190, 111,  4,  9, RACE_SPECTRE},
198                 { "Drios the Faint",            25000,  200, 112,  4, 10, RACE_SPECTRE},
199                 { "Bathric the Cold",          30000,  200, 112,  4,  5, RACE_VAMPIRE},
200                 { "Vengella the Cruel",           10000,   210, 115,  5,  7, RACE_HALF_TROLL},
201                 { "Wyrana the Mighty",          15000,  190, 111,  4,  9, RACE_HUMAN},
202                 { "Yojo II",            25000,  200, 112,  4, 10, RACE_DWARF},
203                 { "Ranalar the Sweet",          30000,  200, 112,  4,  5, RACE_AMBERITE},
204                 { "Horbag the Unclean",           5000,   210, 115,  5,  7, RACE_HALF_ORC},
205                 { "Elelen the Telepath",          15000,  190, 111,  4,  9, RACE_DARK_ELF},
206                 { "Isedrelias",            25000,  200, 112,  4, 10, RACE_SPRITE},
207                 { "Vegnar One-eye",          5000,  200, 112,  4,  5, RACE_CYCLOPS},
208                 { "Rodish the Chaotic",           10000,   210, 115,  5,  7, RACE_BEASTMAN},
209                 { "Hesin Swordmaster",          15000,  190, 111,  4,  9, RACE_NIBELUNG},
210                 { "Elvererith the Cheat",           10000,  200, 112,  4, 10, RACE_DARK_ELF},
211                 { "Zzathath the Imp",          30000,  200, 112,  4,  5, RACE_IMP},
212                 { "Kon-Dar the Ugly",           5000,   210, 115,  5,  7, RACE_HALF_ORC},
213                 { "Darg-Low the Grim",          10000,  190, 111,  4,  9, RACE_HUMAN},
214                 { "Decado the Handsome",            25000,  200, 112,  4, 10, RACE_AMBERITE},
215                 { "Wieland the Smith",          30000,  200, 112,  4,  5, RACE_DWARF},
216 #endif
217         },
218
219         {
220                 /* Weapon Smith - 28 unique names */
221 #ifdef JP
222                 { "残忍なるアーノルド",        5000,   210,  115,   6,   6,  RACE_HALF_TROLL},
223                 { "獣殺しのアーンダル", 10000,  185,  110,   5,   9,  RACE_HALF_ELF},
224                 { "獣マスターのエディー", 25000,  190,  115,   5,   7,  RACE_HOBBIT},
225                 { "竜殺しのオグライン", 30000,  195,  112,   4,   8,  RACE_DWARF},
226                 { "熟練者ドリュー",      10000,   210, 115,  6,  6, RACE_HUMAN},
227                 { "龍の子オラックス",        15000,  185, 110,  5,  9, RACE_DRACONIAN},
228                 { "病気持ちのアンスラックス",         25000,  190, 115,  5,  7, RACE_BEASTMAN},
229                 { "頑丈者アルコス",       30000,  195, 112,  4,  8, RACE_DWARF},
230                 { "腐れ者のサリアス",      5000,   210, 115,  6,  6, RACE_ZOMBIE},
231                 { "晒し骨のトゥエシク",        15000,  185, 110,  5,  9, RACE_SKELETON},
232                 { "ビリオス",         25000,  190, 115,  5,  7, RACE_BEASTMAN},
233                 { "ファスガル",       30000,  195, 112,  4,  8, RACE_ZOMBIE},
234                 { "パラディンのエレフリス",      10000,   210, 115,  6,  6, RACE_BARBARIAN},
235                 { "キ'トリッ'ク",        15000,  185, 110,  5,  9, RACE_KLACKON},
236                 { "蜘蛛の友ドゥロカス",         25000,  190, 115,  5,  7, RACE_DARK_ELF},
237                 { "巨人殺しのフングス",       30000,  195, 112,  4,  8, RACE_DWARF},
238                 { "デランサ",      10000,   210, 115,  6,  6, RACE_ELF},
239                 { "レンジャーのソルビスタニ",        15000,  185, 110,  5,  9, RACE_HALF_ELF},
240                 { "ノロマのゾリル",         25000,  190, 115,  5,  7, RACE_GOLEM},
241                 { "イーオン・フラックス",       20000,  195, 112,  4,  8, RACE_HALF_ELF},
242                 { "強者ナドック",      10000,   210, 115,  6,  6, RACE_HOBBIT},
243                 { "弱虫エラモグ",        15000,  185, 110,  5,  9, RACE_KOBOLD},
244                 { "公正なエオウィリス",         25000,  190, 115,  5,  7, RACE_VAMPIRE},
245                 { "バルログ殺しのヒュイモグ",       30000,  195, 112,  4,  8, RACE_HALF_ORC},
246                 { "冷酷ピーダス",      5000,   210, 115,  6,  6, RACE_HUMAN},
247                 { "ヴァモグ スレイヤー",        15000,  185, 110,  5,  9, RACE_HALF_OGRE},
248                 { "性悪フーシュナク",         25000,  190, 115,  5,  7, RACE_BEASTMAN},
249                 { "舞闘バレン",       30000,  195, 112,  4,  8, RACE_BARBARIAN},
250                 { "残忍なるアーノルド",      5000,   210, 115,  6,  6, RACE_BARBARIAN},
251                 { "獣殺しのアーンダル",        10000,  185, 110,  5,  9, RACE_HALF_ELF},
252                 { "ビーストマスター・エディー",         25000,  190, 115,  5,  7, RACE_HALF_ORC},
253                 { "竜殺しのオグライン",       30000,  195, 112,  4,  8, RACE_DWARF},
254 #else
255                 { "Arnold the Beastly",      5000,   210, 115,  6,  6, RACE_BARBARIAN},
256                 { "Arndal Beast-Slayer",        10000,  185, 110,  5,  9, RACE_HALF_ELF},
257                 { "Eddie Beast-Master",         25000,  190, 115,  5,  7, RACE_HALF_ORC},
258                 { "Oglign Dragon-Slayer",       30000,  195, 112,  4,  8, RACE_DWARF},
259                 { "Drew the Skilled",      10000,   210, 115,  6,  6, RACE_HUMAN},
260                 { "Orrax Dragonson",        15000,  185, 110,  5,  9, RACE_DRACONIAN},
261                 { "Anthrax Disease-Carrier",         25000,  190, 115,  5,  7, RACE_BEASTMAN},
262                 { "Arkhoth the Stout",       30000,  195, 112,  4,  8, RACE_DWARF},
263                 { "Sarlyas the Rotten",      5000,   210, 115,  6,  6, RACE_ZOMBIE},
264                 { "Tuethic Bare-Bones",        15000,  185, 110,  5,  9, RACE_SKELETON},
265                 { "Bilious",         25000,  190, 115,  5,  7, RACE_BEASTMAN},
266                 { "Fasgul",       30000,  195, 112,  4,  8, RACE_ZOMBIE},
267                 { "Ellefris the Paladin",      10000,   210, 115,  6,  6, RACE_BARBARIAN},
268                 { "K'trrik'k",        15000,  185, 110,  5,  9, RACE_KLACKON},
269                 { "Drocus Spiderfriend",         25000,  190, 115,  5,  7, RACE_DARK_ELF},
270                 { "Fungus Giant-Slayer",       30000,  195, 112,  4,  8, RACE_DWARF},
271                 { "Delantha",      10000,   210, 115,  6,  6, RACE_ELF},
272                 { "Solvistani the Ranger",        15000,  185, 110,  5,  9, RACE_HALF_ELF},
273                 { "Xoril the Slow",         25000,  190, 115,  5,  7, RACE_GOLEM},
274                 { "Aeon Flux",       20000,  195, 112,  4,  8, RACE_HALF_ELF},
275                 { "Nadoc the Strong",      10000,   210, 115,  6,  6, RACE_HOBBIT},
276                 { "Eramog the Weak",        15000,  185, 110,  5,  9, RACE_KOBOLD},
277                 { "Eowilith the Fair",         25000,  190, 115,  5,  7, RACE_VAMPIRE},
278                 { "Huimog Balrog-Slayer",       30000,  195, 112,  4,  8, RACE_HALF_ORC},
279                 { "Peadus the Cruel",      5000,   210, 115,  6,  6, RACE_HUMAN},
280                 { "Vamog Slayer",        15000,  185, 110,  5,  9, RACE_HALF_OGRE},
281                 { "Hooshnak the Vicious",         25000,  190, 115,  5,  7, RACE_BEASTMAN},
282                 { "Balenn War-Dancer",       30000,  195, 112,  4,  8, RACE_BARBARIAN},
283                 { "Arnold the Beastly",      5000,   210, 115,  6,  6, RACE_BARBARIAN},
284                 { "Arndal Beast-Slayer",        10000,  185, 110,  5,  9, RACE_HALF_ELF},
285                 { "Eddie Beast-Master",         25000,  190, 115,  5,  7, RACE_HALF_ORC},
286                 { "Oglign Dragon-Slayer",       30000,  195, 112,  4,  8, RACE_DWARF},
287 #endif
288         },
289         {
290                 /* Temple - 22 unique names */
291 #ifdef JP
292                 { "質素なルードヴィヒ",         5000,   175,  109,   6,  15,  RACE_HUMAN},
293                 { "パラディンのガンナー",       10000,  185,  110,   5,  23,  RACE_HUMAN},
294                 { "選ばれしトリン",                     25000,  180,  107,   6,  20,  RACE_ELF},
295                 { "賢明なるサラストロ",                     30000,  185,  109,   5,  15,  RACE_DWARF},
296                 { "パーシヴァル卿",           25000,  180, 107,  6, 20, RACE_HIGH_ELF},
297                 { "神聖なるアセナス",          30000,  185, 109,  5, 15, RACE_HUMAN},
298                 { "マッキノン",         10000,   175, 109,  6, 15, RACE_HUMAN},
299                 { "謹み婦人",         15000,  185, 110,  5, 23, RACE_HIGH_ELF},
300                 { "ドルイドのハシュニック",           25000,  180, 107,  6, 20, RACE_HOBBIT},
301                 { "フィナク",          30000,  185, 109,  5, 15, RACE_YEEK},
302                 { "クリキック",         10000,   175, 109,  6, 15, RACE_KLACKON},
303                 { "荒くれ者モリヴァル",         15000,  185, 110,  5, 23, RACE_ELF},
304                 { "暗きホシャック",           25000,  180, 107,  6, 20, RACE_IMP},
305                 { "賢者アタール",          30000,  185, 109,  5, 15, RACE_HUMAN},
306                 { "清きイベニッド",         10000,   175, 109,  6, 15, RACE_HUMAN},
307                 { "エリディシュ",         15000,  185, 110,  5, 23, RACE_HALF_TROLL},
308                 { "呪術師ヴルドゥシュ",           25000,  180, 107,  6, 20, RACE_HALF_OGRE},
309                 { "狂戦士ハオブ",          30000,  185, 109,  5, 15, RACE_BARBARIAN},
310                 { "若きプルーグディシュ",         10000,   175, 109,  6, 15, RACE_HALF_OGRE},
311                 { "きちがいラムワイズ",         15000,  185, 110,  5, 23, RACE_YEEK},
312                 { "有徳者ムワート",           25000,  180, 107,  6, 20, RACE_KOBOLD},
313                 { "弱虫ダードバード",          30000,  185, 109,  5, 15, RACE_SPECTRE},
314                 { "質素なルードヴィヒ",         5000,   175,  109,   6,  15,  RACE_HUMAN},
315                 { "パラディンのガンナー",       10000,  185,  110,   5,  23,  RACE_HUMAN},
316                 { "選ばれしトリン",                     25000,  180,  107,   6,  20,  RACE_ELF},
317                 { "賢明なるサラストロ",                     30000,  185,  109,   5,  15,  RACE_DWARF},
318                 { "パーシヴァル卿",           25000,  180, 107,  6, 20, RACE_HIGH_ELF},
319                 { "神聖なるアセナス",          30000,  185, 109,  5, 15, RACE_HUMAN},
320                 { "マッキノン",         10000,   175, 109,  6, 15, RACE_HUMAN},
321                 { "謹み婦人",         15000,  185, 110,  5, 23, RACE_HIGH_ELF},
322                 { "ドルイドのハシュニック",           25000,  180, 107,  6, 20, RACE_HOBBIT},
323                 { "フィナク",          30000,  185, 109,  5, 15, RACE_YEEK},
324 #else
325                 { "Ludwig the Humble",          5000,   175, 109,  6, 15, RACE_DWARF},
326                 { "Gunnar the Paladin",         10000,  185, 110,  5, 23, RACE_HALF_TROLL},
327                 { "Torin the Chosen",           25000,  180, 107,  6, 20, RACE_HIGH_ELF},
328                 { "Sarastro the Wise",          30000,  185, 109,  5, 15, RACE_HUMAN},
329                 { "Sir Parsival the Pure",           25000,  180, 107,  6, 20, RACE_HIGH_ELF},
330                 { "Asenath the Holy",          30000,  185, 109,  5, 15, RACE_HUMAN},
331                 { "McKinnon",         10000,   175, 109,  6, 15, RACE_HUMAN},
332                 { "Mistress Chastity",         15000,  185, 110,  5, 23, RACE_HIGH_ELF},
333                 { "Hashnik the Druid",           25000,  180, 107,  6, 20, RACE_HOBBIT},
334                 { "Finak",          30000,  185, 109,  5, 15, RACE_YEEK},
335                 { "Krikkik",         10000,   175, 109,  6, 15, RACE_KLACKON},
336                 { "Morival the Wild",         15000,  185, 110,  5, 23, RACE_ELF},
337                 { "Hoshak the Dark",           25000,  180, 107,  6, 20, RACE_IMP},
338                 { "Atal the Wise",          30000,  185, 109,  5, 15, RACE_HUMAN},
339                 { "Ibenidd the Chaste",         10000,   175, 109,  6, 15, RACE_HUMAN},
340                 { "Eridish",         15000,  185, 110,  5, 23, RACE_HALF_TROLL},
341                 { "Vrudush the Shaman",           25000,  180, 107,  6, 20, RACE_HALF_OGRE},
342                 { "Haob the Berserker",          30000,  185, 109,  5, 15, RACE_BARBARIAN},
343                 { "Proogdish the Youthfull",         10000,   175, 109,  6, 15, RACE_HALF_OGRE},
344                 { "Lumwise the Mad",         15000,  185, 110,  5, 23, RACE_YEEK},
345                 { "Muirt the Virtuous",           25000,  180, 107,  6, 20, RACE_KOBOLD},
346                 { "Dardobard the Weak",          30000,  185, 109,  5, 15, RACE_SPECTRE},
347                 { "Ludwig the Humble",          5000,   175, 109,  6, 15, RACE_DWARF},
348                 { "Gunnar the Paladin",         10000,  185, 110,  5, 23, RACE_HALF_TROLL},
349                 { "Torin the Chosen",           25000,  180, 107,  6, 20, RACE_HIGH_ELF},
350                 { "Sarastro the Wise",          30000,  185, 109,  5, 15, RACE_HUMAN},
351                 { "Sir Parsival the Pure",           25000,  180, 107,  6, 20, RACE_HIGH_ELF},
352                 { "Asenath the Holy",          30000,  185, 109,  5, 15, RACE_HUMAN},
353                 { "McKinnon",         10000,   175, 109,  6, 15, RACE_HUMAN},
354                 { "Mistress Chastity",         15000,  185, 110,  5, 23, RACE_HIGH_ELF},
355                 { "Hashnik the Druid",           25000,  180, 107,  6, 20, RACE_HOBBIT},
356                 { "Finak",          30000,  185, 109,  5, 15, RACE_YEEK},
357 #endif
358         },
359         {
360                 /* Alchemist - 26 unique names */
361 #ifdef JP
362                 { "化学者マウザー",             10000,  190,  111,   5,   8,  RACE_HALF_ELF},
363                 { "カオスのウィズル",   10000,  190,  110,   6,   8,  RACE_HOBBIT},
364                 { "強欲ミダス",              15000,  200,  116,   6,   9,  RACE_GNOME},
365                 { "貧弱ジャ=ファー",                   15000,  220,  111,   4,   9,  RACE_ELF},/*FIRST*/
366                 { "カカルラカカル",           15000,  200, 116,  6,  9, RACE_KLACKON},
367                 { "錬金術師ジャル=エス",       15000,  220, 111,  4,  9, RACE_ELF},
368                 { "用心深いファネラス",         10000,  190, 111,  5,  8, RACE_DWARF},
369                 { "キチガイのルンシー",         10000,  190, 110,  6,  8, RACE_HUMAN},
370                 { "グランブルワース",           15000,  200, 116,  6,  9, RACE_GNOME},
371                 { "フリッター",       15000,  220, 111,  4,  9, RACE_SPRITE},
372                 { "ザリルス",         10000,  190, 111,  5,  8, RACE_HUMAN},
373                 { "古きエグバート",         10000,  190, 110,  6,  8, RACE_DWARF},
374                 { "誇り高きヴァリンドラ",           15000,  200, 116,  6,  9, RACE_HIGH_ELF},
375                 { "錬金術師タエン",       15000,  220, 111,  4,  9, RACE_HUMAN},
376                 { "巧言カイド",         10000,  190, 111,  5,  8, RACE_VAMPIRE},
377                 { "暗きフリア",         10000,  190, 110,  6,  8, RACE_NIBELUNG},
378                 { "質素なドムリ",           15000,  200, 116,  6,  9, RACE_DWARF},
379                 { "魔の子ヤァジュッカ",       15000,  220, 111,  4,  9, RACE_IMP},
380                 { "薬草師ジェララルドール",         10000,  190, 111,  5,  8, RACE_HIGH_ELF},
381                 { "賢者オレラルダン",         10000,  190, 110,  6,  8, RACE_BARBARIAN},
382                 { "デモニシストのフゾグロ",           15000,  200, 116,  6,  9, RACE_IMP},
383                 { "錬金術師ドゥリアシュ",       15000,  220, 111,  4,  9, RACE_HALF_ORC},
384                 { "強者ネリア",         10000,  190, 111,  5,  8, RACE_CYCLOPS},
385                 { "辛口リグナス",         10000,  190, 110,  6,  8, RACE_HALF_ORC},
386                 { "ティルバ",           15000,  200, 116,  6,  9, RACE_HOBBIT},
387                 { "金持ちミリルドリック",       15000,  220, 111,  4,  9, RACE_HUMAN},
388
389                 { "科学者マウザー",         10000,  190, 111,  5,  8, RACE_HALF_ELF},
390                 { "カオスのウィズル",         10000,  190, 110,  6,  8, RACE_HOBBIT},
391                 { "強欲ミダス",           15000,  200, 116,  6,  9, RACE_GNOME},
392                 { "錬金術師ジャ=ファー",       15000,  220, 111,  4,  9, RACE_ELF},
393                 { "カカルラカカル",           15000,  200, 116,  6,  9, RACE_KLACKON},
394                 { "錬金術師ジャル=エス",       15000,  220, 111,  4,  9, RACE_ELF},
395 #else
396                 { "Mauser the Chemist",         10000,  190, 111,  5,  8, RACE_HALF_ELF},
397                 { "Wizzle the Chaotic",         10000,  190, 110,  6,  8, RACE_HOBBIT},
398                 { "Midas the Greedy",           15000,  200, 116,  6,  9, RACE_GNOME},
399                 { "Ja-Far the Alchemist",       15000,  220, 111,  4,  9, RACE_ELF},
400                 { "Kakalrakakal",           15000,  200, 116,  6,  9, RACE_KLACKON},
401                 { "Jal-Eth the Alchemist",       15000,  220, 111,  4,  9, RACE_ELF},
402                 { "Fanelath the Cautious",         10000,  190, 111,  5,  8, RACE_DWARF},
403                 { "Runcie the Insane",         10000,  190, 110,  6,  8, RACE_HUMAN},
404                 { "Grumbleworth",           15000,  200, 116,  6,  9, RACE_GNOME},
405                 { "Flitter",       15000,  220, 111,  4,  9, RACE_SPRITE},
406                 { "Xarillus",         10000,  190, 111,  5,  8, RACE_HUMAN},
407                 { "Egbert the Old",         10000,  190, 110,  6,  8, RACE_DWARF},
408                 { "Valindra the Proud",           15000,  200, 116,  6,  9, RACE_HIGH_ELF},
409                 { "Taen the Alchemist",       15000,  220, 111,  4,  9, RACE_HUMAN},
410                 { "Cayd the Sweet",         10000,  190, 111,  5,  8, RACE_VAMPIRE},
411                 { "Fulir the Dark",         10000,  190, 110,  6,  8, RACE_NIBELUNG},
412                 { "Domli the Humble",           15000,  200, 116,  6,  9, RACE_DWARF},
413                 { "Yaarjukka Demonspawn",       15000,  220, 111,  4,  9, RACE_IMP},
414                 { "Gelaraldor the Herbmaster",         10000,  190, 111,  5,  8, RACE_HIGH_ELF},
415                 { "Olelaldan the Wise",         10000,  190, 110,  6,  8, RACE_BARBARIAN},
416                 { "Fthoglo the Demonicist",           15000,  200, 116,  6,  9, RACE_IMP},
417                 { "Dridash the Alchemist",       15000,  220, 111,  4,  9, RACE_HALF_ORC},
418                 { "Nelir the Strong",         10000,  190, 111,  5,  8, RACE_CYCLOPS},
419                 { "Lignus the Pungent",         10000,  190, 110,  6,  8, RACE_HALF_ORC},
420                 { "Tilba",           15000,  200, 116,  6,  9, RACE_HOBBIT},
421                 { "Myrildric the Wealthy",       15000,  220, 111,  4,  9, RACE_HUMAN},
422
423                 { "Mauser the Chemist",         10000,  190, 111,  5,  8, RACE_HALF_ELF},
424                 { "Wizzle the Chaotic",         10000,  190, 110,  6,  8, RACE_HOBBIT},
425                 { "Midas the Greedy",           15000,  200, 116,  6,  9, RACE_GNOME},
426                 { "Ja-Far the Alchemist",       15000,  220, 111,  4,  9, RACE_ELF},
427                 { "Kakalrakakal",           15000,  200, 116,  6,  9, RACE_KLACKON},
428                 { "Jal-Eth the Alchemist",       15000,  220, 111,  4,  9, RACE_ELF},
429 #endif
430         },
431
432         {
433                 /* Magic Shop - 23 unique names */
434 #ifdef JP
435                 { "ソーサラーのロ=パン",       20000,  200,  110,   7,   8,  RACE_HALF_ELF},
436                 { "偉大なるブガービイ",         20000,  215,  113,   6,  10,  RACE_GNOME},
437                 { "イェンダーの魔法使い",     30000,  200,  110,   7,  10,  RACE_HUMAN},
438                 { "死霊使いリャク",30000,      175,  110,   5,  11,  RACE_HIGH_ELF},
439                 { "魔術師スキドゥニー",        15000,  200, 110,  7,  8, RACE_HALF_ELF},
440                 { "幻術師キリア",       30000,  200, 110,  7, 10, RACE_HUMAN},
441                 { "死霊術師ニッキ",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
442                 { "ソロストラン",        15000,  200, 110,  7,  8, RACE_SPRITE},
443                 { "烏賊口アチシェ",         20000,  215, 113,  6, 10, RACE_MIND_FLAYER},
444                 { "貴族のカザ",       30000,  200, 110,  7, 10, RACE_HIGH_ELF},
445                 { "暗きファジル",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
446                 { "偉大なるケルドーン",        15000,  200, 110,  7,  8, RACE_DWARF},
447                 { "フィランスロプス",         20000,  215, 113,  6, 10, RACE_HOBBIT},
448                 { "魔女のアグナー",       30000,  200, 110,  7, 10, RACE_HUMAN},
449                 { "死霊術師ビュリアンス",       30000,  175, 110,  5, 11, RACE_BEASTMAN},
450                 { "ハイメイジのヴイラク",        15000,  200, 110,  7,  8, RACE_BEASTMAN},
451                 { "知恵者マディッシュ",         20000,  215, 113,  6, 10, RACE_BEASTMAN},
452                 { "ファレブリンボール",       30000,  200, 110,  7, 10, RACE_HIGH_ELF},
453                 { "陰険フェリル=ガンド",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
454                 { "呪術師サレゴード",        15000,  200, 110,  7,  8, RACE_BARBARIAN},
455                 { "神秘家クトゥアロス",         20000,  215, 113,  6, 10, RACE_MIND_FLAYER},
456                 { "幻術師イベリ",       30000,  200, 110,  7, 10, RACE_SKELETON},
457                 { "死霊術師ヘトー",       30000,  175, 110,  5, 11, RACE_YEEK},
458                 { "魔術師ロ=パン",        20000,  200, 110,  7,  8, RACE_HALF_ELF},
459                 { "偉大なるブガービイ",         20000,  215, 113,  6, 10, RACE_GNOME},
460                 { "イェンダーの魔法使い",       30000,  200, 110,  7, 10, RACE_HUMAN},
461                 { "死霊術師リャク",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
462                 { "魔術師スキドゥニー",        15000,  200, 110,  7,  8, RACE_HALF_ELF},
463                 { "幻術師キリア",       30000,  200, 110,  7, 10, RACE_HUMAN},
464                 { "死霊術師ニッキ",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
465                 { "ソロストラン",        15000,  200, 110,  7,  8, RACE_SPRITE},
466                 { "烏賊口アチシェ",         20000,  215, 113,  6, 10, RACE_MIND_FLAYER},
467 #else
468                 { "Lo Pan the Sorcerer",        20000,  200, 110,  7,  8, RACE_HALF_ELF},
469                 { "Buggerby the Great",         20000,  215, 113,  6, 10, RACE_GNOME},
470                 { "The Wizard of Yendor",       30000,  200, 110,  7, 10, RACE_HUMAN},
471                 { "Rjak the Necromancer",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
472                 { "Skidney the Sorcerer",        15000,  200, 110,  7,  8, RACE_HALF_ELF},
473                 { "Kyria the Illusionist",       30000,  200, 110,  7, 10, RACE_HUMAN},
474                 { "Nikki the Necromancer",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
475                 { "Solostoran",        15000,  200, 110,  7,  8, RACE_SPRITE},
476                 { "Achshe the Tentacled",         20000,  215, 113,  6, 10, RACE_MIND_FLAYER},
477                 { "Kaza the Noble",       30000,  200, 110,  7, 10, RACE_HIGH_ELF},
478                 { "Fazzil the Dark",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
479                 { "Keldorn the Grand",        15000,  200, 110,  7,  8, RACE_DWARF},
480                 { "Philanthropus",         20000,  215, 113,  6, 10, RACE_HOBBIT},
481                 { "Agnar the Enchantress",       30000,  200, 110,  7, 10, RACE_HUMAN},
482                 { "Buliance the Necromancer",       30000,  175, 110,  5, 11, RACE_BEASTMAN},
483                 { "Vuirak the High-Mage",        15000,  200, 110,  7,  8, RACE_BEASTMAN},
484                 { "Madish the Smart",         20000,  215, 113,  6, 10, RACE_BEASTMAN},
485                 { "Falebrimbor",       30000,  200, 110,  7, 10, RACE_HIGH_ELF},
486                 { "Felil-Gand the Subtle",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
487                 { "Thalegord the Shaman",        15000,  200, 110,  7,  8, RACE_BARBARIAN},
488                 { "Cthoaloth the Mystic",         20000,  215, 113,  6, 10, RACE_MIND_FLAYER},
489                 { "Ibeli the Illusionist",       30000,  200, 110,  7, 10, RACE_SKELETON},
490                 { "Heto the Necromancer",       30000,  175, 110,  5, 11, RACE_YEEK},
491                 { "Lo Pan the Sorcerer",        20000,  200, 110,  7,  8, RACE_HALF_ELF},
492                 { "Buggerby the Great",         20000,  215, 113,  6, 10, RACE_GNOME},
493                 { "The Wizard of Yendor",       30000,  200, 110,  7, 10, RACE_HUMAN},
494                 { "Rjak the Necromancer",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
495                 { "Skidney the Sorcerer",        15000,  200, 110,  7,  8, RACE_HALF_ELF},
496                 { "Kyria the Illusionist",       30000,  200, 110,  7, 10, RACE_HUMAN},
497                 { "Nikki the Necromancer",       30000,  175, 110,  5, 11, RACE_DARK_ELF},
498                 { "Solostoran",        15000,  200, 110,  7,  8, RACE_SPRITE},
499                 { "Achshe the Tentacled",         20000,  215, 113,  6, 10, RACE_MIND_FLAYER},
500 #endif
501         },
502         {
503                 /* Black Market - 32 unique names */
504 #ifdef JP
505                 { "ガリー=ギガズ",            20000,  250,  150,  10,   5,  RACE_HALF_TROLL},
506                 { "ゴブリンのヒストーア",       20000,  250,  150,  10,   5,  RACE_HALF_ORC},
507                 { "フェレンギ人クアーク",           30000,  250,  150,  10,   5,  RACE_HUMAN},
508                 { "公正なる(?)トッピ",                     30000,  250,  150,  10,   5,  RACE_ELF},
509                 { "死人ヴァッサ",             20000,  250, 150, 10,  5, RACE_ZOMBIE},
510                 { "裏切り者カイン",          20000,  250, 150, 10,  5, RACE_VAMPIRE},
511                 { "ブボニカス",          30000,  250, 150, 10,  5, RACE_BEASTMAN},
512                 { "コープスライト",           30000,  250, 150, 10,  5, RACE_SPECTRE},
513                 { "血に飢えしパリッシュ",                 20000,  250, 150, 10,  5, RACE_VAMPIRE},
514                 { "ヴァイル",          20000,  250, 150, 10,  5, RACE_SKELETON},
515                 { "信頼のプレンティス",          30000,  250, 150, 10,  5, RACE_SKELETON},
516                 { "人間殺しのグリエラ",           30000,  250, 150, 10,  5, RACE_IMP},
517                 { "エンジェル",                 20000,  250, 150, 10,  5, RACE_VAMPIRE},
518                 { "水膨れフロツァム",          20000,  250, 150, 10,  5, RACE_ZOMBIE},
519                 { "ニーヴァル",          30000,  250, 150, 10,  5, RACE_VAMPIRE},
520                 { "明るいアナスタシア",           30000,  250, 150, 10,  5, RACE_SPECTRE},
521                 { "死霊術師チャリティー", 20000,  250, 150, 10,  5, RACE_DARK_ELF},
522                 { "ボクサーのプグナシオス",          20000,  250, 150, 10,  5, RACE_HALF_ORC},
523                 { "幸運なフットソア",          30000,  250, 150, 10,  5, RACE_BEASTMAN},
524                 { "光指のシドリア",           30000,  250, 150, 10,  5, RACE_HUMAN},
525                 { "手品師リアソー",                 20000,  250, 150, 10,  5, RACE_HOBBIT},
526                 { "やりくり上手のジャナッカ",          20000,  250, 150, 10,  5, RACE_GNOME},
527                 { "悪党シーナ",          30000,  250, 150, 10,  5, RACE_GNOME},
528                 { "大爪アルニッキ",           30000,  250, 150, 10,  5, RACE_DRACONIAN},
529                 { "貧乏チャエアンド",                 20000,  250, 150, 10,  5, RACE_HUMAN},
530                 { "山賊アファードーフ",          20000,  250, 150, 10,  5, RACE_BARBARIAN},
531                 { "強欲ラザクスル",          30000,  250, 150, 10,  5, RACE_MIND_FLAYER},
532                 { "ファラレウィン",           30000,  250, 150, 10,  5, RACE_SPRITE},
533                 { "しわしわヴォスール",                 20000,  250, 150, 10,  5, RACE_NIBELUNG},
534                 { "ハンサムなアラオード",          20000,  250, 150, 10,  5, RACE_AMBERITE},
535                 { "負け犬セラドフリド",          30000,  250, 150, 10,  5, RACE_HUMAN},
536                 { "片足のエルーロ",           30000,  250, 150, 10,  5, RACE_HALF_OGRE},
537 #else
538                 { "Gary Gygaz",                 20000,  250, 150, 10,  5, RACE_HALF_TROLL},
539                 { "Histor the Goblin",          20000,  250, 150, 10,  5, RACE_HALF_ORC},
540                 { "Quark the Ferengi",          30000,  250, 150, 10,  5, RACE_DWARF},
541                 { "Topi the Fair(?)",           30000,  250, 150, 10,  5, RACE_HUMAN},
542                 { "Vhassa the Dead",             20000,  250, 150, 10,  5, RACE_ZOMBIE},
543                 { "Kyn the Treacherous",          20000,  250, 150, 10,  5, RACE_VAMPIRE},
544                 { "Bubonicus",          30000,  250, 150, 10,  5, RACE_BEASTMAN},
545                 { "Corpselight",           30000,  250, 150, 10,  5, RACE_SPECTRE},
546                 { "Parrish the Bloodthirsty",                 20000,  250, 150, 10,  5, RACE_VAMPIRE},
547                 { "Vile",          20000,  250, 150, 10,  5, RACE_SKELETON},
548                 { "Prentice the Trusted",          30000,  250, 150, 10,  5, RACE_SKELETON},
549                 { "Griella Humanslayer",           30000,  250, 150, 10,  5, RACE_IMP},
550                 { "Angel",                 20000,  250, 150, 10,  5, RACE_VAMPIRE},
551                 { "Flotsam the Bloated",          20000,  250, 150, 10,  5, RACE_ZOMBIE},
552                 { "Nieval",          30000,  250, 150, 10,  5, RACE_VAMPIRE},
553                 { "Anastasia the Luminous",           30000,  250, 150, 10,  5, RACE_SPECTRE},
554                 { "Charity the Necromancer", 20000,  250, 150, 10,  5, RACE_DARK_ELF},
555                 { "Pugnacious the Pugilist",          20000,  250, 150, 10,  5, RACE_HALF_ORC},
556                 { "Footsore the Lucky",          30000,  250, 150, 10,  5, RACE_BEASTMAN},
557                 { "Sidria Lighfingered",           30000,  250, 150, 10,  5, RACE_HUMAN},
558                 { "Riatho the Juggler",                 20000,  250, 150, 10,  5, RACE_HOBBIT},
559                 { "Janaaka the Shifty",          20000,  250, 150, 10,  5, RACE_GNOME},
560                 { "Cina the Rogue",          30000,  250, 150, 10,  5, RACE_GNOME},
561                 { "Arunikki Greatclaw",           30000,  250, 150, 10,  5, RACE_DRACONIAN},
562                 { "Chaeand the Poor",                 20000,  250, 150, 10,  5, RACE_HUMAN},
563                 { "Afardorf the Brigand",          20000,  250, 150, 10,  5, RACE_BARBARIAN},
564                 { "Lathaxl the Greedy",          30000,  250, 150, 10,  5, RACE_MIND_FLAYER},
565                 { "Falarewyn",           30000,  250, 150, 10,  5, RACE_SPRITE},
566                 { "Vosur the Wrinkled",                 20000,  250, 150, 10,  5, RACE_NIBELUNG},
567                 { "Araord the Handsome",          20000,  250, 150, 10,  5, RACE_AMBERITE},
568                 { "Theradfrid the Loser",          30000,  250, 150, 10,  5, RACE_HUMAN},
569                 { "One-Legged Eroolo",           30000,  250, 150, 10,  5, RACE_HALF_OGRE},
570 #endif
571         },
572         {
573                 /* Home */
574 #ifdef JP
575                 { "我が家",                          0,      100, 100,  0, 99, 99},
576                 { "我が家",                          0,      100, 100,  0, 99, 99},
577                 { "我が家",                          0,      100, 100,  0, 99, 99},
578                 { "我が家",                          0,      100, 100,  0, 99, 99},
579                 { "我が家",                          0,      100, 100,  0, 99, 99},
580                 { "我が家",                          0,      100, 100,  0, 99, 99},
581                 { "我が家",                          0,      100, 100,  0, 99, 99},
582                 { "我が家",                          0,      100, 100,  0, 99, 99},
583                 { "我が家",                          0,      100, 100,  0, 99, 99},
584                 { "我が家",                          0,      100, 100,  0, 99, 99},
585                 { "我が家",                          0,      100, 100,  0, 99, 99},
586                 { "我が家",                          0,      100, 100,  0, 99, 99},
587                 { "我が家",                          0,      100, 100,  0, 99, 99},
588                 { "我が家",                          0,      100, 100,  0, 99, 99},
589                 { "我が家",                          0,      100, 100,  0, 99, 99},
590                 { "我が家",                          0,      100, 100,  0, 99, 99},
591                 { "我が家",                          0,      100, 100,  0, 99, 99},
592                 { "我が家",                          0,      100, 100,  0, 99, 99},
593                 { "我が家",                          0,      100, 100,  0, 99, 99},
594                 { "我が家",                          0,      100, 100,  0, 99, 99},
595                 { "我が家",                          0,      100, 100,  0, 99, 99},
596                 { "我が家",                          0,      100, 100,  0, 99, 99},
597                 { "我が家",                          0,      100, 100,  0, 99, 99},
598                 { "我が家",                          0,      100, 100,  0, 99, 99},
599                 { "我が家",                          0,      100, 100,  0, 99, 99},
600                 { "我が家",                          0,      100, 100,  0, 99, 99},
601                 { "我が家",                          0,      100, 100,  0, 99, 99},
602                 { "我が家",                          0,      100, 100,  0, 99, 99},
603                 { "我が家",                          0,      100, 100,  0, 99, 99},
604                 { "我が家",                          0,      100, 100,  0, 99, 99},
605                 { "我が家",                          0,      100, 100,  0, 99, 99},
606                 { "我が家",                          0,      100, 100,  0, 99, 99},
607 #else
608                 { "Your home",                          0,      100, 100,  0, 99, 99},
609                 { "Your home",                          0,      100, 100,  0, 99, 99},
610                 { "Your home",                          0,      100, 100,  0, 99, 99},
611                 { "Your home",                          0,      100, 100,  0, 99, 99},
612                 { "Your home",                          0,      100, 100,  0, 99, 99},
613                 { "Your home",                          0,      100, 100,  0, 99, 99},
614                 { "Your home",                          0,      100, 100,  0, 99, 99},
615                 { "Your home",                          0,      100, 100,  0, 99, 99},
616                 { "Your home",                          0,      100, 100,  0, 99, 99},
617                 { "Your home",                          0,      100, 100,  0, 99, 99},
618                 { "Your home",                          0,      100, 100,  0, 99, 99},
619                 { "Your home",                          0,      100, 100,  0, 99, 99},
620                 { "Your home",                          0,      100, 100,  0, 99, 99},
621                 { "Your home",                          0,      100, 100,  0, 99, 99},
622                 { "Your home",                          0,      100, 100,  0, 99, 99},
623                 { "Your home",                          0,      100, 100,  0, 99, 99},
624                 { "Your home",                          0,      100, 100,  0, 99, 99},
625                 { "Your home",                          0,      100, 100,  0, 99, 99},
626                 { "Your home",                          0,      100, 100,  0, 99, 99},
627                 { "Your home",                          0,      100, 100,  0, 99, 99},
628                 { "Your home",                          0,      100, 100,  0, 99, 99},
629                 { "Your home",                          0,      100, 100,  0, 99, 99},
630                 { "Your home",                          0,      100, 100,  0, 99, 99},
631                 { "Your home",                          0,      100, 100,  0, 99, 99},
632                 { "Your home",                          0,      100, 100,  0, 99, 99},
633                 { "Your home",                          0,      100, 100,  0, 99, 99},
634                 { "Your home",                          0,      100, 100,  0, 99, 99},
635                 { "Your home",                          0,      100, 100,  0, 99, 99},
636                 { "Your home",                          0,      100, 100,  0, 99, 99},
637                 { "Your home",                          0,      100, 100,  0, 99, 99},
638                 { "Your home",                          0,      100, 100,  0, 99, 99},
639                 { "Your home",                          0,      100, 100,  0, 99, 99},
640 #endif
641
642         },
643
644         {
645                 /* Bookstore - 21 unique names */
646 #ifdef JP
647                 { "強欲ドラフ", 10000, 175, 108, 4, 12, RACE_HUMAN},
648                 { "賢者オドナー", 15000, 120, 105, 6, 16, RACE_HIGH_ELF},
649                 { "中立のガンダー", 25000, 120, 110, 7, 19, RACE_DARK_ELF},
650                 { "忍耐の人ロ=シャ", 30000, 140, 105, 6, 12, RACE_ELF},
651                 { "ランドルフ・カーター", 15000, 175, 108, 4, 12, RACE_HUMAN},
652                 { "隼のサライ", 15000, 175, 108, 4, 12, RACE_HUMAN},
653                 { "千里眼ボドリル", 20000, 120, 105, 6, 16, RACE_HIGH_ELF},
654                 { "沈黙のヴェオロイン", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
655                 { "学者のヴァンシラス", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER},
656                 { "物書きオセイン", 15000, 175, 108, 4, 12, RACE_SKELETON},
657                 { "本の虫オルヴァー", 20000, 120, 105, 6, 16, RACE_VAMPIRE},
658                 { "浅井墓男", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
659                 { "デスマスク", 30000, 140, 105, 6, 12, RACE_ZOMBIE},
660                 { "学者のアスーヌ", 15000, 175, 108, 4, 12, RACE_MIND_FLAYER},
661                 { "死人のプリランド", 20000, 120, 105, 6, 16, RACE_ZOMBIE},
662                 { "鉄のロナール", 25000, 120, 110, 7, 19, RACE_GOLEM},
663 #else
664                 { "Dolaf the Greedy", 10000, 175, 108, 4, 12, RACE_HUMAN},
665                 { "Odnar the Sage", 15000, 120, 105, 6, 16, RACE_HIGH_ELF},
666                 { "Gandar the Neutral", 25000, 120, 110, 7, 19, RACE_DARK_ELF},
667                 { "Ro-sha the Patient", 30000, 140, 105, 6, 12, RACE_ELF},
668                 { "Randolph Carter", 15000, 175, 108, 4, 12, RACE_HUMAN},
669                 { "Sarai the Swift", 15000, 175, 108, 4, 12, RACE_HUMAN},
670                 { "Bodril the Seer", 20000, 120, 105, 6, 16, RACE_HIGH_ELF},
671                 { "Veloin the Quiet", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
672                 { "Vanthylas the Learned", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER},
673                 { "Ossein the Literate", 15000, 175, 108, 4, 12, RACE_SKELETON},
674                 { "Olvar Bookworm", 20000, 120, 105, 6, 16, RACE_VAMPIRE},
675                 { "Shallowgrave", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
676                 { "Death Mask", 30000, 140, 105, 6, 12, RACE_ZOMBIE},
677                 { "Asuunu the Learned", 15000, 175, 108, 4, 12, RACE_MIND_FLAYER},
678                 { "Prirand the Dead", 20000, 120, 105, 6, 16, RACE_ZOMBIE},
679                 { "Ronar the Iron", 25000, 120, 110, 7, 19, RACE_GOLEM},
680 #endif
681 #ifdef JP
682                 { "ガリル=ガミル", 30000, 140, 105, 6, 12, RACE_ELF},
683                 { "本食いローバグ", 15000, 175, 108, 4, 12, RACE_KOBOLD},
684                 { "キリアリキーク", 20000, 120, 105, 6, 16, RACE_KLACKON},
685                 { "静かなるリリン", 25000, 120, 110, 7, 19, RACE_DWARF},
686                 { "王者イサング", 30000, 140, 105, 6, 12, RACE_HIGH_ELF},
687                 { "強欲ドラフ", 10000, 175, 108, 4, 12, RACE_HUMAN},
688                 { "賢者オドナー", 15000, 120, 105, 6, 16, RACE_HIGH_ELF},
689                 { "中立のガンダー", 25000, 120, 110, 7, 19, RACE_DARK_ELF},
690                 { "忍耐の人ロ=シャ", 30000, 140, 105, 6, 12, RACE_ELF},
691                 { "ランドルフ・カーター", 15000, 175, 108, 4, 12, RACE_HUMAN},
692                 { "隼サライ", 15000, 175, 108, 4, 12, RACE_HUMAN},
693                 { "千里眼ボドリル", 20000, 120, 105, 6, 16, RACE_HIGH_ELF},
694                 { "沈黙のヴェオロイン", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
695                 { "学者のヴァンシラス", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER},
696                 { "物書きオセイン", 15000, 175, 108, 4, 12, RACE_SKELETON},
697                 { "本の虫オルヴァー", 20000, 120, 105, 6, 16, RACE_VAMPIRE},
698 #else
699                 { "Galil-Gamir", 30000, 140, 105, 6, 12, RACE_ELF},
700                 { "Rorbag Book-Eater", 15000, 175, 108, 4, 12, RACE_KOBOLD},
701                 { "Kiriarikirk", 20000, 120, 105, 6, 16, RACE_KLACKON},
702                 { "Rilin the Quiet", 25000, 120, 110, 7, 19, RACE_DWARF},
703                 { "Isung the Lord", 30000, 140, 105, 6, 12, RACE_HIGH_ELF},
704                 { "Dolaf the Greedy", 10000, 175, 108, 4, 12, RACE_HUMAN},
705                 { "Odnar the Sage", 15000, 120, 105, 6, 16, RACE_HIGH_ELF},
706                 { "Gandar the Neutral", 25000, 120, 110, 7, 19, RACE_DARK_ELF},
707                 { "Ro-sha the Patient", 30000, 140, 105, 6, 12, RACE_ELF},
708                 { "Randolph Carter", 15000, 175, 108, 4, 12, RACE_HUMAN},
709                 { "Sarai the Swift", 15000, 175, 108, 4, 12, RACE_HUMAN},
710                 { "Bodril the Seer", 20000, 120, 105, 6, 16, RACE_HIGH_ELF},
711                 { "Veloin the Quiet", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
712                 { "Vanthylas the Learned", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER},
713                 { "Ossein the Literate", 15000, 175, 108, 4, 12, RACE_SKELETON},
714                 { "Olvar Bookworm", 20000, 120, 105, 6, 16, RACE_VAMPIRE},
715 #endif
716         },
717
718         {
719                 /* Museum */
720 #ifdef JP
721                 { "博物館",                          0,      100, 100,  0, 99, 99},
722                 { "博物館",                          0,      100, 100,  0, 99, 99},
723                 { "博物館",                          0,      100, 100,  0, 99, 99},
724                 { "博物館",                          0,      100, 100,  0, 99, 99},
725                 { "博物館",                          0,      100, 100,  0, 99, 99},
726                 { "博物館",                          0,      100, 100,  0, 99, 99},
727                 { "博物館",                          0,      100, 100,  0, 99, 99},
728                 { "博物館",                          0,      100, 100,  0, 99, 99},
729                 { "博物館",                          0,      100, 100,  0, 99, 99},
730                 { "博物館",                          0,      100, 100,  0, 99, 99},
731                 { "博物館",                          0,      100, 100,  0, 99, 99},
732                 { "博物館",                          0,      100, 100,  0, 99, 99},
733                 { "博物館",                          0,      100, 100,  0, 99, 99},
734                 { "博物館",                          0,      100, 100,  0, 99, 99},
735                 { "博物館",                          0,      100, 100,  0, 99, 99},
736                 { "博物館",                          0,      100, 100,  0, 99, 99},
737                 { "博物館",                          0,      100, 100,  0, 99, 99},
738                 { "博物館",                          0,      100, 100,  0, 99, 99},
739                 { "博物館",                          0,      100, 100,  0, 99, 99},
740                 { "博物館",                          0,      100, 100,  0, 99, 99},
741                 { "博物館",                          0,      100, 100,  0, 99, 99},
742                 { "博物館",                          0,      100, 100,  0, 99, 99},
743                 { "博物館",                          0,      100, 100,  0, 99, 99},
744                 { "博物館",                          0,      100, 100,  0, 99, 99},
745                 { "博物館",                          0,      100, 100,  0, 99, 99},
746                 { "博物館",                          0,      100, 100,  0, 99, 99},
747                 { "博物館",                          0,      100, 100,  0, 99, 99},
748                 { "博物館",                          0,      100, 100,  0, 99, 99},
749                 { "博物館",                          0,      100, 100,  0, 99, 99},
750                 { "博物館",                          0,      100, 100,  0, 99, 99},
751                 { "博物館",                          0,      100, 100,  0, 99, 99},
752                 { "博物館",                          0,      100, 100,  0, 99, 99},
753 #else
754                 { "Museum",                          0,      100, 100,  0, 99, 99},
755                 { "Museum",                          0,      100, 100,  0, 99, 99},
756                 { "Museum",                          0,      100, 100,  0, 99, 99},
757                 { "Museum",                          0,      100, 100,  0, 99, 99},
758                 { "Museum",                          0,      100, 100,  0, 99, 99},
759                 { "Museum",                          0,      100, 100,  0, 99, 99},
760                 { "Museum",                          0,      100, 100,  0, 99, 99},
761                 { "Museum",                          0,      100, 100,  0, 99, 99},
762                 { "Museum",                          0,      100, 100,  0, 99, 99},
763                 { "Museum",                          0,      100, 100,  0, 99, 99},
764                 { "Museum",                          0,      100, 100,  0, 99, 99},
765                 { "Museum",                          0,      100, 100,  0, 99, 99},
766                 { "Museum",                          0,      100, 100,  0, 99, 99},
767                 { "Museum",                          0,      100, 100,  0, 99, 99},
768                 { "Museum",                          0,      100, 100,  0, 99, 99},
769                 { "Museum",                          0,      100, 100,  0, 99, 99},
770                 { "Museum",                          0,      100, 100,  0, 99, 99},
771                 { "Museum",                          0,      100, 100,  0, 99, 99},
772                 { "Museum",                          0,      100, 100,  0, 99, 99},
773                 { "Museum",                          0,      100, 100,  0, 99, 99},
774                 { "Museum",                          0,      100, 100,  0, 99, 99},
775                 { "Museum",                          0,      100, 100,  0, 99, 99},
776                 { "Museum",                          0,      100, 100,  0, 99, 99},
777                 { "Museum",                          0,      100, 100,  0, 99, 99},
778                 { "Museum",                          0,      100, 100,  0, 99, 99},
779                 { "Museum",                          0,      100, 100,  0, 99, 99},
780                 { "Museum",                          0,      100, 100,  0, 99, 99},
781                 { "Museum",                          0,      100, 100,  0, 99, 99},
782                 { "Museum",                          0,      100, 100,  0, 99, 99},
783                 { "Museum",                          0,      100, 100,  0, 99, 99},
784                 { "Museum",                          0,      100, 100,  0, 99, 99},
785                 { "Museum",                          0,      100, 100,  0, 99, 99},
786 #endif
787
788         },
789
790 };
791
792 static int cur_store_num = 0;
793 static int store_top = 0;
794 static int store_bottom = 0;
795 static int xtra_stock = 0;
796 static store_type *st_ptr = NULL;
797 static const owner_type *ot_ptr = NULL;
798 static s16b old_town_num = 0;
799 static s16b inner_town_num = 0;
800 #define RUMOR_CHANCE 8
801
802 #define MAX_COMMENT_1   6
803
804 static concptr comment_1[MAX_COMMENT_1] =
805 {
806 #ifdef JP
807         "オーケーだ。",
808         "結構だ。",
809         "そうしよう!",
810         "賛成だ!",
811         "よし!",
812         "わかった!"
813 #else
814         "Okay.",
815         "Fine.",
816         "Accepted!",
817         "Agreed!",
818         "Done!",
819         "Taken!"
820 #endif
821
822 };
823
824 #ifdef JP
825 /*! ブラックマーケット追加メッセージ(承諾) */
826 static concptr comment_1_B[MAX_COMMENT_1] = {
827         "まあ、それでいいや。",
828         "今日はそれで勘弁してやる。",
829         "分かったよ。",
830         "しょうがない。",
831         "それで我慢するよ。",
832         "こんなもんだろう。"
833 };
834 #endif
835 #define MAX_COMMENT_2A  2
836
837 static concptr comment_2a[MAX_COMMENT_2A] =
838 {
839 #ifdef JP
840         "私の忍耐力を試しているのかい? $%s が最後だ。",
841         "我慢にも限度があるぞ。 $%s が最後だ。"
842 #else
843         "You try my patience.  %s is final.",
844         "My patience grows thin.  %s is final."
845 #endif
846
847 };
848
849 #define MAX_COMMENT_2B  12
850
851 static concptr comment_2b[MAX_COMMENT_2B] =
852 {
853 #ifdef JP
854         " $%s ぐらいは出さなきゃダメだよ。",
855         " $%s なら受け取ってもいいが。",
856         "ハ! $%s 以下はないね。",
857         "何て奴だ! $%s 以下はあり得ないぞ。",
858         "それじゃ少なすぎる! $%s は欲しいところだ。",
859         "バカにしている! $%s はもらわないと。",
860         "嘘だろう! $%s でどうだい?",
861         "おいおい! $%s を考えてくれないか?",
862         "1000匹のオークのノミに苦しめられるがいい! $%s だ。",
863         "お前の大切なものに災いあれ! $%s でどうだ。",
864         "モルゴスに賞味されるがいい!本当は $%s なんだろう?",
865         "お前の母親はオーガか! $%s は出すつもりなんだろ?"
866 #else
867         "I can take no less than %s gold pieces.",
868         "I will accept no less than %s gold pieces.",
869         "Ha!  No less than %s gold pieces.",
870         "You knave!  No less than %s gold pieces.",
871         "That's a pittance!  I want %s gold pieces.",
872         "That's an insult!  I want %s gold pieces.",
873         "As if!  How about %s gold pieces?",
874         "My arse!  How about %s gold pieces?",
875         "May the fleas of 1000 orcs molest you!  Try %s gold pieces.",
876         "May your most favourite parts go moldy!  Try %s gold pieces.",
877         "May Morgoth find you tasty!  Perhaps %s gold pieces?",
878         "Your mother was an Ogre!  Perhaps %s gold pieces?"
879 #endif
880
881 };
882
883 #ifdef JP
884 /*! ブラックマーケット用追加メッセージ(売るとき) */
885 static concptr comment_2b_B[MAX_COMMENT_2B] = {
886         "いくら俺様がお人好しとはいえ $%s が限界だね。嫌なら帰りな。",
887         "金がないのかい、あんた?まずは家に帰って $%s 揃えてきな。",
888         "物の価値が分からん奴だな。これは $%s が普通なんだよ。",
889         "俺の付けた値段に文句があるのか? $%s が限界だ。",
890         "ひょっとして新手の冗談かい? $%s 持ってないなら帰りな。",
891         "うちは他の店とは違うんだよ。$%s ぐらいは出しな。",
892         "買う気がないなら帰りな。 $%s だと言っているんだ。",
893         "話にならないね。 $%s くらい持っているんだろ?",
894         "は?なんだそりゃ? $%s の間違いか、ひょっとして?",
895         "出口はあっちだよ。それとも $%s 出せるのかい、あんたに。",
896         "命知らずな奴だな。 $%s 出せば今日の所は勘弁してやるよ。",
897         "うちの店は貧乏人お断りだ。 $%s ぐらい出せないのかい?"
898 };
899 #endif
900 #define MAX_COMMENT_3A  2
901
902 static concptr comment_3a[MAX_COMMENT_3A] =
903 {
904 #ifdef JP
905         "私の忍耐力を試しているのかい? $%s が最後だ。",
906         "我慢にも限度があるぞ。 $%s が最後だ。"
907 #else
908         "You try my patience.  %s is final.",
909         "My patience grows thin.  %s is final."
910 #endif
911
912 };
913
914 #define MAX_COMMENT_3B  12
915
916 static concptr comment_3b[MAX_COMMENT_3B] =
917 {
918 #ifdef JP
919         "本音を言うと $%s でいいんだろ?",
920         " $%s でどうだい?",
921         " $%s ぐらいなら出してもいいが。",
922         " $%s 以上払うなんて考えられないね。",
923         "まあ落ちついて。 $%s でどうだい?",
924         "そのガラクタなら $%s で引き取るよ。",
925         "それじゃ高すぎる! $%s がいいとこだろ。",
926         "どうせいらないんだろ! $%s でいいだろ?",
927         "だめだめ! $%s がずっとお似合いだよ。",
928         "バカにしている! $%s がせいぜいだ。",
929         " $%s なら嬉しいところだがなあ。",
930         " $%s 、それ以上はビタ一文出さないよ!"
931 #else
932         "Perhaps %s gold pieces?",
933         "How about %s gold pieces?",
934         "I will pay no more than %s gold pieces.",
935         "I can afford no more than %s gold pieces.",
936         "Be reasonable.  How about %s gold pieces?",
937         "I'll buy it as scrap for %s gold pieces.",
938         "That is too much!  How about %s gold pieces?",
939         "That looks war surplus!  Say %s gold pieces?",
940         "Never!  %s is more like it.",
941         "That's an insult!  %s is more like it.",
942         "%s gold pieces and be thankful for it!",
943         "%s gold pieces and not a copper more!"
944 #endif
945
946 };
947
948 #ifdef JP
949 /*! ブラックマーケット用追加メッセージ(買い取り) */
950 static concptr comment_3b_B[MAX_COMMENT_3B] = {
951         " $%s ってところだね。そのどうしようもないガラクタは。",
952         "この俺が $%s って言っているんだから、その通りにした方が身のためだぞ。",
953         "俺の優しさに甘えるのもいい加減にしておけ。 $%s だ。",
954         "その品なら $%s で売ってくれているがね、常識ある紳士はみんな。",
955         "こりゃまた、がめつい奴だな。いくら俺が温厚とはいえ $%s が限界だ。",
956         " $%s だ。別に俺はそんなガラクタ欲しくはないんだから。",
957         "俺の鑑定額が気に入らないのか? $%s 、嫌なら帰りな。",
958         " $%s で引き取ってやるよ。喜んで受け取りな、貧乏人。",
959         "物の価値が分からん奴は始末におえんな。それは $%s なんだよ。",
960         "そんなに金が欲しいのか、あんた? $%s で満足できんのか?",
961         "入る店間違えてんじゃないのか? $%s で嫌なら他をあたってくれ。",
962         "俺の言い値にケチをつける奴がいるとは! その度胸に免じて $%s だ。"
963 };
964 #endif
965 #define MAX_COMMENT_4A  4
966
967 static concptr comment_4a[MAX_COMMENT_4A] =
968 {
969 #ifdef JP
970         "もうたくさんだ!何度も私をわずらわせないでくれ!",
971         "うがー!一日の我慢の限度を超えている!",
972         "もういい!時間の無駄以外のなにものでもない!",
973         "もうやってられないよ!顔も見たくない!"
974 #else
975         "Enough!  You have abused me once too often!",
976         "Arghhh!  I have had enough abuse for one day!",
977         "That does it!  You shall waste my time no more!",
978         "This is getting nowhere!  I'm going to Londis!"
979 #endif
980
981 };
982
983 #ifdef JP
984 /*! ブラックマーケット用追加メッセージ(怒りの頂点) */
985 static concptr comment_4a_B[MAX_COMMENT_4A] = {
986         "なめやがって!温厚な俺様でも限界があるってことを知れ!",
987         "俺をここまで怒らせて...命があるだけでもありがたいと思え!",
988         "ふざけてるのか!冷やかしなら相手を見てからにしろ!",
989         "いいかげんにしろ!今度こんなまねしたらただじゃおかねえぞ!"
990 };
991 #endif
992 #define MAX_COMMENT_4B  4
993
994 static concptr comment_4b[MAX_COMMENT_4B] =
995 {
996 #ifdef JP
997         "店から出て行け!",
998         "俺の前から消え失せろ!",
999         "どっかに行っちまえ!",
1000         "出ろ、出ろ、出て行け!"
1001 #else
1002         "Leave my store!",
1003         "Get out of my sight!",
1004         "Begone, you scoundrel!",
1005         "Out, out, out!"
1006 #endif
1007
1008 };
1009
1010 #ifdef JP
1011 /*! ブラックマーケット用追加メッセージ(追い出し) */
1012 static concptr comment_4b_B[MAX_COMMENT_4B] = {
1013         "二度とうちに来るんじゃねえ!!",
1014         "とっとと、どっかへ失せろ!!",
1015         "今すぐ消え失せろ!!",
1016         "出ていけ!出ていけ!!"
1017 };
1018 #endif
1019 #define MAX_COMMENT_5   8
1020
1021 static concptr comment_5[MAX_COMMENT_5] =
1022 {
1023 #ifdef JP
1024         "考え直してくれ。",
1025         "そりゃおかしい!",
1026         "もっと真面目に言ってくれ!",
1027         "交渉する気があるのかい?",
1028         "冷やかしに来たのか!",
1029         "悪い冗談だ!",
1030         "我慢くらべかい。",
1031         "ふーむ、良い天気だ。"
1032 #else
1033         "Try again.",
1034         "Ridiculous!",
1035         "You will have to do better than that!",
1036         "Do you wish to do business or not?",
1037         "You've got to be kidding!",
1038         "You'd better be kidding!",
1039         "You try my patience.",
1040         "Hmmm, nice weather we're having."
1041 #endif
1042
1043 };
1044
1045 #ifdef JP
1046 /*! ブラックマーケット用追加メッセージ(怒り) */
1047 static concptr comment_5_B[MAX_COMMENT_5] = {
1048         "時間の無駄だな、これは。",
1049         "厄介なお客様だな!",
1050         "話して分かる相手じゃなさそうだ。",
1051         "痛い目にあいたいらしいな!",
1052         "なんて強欲な奴だ!",
1053         "話にならん輩だ!",
1054         "どうしようもない貧乏人だ!",
1055         "喧嘩を売っているのか?"
1056 };
1057 #endif
1058 #define MAX_COMMENT_6   4
1059
1060 static concptr comment_6[MAX_COMMENT_6] =
1061 {
1062 #ifdef JP
1063         "どうやら聞き間違えたらしい。",
1064         "失礼、よく聞こえなかったよ。",
1065         "すまない、何だって?",
1066         "悪い、もう一度言ってくれる?"
1067 #else
1068         "I must have heard you wrong.",
1069         "I'm sorry, I missed that.",
1070         "I'm sorry, what was that?",
1071         "Sorry, what was that again?"
1072 #endif
1073
1074 };
1075
1076 /*** Initialize others ***/
1077
1078 /*!
1079  * 店舗で販売するオブジェクトを定義する / Hack -- Objects sold in the stores -- by tval/sval pair.
1080  */
1081 byte store_table[MAX_STORES][STORE_CHOICES][2] =
1082 {
1083         {
1084                 /* General Store */
1085
1086                 { TV_FOOD, SV_FOOD_RATION },
1087                 { TV_FOOD, SV_FOOD_RATION },
1088                 { TV_FOOD, SV_FOOD_RATION },
1089                 { TV_FOOD, SV_FOOD_RATION },
1090
1091                 { TV_FOOD, SV_FOOD_RATION },
1092                 { TV_FOOD, SV_FOOD_BISCUIT },
1093                 { TV_FOOD, SV_FOOD_JERKY },
1094                 { TV_FOOD, SV_FOOD_JERKY },
1095
1096                 { TV_FOOD, SV_FOOD_PINT_OF_WINE },
1097                 { TV_FOOD, SV_FOOD_PINT_OF_ALE },
1098                 { TV_LITE, SV_LITE_TORCH },
1099                 { TV_LITE, SV_LITE_TORCH },
1100
1101                 { TV_LITE, SV_LITE_TORCH },
1102                 { TV_LITE, SV_LITE_TORCH },
1103                 { TV_LITE, SV_LITE_LANTERN },
1104                 { TV_LITE, SV_LITE_LANTERN },
1105
1106                 { TV_FLASK, 0 },
1107                 { TV_FLASK, 0 },
1108                 { TV_FLASK, 0 },
1109                 { TV_FLASK, 0 },
1110
1111                 { TV_FLASK, 0 },
1112                 { TV_FLASK, 0 },
1113                 { TV_SPIKE, 0 },
1114                 { TV_SPIKE, 0 },
1115
1116                 { TV_SHOT, SV_AMMO_NORMAL },
1117                 { TV_ARROW, SV_AMMO_NORMAL },
1118                 { TV_BOLT, SV_AMMO_NORMAL },
1119                 { TV_DIGGING, SV_SHOVEL },
1120
1121                 { TV_DIGGING, SV_PICK },
1122                 { TV_CLOAK, SV_CLOAK },
1123                 { TV_CLOAK, SV_CLOAK },
1124                 { TV_CLOAK, SV_FUR_CLOAK },
1125
1126                 { TV_FOOD, SV_FOOD_RATION },
1127                 { TV_FOOD, SV_FOOD_RATION },
1128                 { TV_FOOD, SV_FOOD_RATION },
1129                 { TV_FOOD, SV_FOOD_RATION },
1130
1131                 { TV_POTION, SV_POTION_WATER },
1132                 { TV_POTION, SV_POTION_WATER },
1133                 { TV_LITE, SV_LITE_LANTERN },
1134                 { TV_LITE, SV_LITE_LANTERN },
1135
1136                 { TV_FOOD, SV_FOOD_WAYBREAD },
1137                 { TV_FOOD, SV_FOOD_WAYBREAD },
1138                 { TV_CAPTURE, 0 },
1139                 { TV_FIGURINE, 0 },
1140
1141                 { TV_SHOT, SV_AMMO_NORMAL },
1142                 { TV_ARROW, SV_AMMO_NORMAL },
1143                 { TV_BOLT, SV_AMMO_NORMAL },
1144                 { TV_DIGGING, SV_SHOVEL }
1145         },
1146
1147         {
1148                 /* Armoury */
1149
1150                 { TV_BOOTS, SV_PAIR_OF_SOFT_LEATHER_BOOTS },
1151                 { TV_BOOTS, SV_PAIR_OF_SOFT_LEATHER_BOOTS },
1152                 { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS },
1153                 { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS },
1154
1155                 { TV_HELM, SV_HARD_LEATHER_CAP },
1156                 { TV_HELM, SV_HARD_LEATHER_CAP },
1157                 { TV_HELM, SV_METAL_CAP },
1158                 { TV_HELM, SV_IRON_HELM },
1159
1160                 { TV_SOFT_ARMOR, SV_ROBE },
1161                 { TV_SOFT_ARMOR, SV_ROBE },
1162                 { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
1163                 { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
1164
1165                 { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR },
1166                 { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR },
1167                 { TV_SOFT_ARMOR, SV_HARD_STUDDED_LEATHER },
1168                 { TV_SOFT_ARMOR, SV_HARD_STUDDED_LEATHER },
1169
1170                 { TV_SOFT_ARMOR, SV_RHINO_HIDE_ARMOR },
1171                 { TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL },
1172                 { TV_HARD_ARMOR, SV_METAL_SCALE_MAIL },
1173                 { TV_HARD_ARMOR, SV_CHAIN_MAIL },
1174
1175                 { TV_HARD_ARMOR, SV_DOUBLE_RING_MAIL },
1176                 { TV_HARD_ARMOR, SV_AUGMENTED_CHAIN_MAIL },
1177                 { TV_HARD_ARMOR, SV_BAR_CHAIN_MAIL },
1178                 { TV_HARD_ARMOR, SV_DOUBLE_CHAIN_MAIL },
1179
1180                 { TV_HARD_ARMOR, SV_METAL_BRIGANDINE_ARMOUR },
1181                 { TV_HARD_ARMOR, SV_SPLINT_MAIL },
1182                 { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES },
1183                 { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES },
1184
1185                 { TV_GLOVES, SV_SET_OF_GAUNTLETS },
1186                 { TV_SHIELD, SV_SMALL_LEATHER_SHIELD },
1187                 { TV_SHIELD, SV_LARGE_LEATHER_SHIELD },
1188                 { TV_SHIELD, SV_SMALL_METAL_SHIELD },
1189
1190                 { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS },
1191                 { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS },
1192                 { TV_HELM, SV_HARD_LEATHER_CAP },
1193                 { TV_HELM, SV_HARD_LEATHER_CAP },
1194
1195                 { TV_SOFT_ARMOR, SV_ROBE },
1196                 { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
1197                 { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
1198                 { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR },
1199
1200                 { TV_SOFT_ARMOR, SV_LEATHER_JACK },
1201                 { TV_HARD_ARMOR, SV_METAL_SCALE_MAIL },
1202                 { TV_HARD_ARMOR, SV_CHAIN_MAIL },
1203                 { TV_HARD_ARMOR, SV_CHAIN_MAIL },
1204
1205                 { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES },
1206                 { TV_GLOVES, SV_SET_OF_GAUNTLETS },
1207                 { TV_SHIELD, SV_SMALL_LEATHER_SHIELD },
1208                 { TV_SHIELD, SV_SMALL_LEATHER_SHIELD }
1209         },
1210
1211         {
1212                 /* Weaponsmith */
1213
1214                 { TV_SWORD, SV_DAGGER },
1215                 { TV_SWORD, SV_MAIN_GAUCHE },
1216                 { TV_SWORD, SV_RAPIER },
1217                 { TV_SWORD, SV_SMALL_SWORD },
1218
1219                 { TV_SWORD, SV_SHORT_SWORD },
1220                 { TV_SWORD, SV_SABRE },
1221                 { TV_SWORD, SV_CUTLASS },
1222                 { TV_SWORD, SV_TULWAR },
1223
1224                 { TV_SWORD, SV_BROAD_SWORD },
1225                 { TV_SWORD, SV_LONG_SWORD },
1226                 { TV_SWORD, SV_SCIMITAR },
1227                 { TV_SWORD, SV_KATANA },
1228
1229                 { TV_SWORD, SV_BASTARD_SWORD },
1230                 { TV_POLEARM, SV_SPEAR },
1231                 { TV_POLEARM, SV_AWL_PIKE },
1232                 { TV_POLEARM, SV_TRIDENT },
1233
1234                 { TV_POLEARM, SV_PIKE },
1235                 { TV_POLEARM, SV_BEAKED_AXE },
1236                 { TV_POLEARM, SV_BROAD_AXE },
1237                 { TV_POLEARM, SV_LANCE },
1238
1239                 { TV_POLEARM, SV_BATTLE_AXE },
1240                 { TV_POLEARM, SV_HATCHET },
1241                 { TV_BOW, SV_SLING },
1242                 { TV_BOW, SV_SHORT_BOW },
1243
1244                 { TV_BOW, SV_LIGHT_XBOW },
1245                 { TV_SHOT, SV_AMMO_NORMAL },
1246                 { TV_SHOT, SV_AMMO_NORMAL },
1247                 { TV_ARROW, SV_AMMO_NORMAL },
1248
1249                 { TV_ARROW, SV_AMMO_NORMAL },
1250                 { TV_BOLT, SV_AMMO_NORMAL },
1251                 { TV_BOLT, SV_AMMO_NORMAL },
1252                 { TV_BOW, SV_LIGHT_XBOW },
1253
1254                 { TV_ARROW, SV_AMMO_NORMAL },
1255                 { TV_BOLT, SV_AMMO_NORMAL },
1256                 { TV_BOW, SV_SHORT_BOW },
1257                 { TV_BOW, SV_LIGHT_XBOW },
1258
1259                 { TV_SWORD, SV_DAGGER },
1260                 { TV_SWORD, SV_TANTO },
1261                 { TV_SWORD, SV_RAPIER },
1262                 { TV_SWORD, SV_SMALL_SWORD },
1263
1264                 { TV_SWORD, SV_SHORT_SWORD },
1265                 { TV_SWORD, SV_LONG_SWORD },
1266                 { TV_SWORD, SV_SCIMITAR },
1267                 { TV_SWORD, SV_BROAD_SWORD },
1268
1269                 { TV_HISSATSU_BOOK, 0 },
1270                 { TV_HISSATSU_BOOK, 0 },
1271                 { TV_HISSATSU_BOOK, 1 },
1272                 { TV_HISSATSU_BOOK, 1 },
1273         },
1274
1275         {
1276                 /* Temple */
1277
1278                 { TV_HAFTED, SV_NUNCHAKU },
1279                 { TV_HAFTED, SV_QUARTERSTAFF },
1280                 { TV_HAFTED, SV_MACE },
1281                 { TV_HAFTED, SV_BO_STAFF },
1282
1283                 { TV_HAFTED, SV_WAR_HAMMER },
1284                 { TV_HAFTED, SV_WAR_HAMMER },
1285                 { TV_HAFTED, SV_MORNING_STAR },
1286                 { TV_HAFTED, SV_FLAIL },
1287
1288                 { TV_HAFTED, SV_LEAD_FILLED_MACE },
1289                 { TV_SCROLL, SV_SCROLL_REMOVE_CURSE },
1290                 { TV_SCROLL, SV_SCROLL_BLESSING },
1291                 { TV_SCROLL, SV_SCROLL_HOLY_CHANT },
1292
1293                 { TV_POTION, SV_POTION_HEROISM },
1294                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1295                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1296                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1297
1298                 { TV_POTION, SV_POTION_CURE_LIGHT },
1299                 { TV_POTION, SV_POTION_CURE_SERIOUS },
1300                 { TV_POTION, SV_POTION_CURE_SERIOUS },
1301                 { TV_POTION, SV_POTION_CURE_CRITICAL },
1302
1303                 { TV_POTION, SV_POTION_CURE_CRITICAL },
1304                 { TV_POTION, SV_POTION_RESTORE_EXP },
1305                 { TV_POTION, SV_POTION_RESTORE_EXP },
1306                 { TV_POTION, SV_POTION_RESTORE_EXP },
1307
1308                 { TV_LIFE_BOOK, 0 },
1309                 { TV_LIFE_BOOK, 0 },
1310                 { TV_LIFE_BOOK, 1 },
1311                 { TV_LIFE_BOOK, 1 },
1312
1313                 { TV_CRUSADE_BOOK, 0 },
1314                 { TV_CRUSADE_BOOK, 0 },
1315                 { TV_CRUSADE_BOOK, 1 },
1316                 { TV_CRUSADE_BOOK, 1 },
1317
1318                 { TV_HAFTED, SV_WHIP },
1319                 { TV_HAFTED, SV_MACE },
1320                 { TV_HAFTED, SV_BALL_AND_CHAIN },
1321                 { TV_HAFTED, SV_WAR_HAMMER },
1322
1323                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1324                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1325                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1326                 { TV_POTION, SV_POTION_CURE_CRITICAL },
1327
1328                 { TV_POTION, SV_POTION_CURE_CRITICAL },
1329                 { TV_POTION, SV_POTION_RESTORE_EXP },
1330
1331                 { TV_FIGURINE, 0 },
1332                 { TV_STATUE, SV_ANY },
1333
1334                 { TV_SCROLL, SV_SCROLL_REMOVE_CURSE },
1335                 { TV_SCROLL, SV_SCROLL_REMOVE_CURSE },
1336                 { TV_SCROLL, SV_SCROLL_STAR_REMOVE_CURSE },
1337                 { TV_SCROLL, SV_SCROLL_STAR_REMOVE_CURSE }
1338         },
1339
1340         {
1341                 /* Alchemy shop */
1342
1343                 { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_HIT },
1344                 { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_DAM },
1345                 { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR },
1346                 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1347
1348                 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1349                 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1350                 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1351                 { TV_SCROLL, SV_SCROLL_LIGHT },
1352
1353                 { TV_SCROLL, SV_SCROLL_PHASE_DOOR },
1354                 { TV_SCROLL, SV_SCROLL_PHASE_DOOR },
1355                 { TV_SCROLL, SV_SCROLL_TELEPORT },
1356                 { TV_SCROLL, SV_SCROLL_MONSTER_CONFUSION },
1357
1358                 { TV_SCROLL, SV_SCROLL_MAPPING },
1359                 { TV_SCROLL, SV_SCROLL_DETECT_GOLD },
1360                 { TV_SCROLL, SV_SCROLL_DETECT_ITEM },
1361                 { TV_SCROLL, SV_SCROLL_DETECT_TRAP },
1362
1363                 { TV_SCROLL, SV_SCROLL_DETECT_INVIS },
1364                 { TV_SCROLL, SV_SCROLL_RECHARGING },
1365                 { TV_SCROLL, SV_SCROLL_TELEPORT },
1366                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1367
1368                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1369                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1370                 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1371                 { TV_SCROLL, SV_SCROLL_TELEPORT },
1372
1373                 { TV_SCROLL, SV_SCROLL_TELEPORT },
1374                 { TV_POTION, SV_POTION_RES_STR },
1375                 { TV_POTION, SV_POTION_RES_INT },
1376                 { TV_POTION, SV_POTION_RES_WIS },
1377
1378                 { TV_POTION, SV_POTION_RES_DEX },
1379                 { TV_POTION, SV_POTION_RES_CON },
1380                 { TV_POTION, SV_POTION_RES_CHR },
1381                 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1382
1383                 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1384                 { TV_SCROLL, SV_SCROLL_STAR_IDENTIFY },  /* Yep, occasionally! */
1385                 { TV_SCROLL, SV_SCROLL_STAR_IDENTIFY },
1386                 { TV_SCROLL, SV_SCROLL_LIGHT },
1387
1388                 { TV_POTION, SV_POTION_RES_STR },
1389                 { TV_POTION, SV_POTION_RES_INT },
1390                 { TV_POTION, SV_POTION_RES_WIS },
1391                 { TV_POTION, SV_POTION_RES_DEX },
1392
1393                 { TV_POTION, SV_POTION_RES_CON },
1394                 { TV_POTION, SV_POTION_RES_CHR },
1395                 { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR },
1396                 { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR },
1397
1398                 { TV_SCROLL, SV_SCROLL_RECHARGING },
1399                 { TV_SCROLL, SV_SCROLL_PHASE_DOOR },
1400                 { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_HIT },
1401                 { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_DAM },
1402
1403         },
1404
1405         {
1406                 /* Magic-User store */
1407
1408                 { TV_RING, SV_RING_PROTECTION },
1409                 { TV_RING, SV_RING_LEVITATION_FALL },
1410                 { TV_RING, SV_RING_PROTECTION },
1411                 { TV_RING, SV_RING_RESIST_FIRE },
1412
1413                 { TV_RING, SV_RING_RESIST_COLD },
1414                 { TV_AMULET, SV_AMULET_CHARISMA },
1415                 { TV_RING, SV_RING_WARNING },
1416                 { TV_AMULET, SV_AMULET_RESIST_ACID },
1417
1418                 { TV_AMULET, SV_AMULET_SEARCHING },
1419                 { TV_WAND, SV_WAND_SLOW_MONSTER },
1420                 { TV_WAND, SV_WAND_CONFUSE_MONSTER },
1421                 { TV_WAND, SV_WAND_SLEEP_MONSTER },
1422
1423                 { TV_WAND, SV_WAND_MAGIC_MISSILE },
1424                 { TV_WAND, SV_WAND_STINKING_CLOUD },
1425                 { TV_WAND, SV_WAND_WONDER },
1426                 { TV_WAND, SV_WAND_DISARMING },
1427
1428                 { TV_STAFF, SV_STAFF_LITE },
1429                 { TV_STAFF, SV_STAFF_MAPPING },
1430                 { TV_STAFF, SV_STAFF_DETECT_TRAP },
1431                 { TV_STAFF, SV_STAFF_DETECT_DOOR },
1432
1433                 { TV_STAFF, SV_STAFF_DETECT_GOLD },
1434                 { TV_STAFF, SV_STAFF_DETECT_ITEM },
1435                 { TV_STAFF, SV_STAFF_DETECT_INVIS },
1436                 { TV_STAFF, SV_STAFF_DETECT_EVIL },
1437
1438                 { TV_STAFF, SV_STAFF_TELEPORTATION },
1439                 { TV_STAFF, SV_STAFF_TELEPORTATION },
1440                 { TV_STAFF, SV_STAFF_TELEPORTATION },
1441                 { TV_STAFF, SV_STAFF_TELEPORTATION },
1442
1443                 { TV_STAFF, SV_STAFF_IDENTIFY },
1444                 { TV_STAFF, SV_STAFF_IDENTIFY },
1445                 { TV_STAFF, SV_STAFF_IDENTIFY },
1446
1447                 { TV_STAFF, SV_STAFF_IDENTIFY },
1448                 { TV_STAFF, SV_STAFF_REMOVE_CURSE },
1449                 { TV_STAFF, SV_STAFF_CURE_LIGHT },
1450                 { TV_STAFF, SV_STAFF_PROBING },
1451
1452                 { TV_FIGURINE, 0 },
1453
1454                 { TV_SORCERY_BOOK, 0 },
1455                 { TV_SORCERY_BOOK, 0 },
1456                 { TV_SORCERY_BOOK, 1 },
1457                 { TV_SORCERY_BOOK, 1 },
1458
1459                 { TV_ARCANE_BOOK, 0 },
1460                 { TV_ARCANE_BOOK, 0 },
1461                 { TV_ARCANE_BOOK, 1 },
1462                 { TV_ARCANE_BOOK, 1 },
1463
1464                 { TV_ARCANE_BOOK, 2 },
1465                 { TV_ARCANE_BOOK, 2 },
1466                 { TV_ARCANE_BOOK, 3 },
1467                 { TV_ARCANE_BOOK, 3 },
1468
1469         },
1470
1471         {
1472                 /* Black Market (unused) */
1473                 { 0, 0 },
1474                 { 0, 0 },
1475                 { 0, 0 },
1476                 { 0, 0 },
1477                 { 0, 0 },
1478                 { 0, 0 },
1479                 { 0, 0 },
1480                 { 0, 0 },
1481                 { 0, 0 },
1482                 { 0, 0 },
1483                 { 0, 0 },
1484                 { 0, 0 },
1485                 { 0, 0 },
1486                 { 0, 0 },
1487                 { 0, 0 },
1488                 { 0, 0 },
1489                 { 0, 0 },
1490                 { 0, 0 },
1491                 { 0, 0 },
1492                 { 0, 0 },
1493                 { 0, 0 },
1494                 { 0, 0 },
1495                 { 0, 0 },
1496                 { 0, 0 },
1497                 { 0, 0 },
1498                 { 0, 0 },
1499                 { 0, 0 },
1500                 { 0, 0 },
1501                 { 0, 0 },
1502                 { 0, 0 },
1503                 { 0, 0 },
1504                 { 0, 0 }
1505         },
1506
1507         {
1508                 /* Home (unused) */
1509                 { 0, 0 },
1510                 { 0, 0 },
1511                 { 0, 0 },
1512                 { 0, 0 },
1513                 { 0, 0 },
1514                 { 0, 0 },
1515                 { 0, 0 },
1516                 { 0, 0 },
1517                 { 0, 0 },
1518                 { 0, 0 },
1519                 { 0, 0 },
1520                 { 0, 0 },
1521                 { 0, 0 },
1522                 { 0, 0 },
1523                 { 0, 0 },
1524                 { 0, 0 },
1525                 { 0, 0 },
1526                 { 0, 0 },
1527                 { 0, 0 },
1528                 { 0, 0 },
1529                 { 0, 0 },
1530                 { 0, 0 },
1531                 { 0, 0 },
1532                 { 0, 0 },
1533                 { 0, 0 },
1534                 { 0, 0 },
1535                 { 0, 0 },
1536                 { 0, 0 },
1537                 { 0, 0 },
1538                 { 0, 0 },
1539                 { 0, 0 },
1540                 { 0, 0 }
1541         },
1542
1543         {
1544                 /* Bookstore */
1545                 { TV_SORCERY_BOOK, 0 },
1546                 { TV_SORCERY_BOOK, 0 },
1547                 { TV_SORCERY_BOOK, 1 },
1548                 { TV_SORCERY_BOOK, 1 },
1549
1550                 { TV_NATURE_BOOK, 0 },
1551                 { TV_NATURE_BOOK, 0 },
1552                 { TV_NATURE_BOOK, 1 },
1553                 { TV_NATURE_BOOK, 1 },
1554
1555                 { TV_CHAOS_BOOK, 0 },
1556                 { TV_CHAOS_BOOK, 0 },
1557                 { TV_CHAOS_BOOK, 1 },
1558                 { TV_CHAOS_BOOK, 1 },
1559
1560                 { TV_DEATH_BOOK, 0 },
1561                 { TV_DEATH_BOOK, 0 },
1562                 { TV_DEATH_BOOK, 1 },
1563                 { TV_DEATH_BOOK, 1 },
1564
1565                 { TV_TRUMP_BOOK, 0 },           /* +16 */
1566                 { TV_TRUMP_BOOK, 0 },
1567                 { TV_TRUMP_BOOK, 1 },
1568                 { TV_TRUMP_BOOK, 1 },
1569
1570                 { TV_ARCANE_BOOK, 0 },
1571                 { TV_ARCANE_BOOK, 1 },
1572                 { TV_ARCANE_BOOK, 2 },
1573                 { TV_ARCANE_BOOK, 3 },
1574
1575                 { TV_CRAFT_BOOK, 0 },
1576                 { TV_CRAFT_BOOK, 0 },
1577                 { TV_CRAFT_BOOK, 1 },
1578                 { TV_CRAFT_BOOK, 1 },
1579
1580                 { TV_DAEMON_BOOK, 0 },
1581                 { TV_DAEMON_BOOK, 0 },
1582                 { TV_DAEMON_BOOK, 1 },
1583                 { TV_DAEMON_BOOK, 1 },
1584
1585                 { TV_MUSIC_BOOK, 0 },
1586                 { TV_MUSIC_BOOK, 0 },
1587                 { TV_MUSIC_BOOK, 1 },
1588                 { TV_MUSIC_BOOK, 1 },
1589
1590                 { TV_HEX_BOOK, 0 },
1591                 { TV_HEX_BOOK, 0 },
1592                 { TV_HEX_BOOK, 1 },
1593                 { TV_HEX_BOOK, 1 },
1594         },
1595
1596         {
1597                 /* Museum (unused) */
1598                 { 0, 0 },
1599                 { 0, 0 },
1600                 { 0, 0 },
1601                 { 0, 0 },
1602                 { 0, 0 },
1603                 { 0, 0 },
1604                 { 0, 0 },
1605                 { 0, 0 },
1606                 { 0, 0 },
1607                 { 0, 0 },
1608                 { 0, 0 },
1609                 { 0, 0 },
1610                 { 0, 0 },
1611                 { 0, 0 },
1612                 { 0, 0 },
1613                 { 0, 0 },
1614                 { 0, 0 },
1615                 { 0, 0 },
1616                 { 0, 0 },
1617                 { 0, 0 },
1618                 { 0, 0 },
1619                 { 0, 0 },
1620                 { 0, 0 },
1621                 { 0, 0 },
1622                 { 0, 0 },
1623                 { 0, 0 },
1624                 { 0, 0 },
1625                 { 0, 0 },
1626                 { 0, 0 },
1627                 { 0, 0 },
1628                 { 0, 0 },
1629                 { 0, 0 }
1630         }
1631 };
1632
1633
1634 /*!
1635  * @brief 取引成功時の店主のメッセージ処理 /
1636  * ブラックマーケットのときは別のメッセージを出す
1637  * Successful haggle.
1638  * @param player_ptr プレーヤーへの参照ポインタ
1639  * @return なし
1640  */
1641 static void say_comment_1(player_type *player_ptr)
1642 {
1643 #ifdef JP
1644         if (cur_store_num == STORE_BLACK)
1645         {
1646                 msg_print(comment_1_B[randint0(MAX_COMMENT_1)]);
1647         }
1648         else
1649         {
1650                 msg_print(comment_1[randint0(MAX_COMMENT_1)]);
1651         }
1652 #else
1653         msg_print(comment_1[randint0(MAX_COMMENT_1)]);
1654 #endif
1655
1656         if (one_in_(RUMOR_CHANCE))
1657         {
1658 #ifdef JP
1659                 msg_print("店主は耳うちした:");
1660 #else
1661                 msg_print("The shopkeeper whispers something into your ear:");
1662 #endif
1663                 display_rumor(player_ptr, TRUE);
1664         }
1665 }
1666
1667
1668 /*!
1669  * @brief プレイヤーがアイテムを買う時の価格代案メッセージ処理 /
1670  * Continue haggling (player is buying)
1671  * @param value 店主の提示価格
1672  * @param annoyed 店主のいらつき度
1673  * @return なし
1674  */
1675 static void say_comment_2(PRICE value, int annoyed)
1676 {
1677         /* Prepare a string to insert */
1678         char    tmp_val[80];
1679         sprintf(tmp_val, "%ld", (long)value);
1680
1681         if (annoyed > 0)
1682         {
1683                 msg_format(comment_2a[randint0(MAX_COMMENT_2A)], tmp_val);
1684                 return;
1685         }
1686
1687 #ifdef JP
1688         if (cur_store_num == STORE_BLACK)
1689         {
1690                 msg_format(comment_2b_B[randint0(MAX_COMMENT_2B)], tmp_val);
1691         }
1692         else
1693         {
1694                 msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val);
1695         }
1696 #else
1697         msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val);
1698 #endif
1699 }
1700
1701
1702 /*!
1703  * @brief プレイヤーがアイテムを売る時の価格代案メッセージ処理 /
1704  * ブラックマーケットのときは別のメッセージを出す
1705  * Continue haggling (player is selling)
1706  * @param value 店主の提示価格
1707  * @param annoyed 店主のいらつき度
1708  * @return なし
1709  */
1710 static void say_comment_3(PRICE value, int annoyed)
1711 {
1712         char tmp_val[80];
1713         sprintf(tmp_val, "%ld", (long)value);
1714         if (annoyed > 0)
1715         {
1716                 msg_format(comment_3a[randint0(MAX_COMMENT_3A)], tmp_val);
1717         }
1718         else
1719         {
1720 #ifdef JP
1721                 /* ブラックマーケットの時は別のメッセージを出す */
1722                 if (cur_store_num == STORE_BLACK)
1723                 {
1724                         msg_format(comment_3b_B[randint0(MAX_COMMENT_3B)], tmp_val);
1725                 }
1726                 else
1727                 {
1728                         msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val);
1729                 }
1730 #else
1731                 msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val);
1732 #endif
1733         }
1734 }
1735
1736
1737 /*!
1738  * @brief 店主がプレイヤーを追い出す時のメッセージ処理 /
1739  * ブラックマーケットの時は別のメッセージを出す
1740  * Kick 'da bum out.                                    -RAK-
1741  * @return なし
1742  */
1743 static void say_comment_4(void)
1744 {
1745 #ifdef JP
1746         if (cur_store_num == STORE_BLACK)
1747         {
1748                 msg_print(comment_4a_B[randint0(MAX_COMMENT_4A)]);
1749                 msg_print(comment_4b_B[randint0(MAX_COMMENT_4B)]);
1750         }
1751         else
1752         {
1753                 msg_print(comment_4a[randint0(MAX_COMMENT_4A)]);
1754                 msg_print(comment_4b[randint0(MAX_COMMENT_4B)]);
1755         }
1756 #else
1757         msg_print(comment_4a[randint0(MAX_COMMENT_4A)]);
1758         msg_print(comment_4b[randint0(MAX_COMMENT_4B)]);
1759 #endif
1760
1761 }
1762
1763
1764 /*!
1765  * @brief 店主がプレイヤーに取り合わない時のメッセージ処理 /
1766  * ブラックマーケットの時は別のメッセージを出す
1767  * You are insulting me
1768  * @return なし
1769  */
1770 static void say_comment_5(void)
1771 {
1772 #ifdef JP
1773         if (cur_store_num == STORE_BLACK)
1774         {
1775                 msg_print(comment_5_B[randint0(MAX_COMMENT_5)]);
1776         }
1777         else
1778         {
1779                 msg_print(comment_5[randint0(MAX_COMMENT_5)]);
1780         }
1781 #else
1782         msg_print(comment_5[randint0(MAX_COMMENT_5)]);
1783 #endif
1784
1785 }
1786
1787
1788 /*!
1789  * @brief 店主がプレイヤーの提示を理解できなかった時のメッセージ処理 /
1790  * That makes no sense.
1791  * @return なし
1792  */
1793 static void say_comment_6(void)
1794 {
1795         msg_print(comment_6[randint0(MAX_COMMENT_6)]);
1796 }
1797
1798 #define MAX_COMMENT_7A  4
1799
1800 static concptr comment_7a[MAX_COMMENT_7A] =
1801 {
1802 #ifdef JP
1803         "うわああぁぁ!",
1804         "なんてこった!",
1805         "誰かがむせび泣く声が聞こえる...。",
1806         "店主が悔しげにわめいている!"
1807 #else
1808         "Arrgghh!",
1809         "You bastard!",
1810         "You hear someone sobbing...",
1811         "The shopkeeper howls in agony!"
1812 #endif
1813
1814 };
1815
1816 #define MAX_COMMENT_7B  4
1817
1818 static concptr comment_7b[MAX_COMMENT_7B] =
1819 {
1820 #ifdef JP
1821         "くそう!",
1822         "この悪魔め!",
1823         "店主が恨めしそうに見ている。",
1824         "店主が睨んでいる。"
1825 #else
1826         "Damn!",
1827         "You fiend!",
1828         "The shopkeeper curses at you.",
1829         "The shopkeeper glares at you."
1830 #endif
1831
1832 };
1833
1834 #define MAX_COMMENT_7C  4
1835
1836 static concptr comment_7c[MAX_COMMENT_7C] =
1837 {
1838 #ifdef JP
1839         "すばらしい!",
1840         "君が天使に見えるよ!",
1841         "店主がクスクス笑っている。",
1842         "店主が大声で笑っている。"
1843 #else
1844         "Cool!",
1845         "You've made my day!",
1846         "The shopkeeper giggles.",
1847         "The shopkeeper laughs loudly."
1848 #endif
1849
1850 };
1851
1852 #define MAX_COMMENT_7D  4
1853
1854 static concptr comment_7d[MAX_COMMENT_7D] =
1855 {
1856 #ifdef JP
1857         "やっほぅ!",
1858         "こんなおいしい思いをしたら、真面目に働けなくなるなぁ。",
1859         "店主は嬉しくて跳ね回っている。",
1860         "店主は満面に笑みをたたえている。"
1861 #else
1862         "Yipee!",
1863         "I think I'll retire!",
1864         "The shopkeeper jumps for joy.",
1865         "The shopkeeper smiles gleefully."
1866 #endif
1867
1868 };
1869
1870
1871 /*!
1872  * @brief 店主が交渉を終えた際の反応を返す処理 /
1873  * Let a shop-keeper React to a purchase
1874  * @param price アイテムの取引額
1875  * @param value アイテムの実際価値
1876  * @param guess 店主が当初予想していた価値
1877  * @return なし
1878  * @details
1879  * We paid "price", it was worth "value", and we thought it was worth "guess"
1880  */
1881 static void purchase_analyze(player_type *player_ptr, PRICE price, PRICE value, PRICE guess)
1882 {
1883         /* Item was worthless, but we bought it */
1884         if ((value <= 0) && (price > value))
1885         {
1886                 msg_print(comment_7a[randint0(MAX_COMMENT_7A)]);
1887                 chg_virtue(player_ptr, V_HONOUR, -1);
1888                 chg_virtue(player_ptr, V_JUSTICE, -1);
1889                 sound(SOUND_STORE1);
1890                 return;
1891         }
1892
1893         /* Item was cheaper than we thought, and we paid more than necessary */
1894         if ((value < guess) && (price > value))
1895         {
1896                 msg_print(comment_7b[randint0(MAX_COMMENT_7B)]);
1897                 chg_virtue(player_ptr, V_JUSTICE, -1);
1898                 if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, -1);
1899                 sound(SOUND_STORE2);
1900                 return;
1901         }
1902
1903         /* Item was a good bargain, and we got away with it */
1904         if ((value > guess) && (value < (4 * guess)) && (price < value))
1905         {
1906                 msg_print(comment_7c[randint0(MAX_COMMENT_7C)]);
1907                 if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, -1);
1908                 else if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, 1);
1909                 sound(SOUND_STORE3);
1910                 return;
1911         }
1912
1913         /* Item was a great bargain, and we got away with it */
1914         if ((value > guess) && (price < value))
1915         {
1916                 msg_print(comment_7d[randint0(MAX_COMMENT_7D)]);
1917                 if (one_in_(2)) chg_virtue(player_ptr, V_HONOUR, -1);
1918                 if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, 1);
1919                 if (10 * price < value) chg_virtue(player_ptr, V_SACRIFICE, 1);
1920                 sound(SOUND_STORE4);
1921                 return;
1922         }
1923 }
1924
1925 /*
1926  * We store the current "store feat" here so everyone can access it
1927  */
1928 static int cur_store_feat;
1929
1930 /*
1931  * Buying and selling adjustments for race combinations.
1932  * Entry[owner][player] gives the basic "cost inflation".
1933  */
1934 static byte rgold_adj[MAX_RACES][MAX_RACES] =
1935 {
1936         /*Hum, HfE, Elf,  Hal, Gno, Dwa, HfO, HfT, Dun, HiE, Barbarian,
1937          HfOg, HGn, HTn, Cyc, Yek, Klc, Kbd, Nbl, DkE, Drc, Mind Flayer,
1938          Imp,  Glm, Skl, Zombie, Vampire, Spectre, Fairy, Beastman, Ent,
1939          Angel, Demon, Kutar, Android, Merfolk */
1940
1941         /* Human */
1942         { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
1943           124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
1944           115, 105, 125, 125, 125, 125, 105, 120, 105,  95, 140,
1945           100, 120, 110, 105, 110 },
1946
1947         /* Half-Elf */
1948         { 110, 100, 100, 105, 110, 120, 125, 130, 110, 100, 110,
1949           120, 115, 108, 115, 110, 110, 120, 120, 115, 115, 110,
1950           120, 110, 110, 110, 120, 110, 100, 125, 100,  95, 140,
1951           110, 115, 110, 110, 110 },
1952
1953         /* Elf */
1954         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
1955           120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108,
1956           120, 115, 110, 110, 120, 110, 100, 125, 100,  95, 140,
1957           110, 110, 105, 110, 110 },
1958
1959         /* Halfling */
1960         { 115, 110, 105,  95, 105, 110, 115, 130, 115, 105, 115,
1961           125, 120, 120, 125, 115, 110, 120, 120, 120, 115, 115,
1962           120, 110, 120, 120, 130, 110, 110, 130, 110,  95, 140,
1963           115, 120, 105, 115, 105 },
1964
1965         /* Gnome */
1966         { 115, 115, 110, 105,  95, 110, 115, 130, 115, 110, 115,
1967           120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110,
1968           120, 101, 110, 110, 120, 120, 115, 130, 115,  95, 140,
1969           115, 110, 110, 115, 110 },
1970
1971         /* Dwarf */
1972         { 115, 120, 120, 110, 110,  95, 125, 135, 115, 120, 115,
1973           125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120,
1974           120, 105, 115, 115, 115, 115, 120, 130, 120,  95, 140,
1975           115, 110, 115, 115, 120 },
1976
1977         /* Half-Orc */
1978         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
1979           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
1980           115, 125, 120, 120, 115, 120, 125, 115, 125,  95, 140,
1981           115, 110, 115, 115, 125 },
1982
1983         /* Half-Troll */
1984         { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
1985           110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
1986           110, 115, 112, 112, 115, 112, 120, 110, 120,  95, 140,
1987           110, 110, 115, 110, 130 },
1988
1989         /* Amberite */
1990         { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
1991           120, 120, 105, 120, 115, 105, 115, 120, 110, 105, 105,
1992           120, 105, 120, 120, 125, 120, 105, 135, 105,  95, 140,
1993           100, 110, 110, 100, 110 },
1994
1995         /* High_Elf */
1996         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
1997           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
1998           125, 115, 120, 120, 125, 120, 100, 125, 100,  95, 140,
1999           110, 110, 105, 110, 110 },
2000
2001         /* Human / Barbarian (copied from human) */
2002         { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
2003           124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
2004           115, 105, 125, 125, 130, 125, 115, 120, 115,  95, 140,
2005           100, 120, 110, 100, 110 },
2006
2007         /* Half-Ogre: theoretical, copied from half-troll */
2008         { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
2009           110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
2010           110, 115, 112, 112, 115, 112, 120, 110, 120,  95, 140,
2011           110, 110, 115, 110, 120 },
2012
2013         /* Half-Giant: theoretical, copied from half-troll */
2014         { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
2015           110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
2016           110, 115, 112, 112, 115, 112, 130, 120, 130,  95, 140,
2017           110, 110, 115, 110, 115 },
2018
2019         /* Half-Titan: theoretical, copied from High_Elf */
2020         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2021           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2022           125, 115, 120, 120, 120, 120, 130, 130, 130,  95, 140,
2023           110, 110, 115, 110, 108 },
2024
2025         /* Cyclops: theoretical, copied from half-troll */
2026         { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
2027           110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
2028           110, 115, 112, 112, 115, 112, 130, 130, 130,  95, 140,
2029           110, 110, 115, 110, 115 },
2030
2031         /* Yeek: theoretical, copied from Half-Orc */
2032         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2033           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2034           115, 125, 120, 120, 120, 120, 130, 130, 130,  95, 140,
2035           115, 110, 115, 115, 110 },
2036
2037         /* Klackon: theoretical, copied from Gnome */
2038         { 115, 115, 110, 105,  95, 110, 115, 130, 115, 110, 115,
2039           120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110,
2040           120, 101, 110, 110, 120, 120, 130, 130, 130,  95, 140,
2041           115, 110, 115, 115, 110 },
2042
2043         /* Kobold: theoretical, copied from Half-Orc */
2044         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2045           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2046           115, 125, 120, 120, 120, 120, 130, 130, 130,  95, 140,
2047           115, 110, 115, 115, 120 },
2048
2049         /* Nibelung: theoretical, copied from Dwarf */
2050         { 115, 120, 120, 110, 110,  95, 125, 135, 115, 120, 115,
2051           125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120,
2052           120, 105, 115, 115, 120, 120, 130, 130, 130,  95, 140,
2053           115, 135, 115, 115, 120 },
2054
2055         /* Dark Elf */
2056         { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115,
2057           115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110,
2058           110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120,
2059           110, 101, 115, 110, 115 },
2060
2061         /* Draconian: theoretical, copied from High_Elf */
2062         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2063           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2064           125, 115, 120, 120, 120, 120, 130, 130, 130,  95, 140,
2065           110, 110, 115, 110, 115 },
2066
2067         /* Mind Flayer: theoretical, copied from High_Elf */
2068         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2069           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2070           125, 115, 120, 120, 120, 120, 130, 130, 130,  95, 140,
2071           110, 110, 115, 110, 110 },
2072
2073         /* Imp: theoretical, copied from High_Elf */
2074         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2075           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2076           125, 115, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2077           110, 110, 115, 110, 120 },
2078
2079         /* Golem: theoretical, copied from High_Elf */
2080         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2081           125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2082           125, 115, 120, 120, 120, 120, 130, 130, 130,  95, 140,
2083           110, 110, 115, 110, 110 },
2084
2085         /* Skeleton: theoretical, copied from half-orc */
2086         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2087           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2088           115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2089           115, 110, 125, 115, 110 },
2090
2091         /* Zombie: Theoretical, copied from half-orc */
2092         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2093           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2094           115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2095           115, 110, 125, 115, 110 },
2096
2097         /* Vampire: Theoretical, copied from half-orc */
2098         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2099           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2100           115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2101           115, 110, 125, 115, 120 },
2102
2103         /* Spectre: Theoretical, copied from half-orc */
2104         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2105           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2106           115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2107           115, 110, 125, 115, 110 },
2108
2109         /* Sprite: Theoretical, copied from half-orc */
2110         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2111           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2112           115, 125, 120, 120, 120, 120, 130, 130, 130,  95, 140,
2113           115, 110, 105, 115, 110 },
2114
2115         /* Beastman: Theoretical, copied from half-orc */
2116         { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2117           110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2118           115, 125, 120, 120, 120, 120, 130, 130, 130,  95, 140,
2119           115, 110, 115, 115, 125 },
2120
2121         /* Ent */
2122         { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2123           120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108,
2124           120, 115, 110, 110, 120, 110, 100, 125, 100,  95, 140,
2125           110, 110, 105, 110, 110 },
2126
2127         /* Angel */
2128         {  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,
2129            95,  95,  95,  95,  95,  95,  95,  95,  95,  95,  95,
2130            95,  95,  95,  95,  95,  95,  95,  95,  95,  95, 160,
2131            95,  95,  95,  95,  95 },
2132
2133         /* Demon */
2134         { 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
2135           140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
2136           140, 140, 140, 140, 140, 140, 140, 140, 140, 160, 120,
2137           140, 140, 140, 140, 140 },
2138
2139         /* Dunadan */
2140         { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
2141           124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
2142           115, 105, 125, 125, 125, 125, 105, 120, 105,  95, 140,
2143           100, 120, 110, 100, 110 },
2144
2145         /* Shadow Fairy */
2146         { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115,
2147           115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110,
2148           110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120,
2149           110, 101, 115, 110, 115 },
2150
2151         /* Kutar */
2152         { 110, 110, 105, 105, 110, 115, 115, 115, 110, 105, 110,
2153           115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
2154           115, 115, 125, 125, 125, 125, 105, 115, 105,  95, 140,
2155           110, 115, 100, 110, 110 },
2156
2157         /* Android */
2158         { 105, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
2159           124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
2160           115, 105, 125, 125, 125, 125, 105, 120, 105,  95, 140,
2161           100, 120, 110, 100, 110 },
2162
2163         /* Merfolk */
2164         { 110, 110, 110, 105, 110, 120, 125, 130, 110, 110, 110,
2165           120, 115, 108, 115, 110, 110, 120, 120, 115, 115, 110,
2166           120, 110, 110, 110, 120, 110, 110, 125, 110,  95, 140,
2167           110, 115, 110, 110, 100 },
2168 };
2169
2170
2171 /*!
2172  * @brief 店舗価格を決定する. 無料にはならない /
2173  * Determine the price of an item (qty one) in a store.
2174  * @param o_ptr 店舗に並べるオブジェクト構造体の参照ポインタ
2175  * @param greed 店主の強欲度
2176  * @param flip TRUEならば店主にとっての買取価格、FALSEなら売出価格を計算
2177  * @return アイテムの店舗価格
2178  * @details
2179  * <pre>
2180  * This function takes into account the player's charisma, and the
2181  * shop-keepers friendliness, and the shop-keeper's base greed, but
2182  * never lets a shop-keeper lose money in a transaction.
2183  * The "greed" value should exceed 100 when the player is "buying" the
2184  * item, and should be less than 100 when the player is "selling" it.
2185  * Hack -- the black market always charges twice as much as it should.
2186  * Charisma adjustment runs from 80 to 130
2187  * Racial adjustment runs from 95 to 130
2188  * Since greed/charisma/racial adjustments are centered at 100, we need
2189  * to adjust (by 200) to extract a usable multiplier.  Note that the
2190  * "greed" value is always something (?).
2191  * </pre>
2192  */
2193 static PRICE price_item(player_type *player_ptr, object_type *o_ptr, int greed, bool flip)
2194 {
2195         PRICE price = object_value(o_ptr);
2196         if (price <= 0) return (0L);
2197
2198         int factor = rgold_adj[ot_ptr->owner_race][player_ptr->prace];
2199         factor += adj_chr_gold[player_ptr->stat_ind[A_CHR]];
2200         int adjust;
2201         if (flip)
2202         {
2203                 adjust = 100 + (300 - (greed + factor));
2204                 if (adjust > 100) adjust = 100;
2205                 if (cur_store_num == STORE_BLACK)
2206                         price = price / 2;
2207
2208                 price = (price * adjust + 50L) / 100L;
2209         }
2210         else
2211         {
2212                 adjust = 100 + ((greed + factor) - 300);
2213                 if (adjust < 100) adjust = 100;
2214                 if (cur_store_num == STORE_BLACK)
2215                         price = price * 2;
2216
2217                 price = (s32b)(((u32b)price * (u32b)adjust + 50UL) / 100UL);
2218         }
2219
2220         if (price <= 0L) return (1L);
2221         return (price);
2222 }
2223
2224
2225 /*!
2226  * @brief 安価な消耗品の販売数を増やし、低確率で割引にする /
2227  * Certain "cheap" objects should be created in "piles"
2228  * @param o_ptr 店舗に並べるオブジェクト構造体の参照ポインタ
2229  * @return なし
2230  * @details
2231  * <pre>
2232  * Some objects can be sold at a "discount" (in small piles)
2233  * </pre>
2234  */
2235 static void mass_produce(object_type *o_ptr)
2236 {
2237         int size = 1;
2238         PRICE cost = object_value(o_ptr);
2239         switch (o_ptr->tval)
2240         {
2241         case TV_FOOD:
2242         case TV_FLASK:
2243         case TV_LITE:
2244         {
2245                 if (cost <= 5L) size += damroll(3, 5);
2246                 if (cost <= 20L) size += damroll(3, 5);
2247                 if (cost <= 50L) size += damroll(2, 2);
2248                 break;
2249         }
2250         case TV_POTION:
2251         case TV_SCROLL:
2252         {
2253                 if (cost <= 60L) size += damroll(3, 5);
2254                 if (cost <= 240L) size += damroll(1, 5);
2255                 if (o_ptr->sval == SV_SCROLL_STAR_IDENTIFY) size += damroll(3, 5);
2256                 if (o_ptr->sval == SV_SCROLL_STAR_REMOVE_CURSE) size += damroll(1, 4);
2257                 break;
2258         }
2259         case TV_LIFE_BOOK:
2260         case TV_SORCERY_BOOK:
2261         case TV_NATURE_BOOK:
2262         case TV_CHAOS_BOOK:
2263         case TV_DEATH_BOOK:
2264         case TV_TRUMP_BOOK:
2265         case TV_ARCANE_BOOK:
2266         case TV_CRAFT_BOOK:
2267         case TV_DAEMON_BOOK:
2268         case TV_CRUSADE_BOOK:
2269         case TV_MUSIC_BOOK:
2270         case TV_HISSATSU_BOOK:
2271         case TV_HEX_BOOK:
2272         {
2273                 if (cost <= 50L) size += damroll(2, 3);
2274                 if (cost <= 500L) size += damroll(1, 3);
2275                 break;
2276         }
2277         case TV_SOFT_ARMOR:
2278         case TV_HARD_ARMOR:
2279         case TV_SHIELD:
2280         case TV_GLOVES:
2281         case TV_BOOTS:
2282         case TV_CLOAK:
2283         case TV_HELM:
2284         case TV_CROWN:
2285         case TV_SWORD:
2286         case TV_POLEARM:
2287         case TV_HAFTED:
2288         case TV_DIGGING:
2289         case TV_BOW:
2290         {
2291                 if (object_is_artifact(o_ptr)) break;
2292                 if (object_is_ego(o_ptr)) break;
2293                 if (cost <= 10L) size += damroll(3, 5);
2294                 if (cost <= 100L) size += damroll(3, 5);
2295                 break;
2296         }
2297         case TV_SPIKE:
2298         case TV_SHOT:
2299         case TV_ARROW:
2300         case TV_BOLT:
2301         {
2302                 if (cost <= 5L) size += damroll(5, 5);
2303                 if (cost <= 50L) size += damroll(5, 5);
2304                 if (cost <= 500L) size += damroll(5, 5);
2305                 break;
2306         }
2307         case TV_FIGURINE:
2308         {
2309                 if (cost <= 100L) size += damroll(2, 2);
2310                 if (cost <= 1000L) size += damroll(2, 2);
2311                 break;
2312         }
2313         case TV_CAPTURE:
2314         case TV_STATUE:
2315         case TV_CARD:
2316         {
2317                 size = 1;
2318                 break;
2319         }
2320
2321         /*
2322          * Because many rods (and a few wands and staffs) are useful mainly
2323          * in quantity, the Black Market will occasionally have a bunch of
2324          * one kind. -LM-
2325          */
2326         case TV_ROD:
2327         case TV_WAND:
2328         case TV_STAFF:
2329         {
2330                 if ((cur_store_num == STORE_BLACK) && one_in_(3))
2331                 {
2332                         if (cost < 1601L) size += damroll(1, 5);
2333                         else if (cost < 3201L) size += damroll(1, 3);
2334                 }
2335                 break;
2336         }
2337         }
2338
2339         DISCOUNT_RATE discount = 0;
2340         if (cost < 5)
2341         {
2342                 discount = 0;
2343         }
2344         else if (one_in_(25))
2345         {
2346                 discount = 25;
2347         }
2348         else if (one_in_(150))
2349         {
2350                 discount = 50;
2351         }
2352         else if (one_in_(300))
2353         {
2354                 discount = 75;
2355         }
2356         else if (one_in_(500))
2357         {
2358                 discount = 90;
2359         }
2360
2361         if (o_ptr->art_name)
2362         {
2363                 discount = 0;
2364         }
2365
2366         o_ptr->discount = discount;
2367         o_ptr->number = size - (size * discount / 100);
2368         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
2369         {
2370                 o_ptr->pval *= (PARAMETER_VALUE)o_ptr->number;
2371         }
2372 }
2373
2374
2375 /*!
2376  * @brief 店舗に並べた品を同一品であるかどうか判定する /
2377  * Determine if a store item can "absorb" another item
2378  * @param o_ptr 判定するオブジェクト構造体の参照ポインタ1
2379  * @param j_ptr 判定するオブジェクト構造体の参照ポインタ2
2380  * @return 同一扱いできるならTRUEを返す
2381  * @details
2382  * <pre>
2383  * See "object_similar()" for the same function for the "player"
2384  * </pre>
2385  */
2386 static bool store_object_similar(object_type *o_ptr, object_type *j_ptr)
2387 {
2388         if (o_ptr == j_ptr) return 0;
2389         if (o_ptr->k_idx != j_ptr->k_idx) return 0;
2390         if ((o_ptr->pval != j_ptr->pval) && (o_ptr->tval != TV_WAND) && (o_ptr->tval != TV_ROD)) return 0;
2391         if (o_ptr->to_h != j_ptr->to_h) return 0;
2392         if (o_ptr->to_d != j_ptr->to_d) return 0;
2393         if (o_ptr->to_a != j_ptr->to_a) return 0;
2394         if (o_ptr->name2 != j_ptr->name2) return 0;
2395         if (object_is_artifact(o_ptr) || object_is_artifact(j_ptr)) return 0;
2396         for (int i = 0; i < TR_FLAG_SIZE; i++)
2397                 if (o_ptr->art_flags[i] != j_ptr->art_flags[i]) return 0;
2398         if (o_ptr->xtra1 || j_ptr->xtra1) return 0;
2399         if (o_ptr->timeout || j_ptr->timeout) return 0;
2400         if (o_ptr->ac != j_ptr->ac)   return 0;
2401         if (o_ptr->dd != j_ptr->dd)   return 0;
2402         if (o_ptr->ds != j_ptr->ds)   return 0;
2403         if (o_ptr->tval == TV_CHEST) return 0;
2404         if (o_ptr->tval == TV_STATUE) return 0;
2405         if (o_ptr->tval == TV_CAPTURE) return 0;
2406         if (o_ptr->discount != j_ptr->discount) return 0;
2407         return TRUE;
2408 }
2409
2410
2411 /*!
2412  * @brief 店舗に並べた品を重ね合わせできるかどうか判定する /
2413  * Allow a store item to absorb another item
2414  * @param o_ptr 判定するオブジェクト構造体の参照ポインタ1
2415  * @param j_ptr 判定するオブジェクト構造体の参照ポインタ2
2416  * @return 重ね合わせできるならTRUEを返す
2417  * @details
2418  * <pre>
2419  * See "object_similar()" for the same function for the "player"
2420  * </pre>
2421  */
2422 static void store_object_absorb(object_type *o_ptr, object_type *j_ptr)
2423 {
2424         int max_num = (o_ptr->tval == TV_ROD) ?
2425                 MIN(99, MAX_SHORT / k_info[o_ptr->k_idx].pval) : 99;
2426         int total = o_ptr->number + j_ptr->number;
2427         int diff = (total > max_num) ? total - max_num : 0;
2428         o_ptr->number = (total > max_num) ? max_num : total;
2429         if (o_ptr->tval == TV_ROD)
2430         {
2431                 o_ptr->pval += j_ptr->pval * (j_ptr->number - diff) / j_ptr->number;
2432         }
2433
2434         if (o_ptr->tval == TV_WAND)
2435         {
2436                 o_ptr->pval += j_ptr->pval * (j_ptr->number - diff) / j_ptr->number;
2437         }
2438 }
2439
2440
2441 /*!
2442  * @brief 店舗に品を置くスペースがあるかどうかの判定を返す /
2443  * Check to see if the shop will be carrying too many objects   -RAK-
2444  * @param o_ptr 店舗に置きたいオブジェクト構造体の参照ポインタ
2445  * @return 置き場がないなら0、重ね合わせできるアイテムがあるなら-1、スペースがあるなら1を返す。
2446  * @details
2447  * <pre>
2448  * Note that the shop, just like a player, will not accept things
2449  * it cannot hold.      Before, one could "nuke" potions this way.
2450  * Return value is now int:
2451  *  0 : No space
2452  * -1 : Can be combined to existing slot.
2453  *  1 : Cannot be combined but there are empty spaces.
2454  * </pre>
2455  */
2456 static int store_check_num(object_type *o_ptr)
2457 {
2458         object_type *j_ptr;
2459         if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
2460         {
2461                 bool old_stack_force_notes = stack_force_notes;
2462                 bool old_stack_force_costs = stack_force_costs;
2463
2464                 if (cur_store_num != STORE_HOME)
2465                 {
2466                         stack_force_notes = FALSE;
2467                         stack_force_costs = FALSE;
2468                 }
2469
2470                 for (int i = 0; i < st_ptr->stock_num; i++)
2471                 {
2472                         j_ptr = &st_ptr->stock[i];
2473                         if (object_similar(j_ptr, o_ptr))
2474                         {
2475                                 if (cur_store_num != STORE_HOME)
2476                                 {
2477                                         stack_force_notes = old_stack_force_notes;
2478                                         stack_force_costs = old_stack_force_costs;
2479                                 }
2480
2481                                 return -1;
2482                         }
2483                 }
2484
2485                 if (cur_store_num != STORE_HOME)
2486                 {
2487                         stack_force_notes = old_stack_force_notes;
2488                         stack_force_costs = old_stack_force_costs;
2489                 }
2490         }
2491         else
2492         {
2493                 for (int i = 0; i < st_ptr->stock_num; i++)
2494                 {
2495                         j_ptr = &st_ptr->stock[i];
2496                         if (store_object_similar(j_ptr, o_ptr)) return -1;
2497                 }
2498         }
2499
2500         /* Free space is always usable */
2501         /*
2502          * オプション powerup_home が設定されていると
2503          * 我が家が 20 ページまで使える
2504          */
2505         if ((cur_store_num == STORE_HOME) && (powerup_home == FALSE))
2506         {
2507                 if (st_ptr->stock_num < ((st_ptr->stock_size) / 10))
2508                 {
2509                         return 1;
2510                 }
2511         }
2512         else
2513         {
2514                 if (st_ptr->stock_num < st_ptr->stock_size)
2515                 {
2516                         return 1;
2517                 }
2518         }
2519
2520         return 0;
2521 }
2522
2523
2524 /*!
2525  * @brief オブジェクトが祝福されているかの判定を返す /
2526  * @param o_ptr 判定したいオブジェクト構造体の参照ポインタ
2527  * @return アイテムが祝福されたアイテムならばTRUEを返す
2528  */
2529 static bool is_blessed_item(object_type *o_ptr)
2530 {
2531         BIT_FLAGS flgs[TR_FLAG_SIZE];
2532         object_flags(o_ptr, flgs);
2533         if (have_flag(flgs, TR_BLESSED)) return TRUE;
2534         else return FALSE;
2535 }
2536
2537
2538 /*!
2539  * @brief オブジェクトが所定の店舗で引き取れるかどうかを返す /
2540  * Determine if the current store will purchase the given item
2541  * @param o_ptr 判定したいオブジェクト構造体の参照ポインタ
2542  * @return アイテムが買い取れるならばTRUEを返す
2543  * @note
2544  * Note that a shop-keeper must refuse to buy "worthless" items
2545  */
2546 static bool store_will_buy(object_type *o_ptr)
2547 {
2548         if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) return TRUE;
2549         switch (cur_store_num)
2550         {
2551         case STORE_GENERAL:
2552         {
2553                 switch (o_ptr->tval)
2554                 {
2555                 case TV_POTION:
2556                         if (o_ptr->sval != SV_POTION_WATER) return FALSE;
2557
2558                 case TV_WHISTLE:
2559                 case TV_FOOD:
2560                 case TV_LITE:
2561                 case TV_FLASK:
2562                 case TV_SPIKE:
2563                 case TV_SHOT:
2564                 case TV_ARROW:
2565                 case TV_BOLT:
2566                 case TV_DIGGING:
2567                 case TV_CLOAK:
2568                 case TV_BOTTLE:
2569                 case TV_FIGURINE:
2570                 case TV_STATUE:
2571                 case TV_CAPTURE:
2572                 case TV_CARD:
2573                         break;
2574                 default:
2575                         return FALSE;
2576                 }
2577
2578                 break;
2579         }
2580         case STORE_ARMOURY:
2581         {
2582                 switch (o_ptr->tval)
2583                 {
2584                 case TV_BOOTS:
2585                 case TV_GLOVES:
2586                 case TV_CROWN:
2587                 case TV_HELM:
2588                 case TV_SHIELD:
2589                 case TV_CLOAK:
2590                 case TV_SOFT_ARMOR:
2591                 case TV_HARD_ARMOR:
2592                 case TV_DRAG_ARMOR:
2593                         break;
2594                 default:
2595                         return FALSE;
2596                 }
2597
2598                 break;
2599         }
2600         case STORE_WEAPON:
2601         {
2602                 switch (o_ptr->tval)
2603                 {
2604                 case TV_SHOT:
2605                 case TV_BOLT:
2606                 case TV_ARROW:
2607                 case TV_BOW:
2608                 case TV_DIGGING:
2609                 case TV_POLEARM:
2610                 case TV_SWORD:
2611                 case TV_HISSATSU_BOOK:
2612                         break;
2613                 case TV_HAFTED:
2614                 {
2615                         if (o_ptr->sval == SV_WIZSTAFF) return FALSE;
2616                 }
2617                 break;
2618                 default:
2619                         return FALSE;
2620                 }
2621
2622                 break;
2623         }
2624         case STORE_TEMPLE:
2625         {
2626                 switch (o_ptr->tval)
2627                 {
2628                 case TV_LIFE_BOOK:
2629                 case TV_CRUSADE_BOOK:
2630                 case TV_SCROLL:
2631                 case TV_POTION:
2632                 case TV_HAFTED:
2633                 {
2634                         break;
2635                 }
2636                 case TV_FIGURINE:
2637                 case TV_STATUE:
2638                 {
2639                         monster_race *r_ptr = &r_info[o_ptr->pval];
2640                         if (!(r_ptr->flags3 & RF3_EVIL))
2641                         {
2642                                 if (r_ptr->flags3 & RF3_GOOD) break;
2643                                 if (r_ptr->flags3 & RF3_ANIMAL) break;
2644                                 if (my_strchr("?!", r_ptr->d_char)) break;
2645                         }
2646                 }
2647                 case TV_POLEARM:
2648                 case TV_SWORD:
2649                 {
2650                         if (is_blessed_item(o_ptr)) break;
2651                 }
2652                 default:
2653                         return FALSE;
2654                 }
2655
2656                 break;
2657         }
2658         case STORE_ALCHEMIST:
2659         {
2660                 switch (o_ptr->tval)
2661                 {
2662                 case TV_SCROLL:
2663                 case TV_POTION:
2664                         break;
2665                 default:
2666                         return FALSE;
2667                 }
2668
2669                 break;
2670         }
2671         case STORE_MAGIC:
2672         {
2673                 switch (o_ptr->tval)
2674                 {
2675                 case TV_SORCERY_BOOK:
2676                 case TV_NATURE_BOOK:
2677                 case TV_CHAOS_BOOK:
2678                 case TV_DEATH_BOOK:
2679                 case TV_TRUMP_BOOK:
2680                 case TV_ARCANE_BOOK:
2681                 case TV_CRAFT_BOOK:
2682                 case TV_DAEMON_BOOK:
2683                 case TV_MUSIC_BOOK:
2684                 case TV_HEX_BOOK:
2685                 case TV_AMULET:
2686                 case TV_RING:
2687                 case TV_STAFF:
2688                 case TV_WAND:
2689                 case TV_ROD:
2690                 case TV_SCROLL:
2691                 case TV_POTION:
2692                 case TV_FIGURINE:
2693                         break;
2694                 case TV_HAFTED:
2695                 {
2696                         if (o_ptr->sval == SV_WIZSTAFF) break;
2697                         else return FALSE;
2698                 }
2699                 default:
2700                         return FALSE;
2701                 }
2702
2703                 break;
2704         }
2705         case STORE_BOOK:
2706         {
2707                 switch (o_ptr->tval)
2708                 {
2709                 case TV_SORCERY_BOOK:
2710                 case TV_NATURE_BOOK:
2711                 case TV_CHAOS_BOOK:
2712                 case TV_DEATH_BOOK:
2713                 case TV_LIFE_BOOK:
2714                 case TV_TRUMP_BOOK:
2715                 case TV_ARCANE_BOOK:
2716                 case TV_CRAFT_BOOK:
2717                 case TV_DAEMON_BOOK:
2718                 case TV_CRUSADE_BOOK:
2719                 case TV_MUSIC_BOOK:
2720                 case TV_HEX_BOOK:
2721                         break;
2722                 default:
2723                         return FALSE;
2724                 }
2725
2726                 break;
2727         }
2728         }
2729
2730         if (object_value(o_ptr) <= 0) return FALSE;
2731         return TRUE;
2732 }
2733
2734
2735 /*!
2736  * @brief 現在の町の指定された店舗のアイテムを整理する /
2737  * Combine and reorder items in store.
2738  * @param store_num 店舗ID
2739  * @return 実際に整理が行われたならばTRUEを返す。
2740  */
2741 bool combine_and_reorder_home(int store_num)
2742 {
2743         store_type *old_st_ptr = st_ptr;
2744         st_ptr = &town_info[1].store[store_num];
2745         bool flag = FALSE;
2746         if (store_num != STORE_HOME)
2747         {
2748                 stack_force_notes = FALSE;
2749                 stack_force_costs = FALSE;
2750         }
2751
2752         bool combined = TRUE;
2753         while (combined)
2754         {
2755                 combined = FALSE;
2756                 for (int i = st_ptr->stock_num - 1; i > 0; i--)
2757                 {
2758                         object_type *o_ptr;
2759                         o_ptr = &st_ptr->stock[i];
2760                         if (!o_ptr->k_idx) continue;
2761                         for (int j = 0; j < i; j++)
2762                         {
2763                                 object_type *j_ptr;
2764                                 j_ptr = &st_ptr->stock[j];
2765                                 if (!j_ptr->k_idx) continue;
2766
2767                                 /*
2768                                  * Get maximum number of the stack if these
2769                                  * are similar, get zero otherwise.
2770                                  */
2771                                 int max_num = object_similar_part(j_ptr, o_ptr);
2772                                 if (max_num == 0 || j_ptr->number >= max_num) continue;
2773
2774                                 if (o_ptr->number + j_ptr->number <= max_num)
2775                                 {
2776                                         object_absorb(j_ptr, o_ptr);
2777                                         st_ptr->stock_num--;
2778                                         int k;
2779                                         for (k = i; k < st_ptr->stock_num; k++)
2780                                         {
2781                                                 st_ptr->stock[k] = st_ptr->stock[k + 1];
2782                                         }
2783
2784                                         object_wipe(&st_ptr->stock[k]);
2785                                         combined = TRUE;
2786                                         break;
2787                                 }
2788
2789                                 ITEM_NUMBER old_num = o_ptr->number;
2790                                 ITEM_NUMBER remain = j_ptr->number + o_ptr->number - max_num;
2791                                 object_absorb(j_ptr, o_ptr);
2792                                 o_ptr->number = remain;
2793                                 if (o_ptr->tval == TV_ROD)
2794                                 {
2795                                         o_ptr->pval = o_ptr->pval * remain / old_num;
2796                                         o_ptr->timeout = o_ptr->timeout * remain / old_num;
2797                                 }
2798                                 else if (o_ptr->tval == TV_WAND)
2799                                 {
2800                                         o_ptr->pval = o_ptr->pval * remain / old_num;
2801                                 }
2802
2803                                 combined = TRUE;
2804                                 break;
2805                         }
2806                 }
2807
2808                 flag |= combined;
2809         }
2810
2811         for (int i = 0; i < st_ptr->stock_num; i++)
2812         {
2813                 object_type *o_ptr;
2814                 o_ptr = &st_ptr->stock[i];
2815                 if (!o_ptr->k_idx) continue;
2816
2817                 s32b o_value = object_value(o_ptr);
2818                 int j;
2819                 for (j = 0; j < st_ptr->stock_num; j++)
2820                 {
2821                         if (object_sort_comp(o_ptr, o_value, &st_ptr->stock[j])) break;
2822                 }
2823
2824                 if (j >= i) continue;
2825
2826                 flag = TRUE;
2827                 object_type *j_ptr;
2828                 object_type forge;
2829                 j_ptr = &forge;
2830                 object_copy(j_ptr, &st_ptr->stock[i]);
2831                 for (int k = i; k > j; k--)
2832                 {
2833                         object_copy(&st_ptr->stock[k], &st_ptr->stock[k - 1]);
2834                 }
2835
2836                 object_copy(&st_ptr->stock[j], j_ptr);
2837         }
2838
2839         st_ptr = old_st_ptr;
2840         bool old_stack_force_notes = stack_force_notes;
2841         bool old_stack_force_costs = stack_force_costs;
2842         if (store_num != STORE_HOME)
2843         {
2844                 stack_force_notes = old_stack_force_notes;
2845                 stack_force_costs = old_stack_force_costs;
2846         }
2847
2848         return flag;
2849 }
2850
2851
2852 /*!
2853  * @brief 我が家にオブジェクトを加える /
2854  * Add the item "o_ptr" to the inventory of the "Home"
2855  * @param o_ptr 加えたいオブジェクトの構造体参照ポインタ
2856  * @return 収めた先のID
2857  * @details
2858  * <pre>
2859  * In all cases, return the slot (or -1) where the object was placed
2860  * Note that this is a hacked up version of "inven_carry()".
2861  * Also note that it may not correctly "adapt" to "knowledge" bacoming
2862  * known, the player may have to pick stuff up and drop it again.
2863  * </pre>
2864  */
2865 static int home_carry(player_type *player_ptr, object_type *o_ptr)
2866 {
2867         if (cur_store_num != STORE_HOME)
2868         {
2869                 stack_force_notes = FALSE;
2870                 stack_force_costs = FALSE;
2871         }
2872
2873         bool old_stack_force_notes = stack_force_notes;
2874         bool old_stack_force_costs = stack_force_costs;
2875         for (int slot = 0; slot < st_ptr->stock_num; slot++)
2876         {
2877                 object_type *j_ptr;
2878                 j_ptr = &st_ptr->stock[slot];
2879                 if (object_similar(j_ptr, o_ptr))
2880                 {
2881                         object_absorb(j_ptr, o_ptr);
2882                         if (cur_store_num != STORE_HOME)
2883                         {
2884                                 stack_force_notes = old_stack_force_notes;
2885                                 stack_force_costs = old_stack_force_costs;
2886                         }
2887
2888                         return (slot);
2889                 }
2890         }
2891
2892         if (cur_store_num != STORE_HOME)
2893         {
2894                 stack_force_notes = old_stack_force_notes;
2895                 stack_force_costs = old_stack_force_costs;
2896         }
2897
2898         /* No space? */
2899         /*
2900          * 隠し機能: オプション powerup_home が設定されていると
2901          *           我が家が 20 ページまで使える
2902          */
2903         if ((cur_store_num != STORE_HOME) || (powerup_home == TRUE))
2904         {
2905                 if (st_ptr->stock_num >= st_ptr->stock_size)
2906                 {
2907                         return -1;
2908                 }
2909         }
2910         else
2911         {
2912                 if (st_ptr->stock_num >= ((st_ptr->stock_size) / 10))
2913                 {
2914                         return -1;
2915                 }
2916         }
2917
2918         PRICE value = object_value(o_ptr);
2919         int slot;
2920         for (slot = 0; slot < st_ptr->stock_num; slot++)
2921         {
2922                 if (object_sort_comp(o_ptr, value, &st_ptr->stock[slot])) break;
2923         }
2924
2925         for (int i = st_ptr->stock_num; i > slot; i--)
2926         {
2927                 st_ptr->stock[i] = st_ptr->stock[i - 1];
2928         }
2929
2930         st_ptr->stock_num++;
2931         st_ptr->stock[slot] = *o_ptr;
2932         chg_virtue(player_ptr, V_SACRIFICE, -1);
2933         (void)combine_and_reorder_home(cur_store_num);
2934         return slot;
2935 }
2936
2937
2938 /*!
2939  * @brief 店舗にオブジェクトを加える /
2940  * Add the item "o_ptr" to a real stores inventory.
2941  * @param o_ptr 加えたいオブジェクトの構造体参照ポインタ
2942  * @return 収めた先のID
2943  * @details
2944  * <pre>
2945  * In all cases, return the slot (or -1) where the object was placed
2946  * Note that this is a hacked up version of "inven_carry()".
2947  * Also note that it may not correctly "adapt" to "knowledge" bacoming
2948  * known, the player may have to pick stuff up and drop it again.
2949  * </pre>
2950  */
2951 static int store_carry(object_type *o_ptr)
2952 {
2953         PRICE value = object_value(o_ptr);
2954         if (value <= 0) return -1;
2955         o_ptr->ident |= IDENT_FULL_KNOWN;
2956         o_ptr->inscription = 0;
2957         o_ptr->feeling = FEEL_NONE;
2958         int slot;
2959         for (slot = 0; slot < st_ptr->stock_num; slot++)
2960         {
2961                 object_type *j_ptr;
2962                 j_ptr = &st_ptr->stock[slot];
2963                 if (store_object_similar(j_ptr, o_ptr))
2964                 {
2965                         store_object_absorb(j_ptr, o_ptr);
2966                         return slot;
2967                 }
2968         }
2969
2970         if (st_ptr->stock_num >= st_ptr->stock_size) return -1;
2971
2972         for (slot = 0; slot < st_ptr->stock_num; slot++)
2973         {
2974                 object_type *j_ptr;
2975                 j_ptr = &st_ptr->stock[slot];
2976                 if (o_ptr->tval > j_ptr->tval) break;
2977                 if (o_ptr->tval < j_ptr->tval) continue;
2978                 if (o_ptr->sval < j_ptr->sval) break;
2979                 if (o_ptr->sval > j_ptr->sval) continue;
2980                 if (o_ptr->tval == TV_ROD)
2981                 {
2982                         if (o_ptr->pval < j_ptr->pval) break;
2983                         if (o_ptr->pval > j_ptr->pval) continue;
2984                 }
2985
2986                 PRICE j_value = object_value(j_ptr);
2987                 if (value > j_value) break;
2988                 if (value < j_value) continue;
2989         }
2990
2991         for (int i = st_ptr->stock_num; i > slot; i--)
2992         {
2993                 st_ptr->stock[i] = st_ptr->stock[i - 1];
2994         }
2995
2996         st_ptr->stock_num++;
2997         st_ptr->stock[slot] = *o_ptr;
2998         return slot;
2999 }
3000
3001
3002 /*!
3003  * @brief 店舗のオブジェクト数を増やす /
3004  * Add the item "o_ptr" to a real stores inventory.
3005  * @param item 増やしたいアイテムのID
3006  * @param num 増やしたい数
3007  * @return なし
3008  * @details
3009  * <pre>
3010  * Increase, by a given amount, the number of a certain item
3011  * in a certain store.  This can result in zero items.
3012  * </pre>
3013  * @todo numは本来ITEM_NUMBER型にしたい。
3014  */
3015 static void store_item_increase(INVENTORY_IDX item, int num)
3016 {
3017         object_type *o_ptr;
3018         o_ptr = &st_ptr->stock[item];
3019         int cnt = o_ptr->number + num;
3020         if (cnt > 255) cnt = 255;
3021         else if (cnt < 0) cnt = 0;
3022
3023         num = cnt - o_ptr->number;
3024         o_ptr->number += (ITEM_NUMBER)num;
3025 }
3026
3027
3028 /*!
3029  * @brief 店舗のオブジェクト数を削除する /
3030  * Remove a slot if it is empty
3031  * @param item 削除したいアイテムのID
3032  * @return なし
3033  */
3034 static void store_item_optimize(INVENTORY_IDX item)
3035 {
3036         object_type *o_ptr;
3037         o_ptr = &st_ptr->stock[item];
3038         if (!o_ptr->k_idx) return;
3039         if (o_ptr->number) return;
3040
3041         st_ptr->stock_num--;
3042         for (int j = item; j < st_ptr->stock_num; j++)
3043         {
3044                 st_ptr->stock[j] = st_ptr->stock[j + 1];
3045         }
3046
3047         object_wipe(&st_ptr->stock[st_ptr->stock_num]);
3048 }
3049
3050
3051 /*!
3052  * @brief ブラックマーケット用の無価値品の排除判定 /
3053  * This function will keep 'crap' out of the black market.
3054  * @param player_ptr プレーヤーへの参照ポインタ
3055  * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
3056  * @return ブラックマーケットにとって無価値な品ならばTRUEを返す
3057  * @details
3058  * <pre>
3059  * Crap is defined as any item that is "available" elsewhere
3060  * Based on a suggestion by "Lee Vogt" <lvogt@cig.mcel.mot.com>
3061  * </pre>
3062  */
3063 static bool black_market_crap(player_type *player_ptr, object_type *o_ptr)
3064 {
3065         if (object_is_ego(o_ptr)) return FALSE;
3066
3067         if (o_ptr->to_a > 0) return FALSE;
3068         if (o_ptr->to_h > 0) return FALSE;
3069         if (o_ptr->to_d > 0) return FALSE;
3070
3071         for (int i = 0; i < MAX_STORES; i++)
3072         {
3073                 if (i == STORE_HOME) continue;
3074                 if (i == STORE_MUSEUM) continue;
3075
3076                 for (int j = 0; j < town_info[player_ptr->town_num].store[i].stock_num; j++)
3077                 {
3078                         object_type *j_ptr = &town_info[player_ptr->town_num].store[i].stock[j];
3079                         if (o_ptr->k_idx == j_ptr->k_idx) return TRUE;
3080                 }
3081         }
3082
3083         return FALSE;
3084 }
3085
3086
3087 /*!
3088  * @brief 店舗の品揃え変化のためにアイテムを削除する /
3089  * Attempt to delete (some of) a random item from the store
3090  * @return なし
3091  * @details
3092  * <pre>
3093  * Hack -- we attempt to "maintain" piles of items when possible.
3094  * </pre>
3095  */
3096 static void store_delete(void)
3097 {
3098         INVENTORY_IDX what = (INVENTORY_IDX)randint0(st_ptr->stock_num);
3099         int num = st_ptr->stock[what].number;
3100         if (randint0(100) < 50) num = (num + 1) / 2;
3101         if (randint0(100) < 50) num = 1;
3102         if ((st_ptr->stock[what].tval == TV_ROD) || (st_ptr->stock[what].tval == TV_WAND))
3103         {
3104                 st_ptr->stock[what].pval -= num * st_ptr->stock[what].pval / st_ptr->stock[what].number;
3105         }
3106
3107         store_item_increase(what, -num);
3108         store_item_optimize(what);
3109 }
3110
3111
3112 /*!
3113  * @brief 店舗の品揃え変化のためにアイテムを追加する /
3114  * Creates a random item and gives it to a store
3115  * @param player_ptr プレーヤーへの参照ポインタ
3116  * @return なし
3117  * @details
3118  * <pre>
3119  * This algorithm needs to be rethought.  A lot.
3120  * Currently, "normal" stores use a pre-built array.
3121  * Note -- the "level" given to "obj_get_num()" is a "favored"
3122  * level, that is, there is a much higher chance of getting
3123  * items with a level approaching that of the given level...
3124  * Should we check for "permission" to have the given item?
3125  * </pre>
3126  */
3127 static void store_create(player_type *player_ptr)
3128 {
3129         if (st_ptr->stock_num >= st_ptr->stock_size) return;
3130
3131         for (int tries = 0; tries < 4; tries++)
3132         {
3133                 OBJECT_IDX i;
3134                 DEPTH level;
3135                 if (cur_store_num == STORE_BLACK)
3136                 {
3137                         /* Pick a level for object/magic */
3138                         level = 25 + randint0(25);
3139
3140                         /* Random item (usually of given level) */
3141                         i = get_obj_num(player_ptr, level, 0x00000000);
3142
3143                         /* Handle failure */
3144                         if (i == 0) continue;
3145                 }
3146                 else
3147                 {
3148                         i = st_ptr->table[randint0(st_ptr->table_num)];
3149                         level = rand_range(1, STORE_OBJ_LEVEL);
3150                 }
3151
3152                 object_type forge;
3153                 object_type *q_ptr;
3154                 q_ptr = &forge;
3155                 object_prep(q_ptr, i);
3156                 apply_magic(player_ptr, q_ptr, level, AM_NO_FIXED_ART);
3157                 if (!store_will_buy(q_ptr)) continue;
3158
3159                 if (q_ptr->tval == TV_LITE)
3160                 {
3161                         if (q_ptr->sval == SV_LITE_TORCH) q_ptr->xtra4 = FUEL_TORCH / 2;
3162                         if (q_ptr->sval == SV_LITE_LANTERN) q_ptr->xtra4 = FUEL_LAMP / 2;
3163                 }
3164
3165                 object_known(q_ptr);
3166                 q_ptr->ident |= IDENT_STORE;
3167                 if (q_ptr->tval == TV_CHEST) continue;
3168
3169                 if (cur_store_num == STORE_BLACK)
3170                 {
3171                         if (black_market_crap(player_ptr, q_ptr)) continue;
3172                         if (object_value(q_ptr) < 10) continue;
3173                 }
3174                 else
3175                 {
3176                         if (object_value(q_ptr) <= 0) continue;
3177                 }
3178
3179                 mass_produce(q_ptr);
3180                 (void)store_carry(q_ptr);
3181                 break;
3182         }
3183 }
3184
3185
3186 /*!
3187  * @brief 店舗の割引対象外にするかどうかを判定 /
3188  * Eliminate need to bargain if player has haggled well in the past
3189  * @param minprice アイテムの最低販売価格
3190  * @return 割引を禁止するならTRUEを返す。
3191  */
3192 static bool noneedtobargain(PRICE minprice)
3193 {
3194         PRICE good = st_ptr->good_buy;
3195         PRICE bad = st_ptr->bad_buy;
3196         if (minprice < 10L) return TRUE;
3197         if (good == MAX_SHORT) return TRUE;
3198         if (good > ((3 * bad) + (5 + (minprice / 50)))) return TRUE;
3199
3200         return FALSE;
3201 }
3202
3203
3204 /*!
3205  * @brief 店主の持つプレイヤーに対する売買の良し悪し経験を記憶する /
3206  * Update the bargain info
3207  * @param price 実際の取引価格
3208  * @param minprice 店主の提示した価格
3209  * @param num 売買数
3210  * @return なし
3211  */
3212 static void updatebargain(PRICE price, PRICE minprice, int num)
3213 {
3214         if (!manual_haggle) return;
3215         if ((minprice / num) < 10L) return;
3216         if (price == minprice)
3217         {
3218                 if (st_ptr->good_buy < MAX_SHORT)
3219                 {
3220                         st_ptr->good_buy++;
3221                 }
3222         }
3223         else
3224         {
3225                 if (st_ptr->bad_buy < MAX_SHORT)
3226                 {
3227                         st_ptr->bad_buy++;
3228                 }
3229         }
3230 }
3231
3232
3233 /*!
3234  * @brief 店の商品リストを再表示する /
3235  * Re-displays a single store entry
3236  * @param player_ptr プレーヤーへの参照ポインタ
3237  * @param pos 表示行
3238  * @return なし
3239  */
3240 static void display_entry(player_type *player_ptr, int pos)
3241 {
3242         object_type *o_ptr;
3243         o_ptr = &st_ptr->stock[pos];
3244         int i = (pos % store_bottom);
3245
3246         /* Label it, clear the line --(-- */
3247         char out_val[160];
3248         (void)sprintf(out_val, "%c) ", ((i > 25) ? toupper(I2A(i - 26)) : I2A(i)));
3249         prt(out_val, i + 6, 0);
3250
3251         int cur_col = 3;
3252         if (show_item_graph)
3253         {
3254                 TERM_COLOR a = object_attr(o_ptr);
3255                 SYMBOL_CODE c = object_char(o_ptr);
3256
3257                 Term_queue_bigchar(cur_col, i + 6, a, c, 0, 0);
3258                 if (use_bigtile) cur_col++;
3259
3260                 cur_col += 2;
3261         }
3262
3263         /* Describe an item in the home */
3264         int maxwid = 75;
3265         if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
3266         {
3267                 maxwid = 75;
3268                 if (show_weights) maxwid -= 10;
3269
3270                 GAME_TEXT o_name[MAX_NLEN];
3271                 object_desc(player_ptr, o_name, o_ptr, 0);
3272                 o_name[maxwid] = '\0';
3273                 c_put_str(tval_to_attr[o_ptr->tval], o_name, i + 6, cur_col);
3274                 if (show_weights)
3275                 {
3276                         WEIGHT wgt = o_ptr->weight;
3277 #ifdef JP
3278                         sprintf(out_val, "%3d.%1d kg", lbtokg1(wgt), lbtokg2(wgt));
3279                         put_str(out_val, i + 6, 67);
3280 #else
3281                         (void)sprintf(out_val, "%3d.%d lb", wgt / 10, wgt % 10);
3282                         put_str(out_val, i + 6, 68);
3283 #endif
3284
3285                 }
3286
3287                 return;
3288         }
3289
3290         maxwid = 65;
3291         if (show_weights) maxwid -= 7;
3292
3293         GAME_TEXT o_name[MAX_NLEN];
3294         object_desc(player_ptr, o_name, o_ptr, 0);
3295         o_name[maxwid] = '\0';
3296         c_put_str(tval_to_attr[o_ptr->tval], o_name, i + 6, cur_col);
3297
3298         if (show_weights)
3299         {
3300                 int wgt = o_ptr->weight;
3301 #ifdef JP
3302                 sprintf(out_val, "%3d.%1d", lbtokg1(wgt), lbtokg2(wgt));
3303                 put_str(out_val, i + 6, 60);
3304 #else
3305                 (void)sprintf(out_val, "%3d.%d", wgt / 10, wgt % 10);
3306                 put_str(out_val, i + 6, 61);
3307 #endif
3308
3309         }
3310
3311         s32b x;
3312         if (o_ptr->ident & (IDENT_FIXED))
3313         {
3314                 x = price_item(player_ptr, o_ptr, ot_ptr->min_inflate, FALSE);
3315 #ifdef JP
3316                 (void)sprintf(out_val, "%9ld固", (long)x);
3317 #else
3318                 (void)sprintf(out_val, "%9ld F", (long)x);
3319 #endif
3320                 put_str(out_val, i + 6, 68);
3321                 return;
3322         }
3323
3324         if (!manual_haggle)
3325         {
3326                 x = price_item(player_ptr, o_ptr, ot_ptr->min_inflate, FALSE);
3327                 if (!noneedtobargain(x)) x += x / 10;
3328
3329                 (void)sprintf(out_val, "%9ld  ", (long)x);
3330                 put_str(out_val, i + 6, 68);
3331                 return;
3332         }
3333
3334         x = price_item(player_ptr, o_ptr, ot_ptr->max_inflate, FALSE);
3335         (void)sprintf(out_val, "%9ld  ", (long)x);
3336         put_str(out_val, i + 6, 68);
3337 }
3338
3339
3340 /*!
3341  * @brief 店の商品リストを表示する /
3342  * Displays a store's inventory -RAK-
3343  * @param player_ptr プレーヤーへの参照ポインタ
3344  * @return なし
3345  * @details
3346  * All prices are listed as "per individual object".  -BEN-
3347  */
3348 static void display_store_inventory(player_type *player_ptr)
3349 {
3350         int k;
3351         for (k = 0; k < store_bottom; k++)
3352         {
3353                 if (store_top + k >= st_ptr->stock_num) break;
3354
3355                 display_entry(player_ptr, store_top + k);
3356         }
3357
3358         for (int i = k; i < store_bottom + 1; i++)
3359                 prt("", i + 6, 0);
3360
3361 #ifdef JP
3362         put_str("          ", 5, 20);
3363 #else
3364         put_str("        ", 5, 22);
3365 #endif
3366
3367         if (st_ptr->stock_num > store_bottom)
3368         {
3369                 prt(_("-続く-", "-more-"), k + 6, 3);
3370                 put_str(format(_("(%dページ)  ", "(Page %d)  "), store_top / store_bottom + 1), 5, _(20, 22));
3371         }
3372
3373         if (cur_store_num == STORE_HOME || cur_store_num == STORE_MUSEUM)
3374         {
3375                 k = st_ptr->stock_size;
3376                 if (cur_store_num == STORE_HOME && !powerup_home) k /= 10;
3377 #ifdef JP
3378                 put_str(format("アイテム数:  %4d/%4d", st_ptr->stock_num, k), 19 + xtra_stock, 27);
3379 #else
3380                 put_str(format("Objects:  %4d/%4d", st_ptr->stock_num, k), 19 + xtra_stock, 30);
3381 #endif
3382         }
3383 }
3384
3385
3386 /*!
3387  * @brief プレイヤーの所持金を表示する /
3388  * Displays players gold                                        -RAK-
3389  * @param player_ptr プレーヤーへの参照ポインタ
3390  * @return なし
3391  * @details
3392  */
3393 static void store_prt_gold(player_type *player_ptr)
3394 {
3395         prt(_("手持ちのお金: ", "Gold Remaining: "), 19 + xtra_stock, 53);
3396         char out_val[64];
3397         sprintf(out_val, "%9ld", (long)player_ptr->au);
3398         prt(out_val, 19 + xtra_stock, 68);
3399 }
3400
3401
3402 /*!
3403  * @brief 店舗情報全体を表示するメインルーチン /
3404  * Displays store (after clearing screen)               -RAK-
3405  * @param player_ptr プレーヤーへの参照ポインタ
3406  * @return なし
3407  * @details
3408  */
3409 static void display_store(player_type *player_ptr)
3410 {
3411         Term_clear();
3412         if (cur_store_num == STORE_HOME)
3413         {
3414                 put_str(_("我が家", "Your Home"), 3, 31);
3415                 put_str(_("アイテムの一覧", "Item Description"), 5, 4);
3416                 if (show_weights)
3417                 {
3418                         put_str(_("  重さ", "Weight"), 5, 70);
3419                 }
3420
3421                 store_prt_gold(player_ptr);
3422                 display_store_inventory(player_ptr);
3423                 return;
3424         }
3425
3426         if (cur_store_num == STORE_MUSEUM)
3427         {
3428                 put_str(_("博物館", "Museum"), 3, 31);
3429                 put_str(_("アイテムの一覧", "Item Description"), 5, 4);
3430                 if (show_weights)
3431                 {
3432                         put_str(_("  重さ", "Weight"), 5, 70);
3433                 }
3434
3435                 store_prt_gold(player_ptr);
3436                 display_store_inventory(player_ptr);
3437                 return;
3438         }
3439
3440         concptr store_name = (f_name + f_info[cur_store_feat].name);
3441         concptr owner_name = (ot_ptr->owner_name);
3442         concptr race_name = race_info[ot_ptr->owner_race].title;
3443         char buf[80];
3444         sprintf(buf, "%s (%s)", owner_name, race_name);
3445         put_str(buf, 3, 10);
3446
3447         sprintf(buf, "%s (%ld)", store_name, (long)(ot_ptr->max_cost));
3448         prt(buf, 3, 50);
3449
3450         put_str(_("商品の一覧", "Item Description"), 5, 5);
3451         if (show_weights)
3452         {
3453                 put_str(_("  重さ", "Weight"), 5, 60);
3454         }
3455
3456         put_str(_(" 価格", "Price"), 5, 72);
3457         store_prt_gold(player_ptr);
3458         display_store_inventory(player_ptr);
3459 }
3460
3461
3462 /*!
3463  * @brief 店舗からアイテムを選択する /
3464  * Get the ID of a store item and return its value      -RAK-
3465  * @param com_val 選択IDを返す参照ポインタ
3466  * @param pmt メッセージキャプション
3467  * @param i 選択範囲の最小値
3468  * @param j 選択範囲の最大値
3469  * @return 実際に選択したらTRUE、キャンセルしたらFALSE
3470  */
3471 static int get_stock(COMMAND_CODE *com_val, concptr pmt, int i, int j)
3472 {
3473         if (repeat_pull(com_val) && (*com_val >= i) && (*com_val <= j))
3474         {
3475                 return TRUE;
3476         }
3477
3478         msg_print(NULL);
3479         *com_val = (-1);
3480         char lo = I2A(i);
3481         char hi = (j > 25) ? toupper(I2A(j - 26)) : I2A(j);
3482         char out_val[160];
3483 #ifdef JP
3484         (void)sprintf(out_val, "(%s:%c-%c, ESCで中断) %s",
3485                 (((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) ? "アイテム" : "商品"),
3486                 lo, hi, pmt);
3487 #else
3488         (void)sprintf(out_val, "(Items %c-%c, ESC to exit) %s",
3489                 lo, hi, pmt);
3490 #endif
3491
3492         char command;
3493         while (TRUE)
3494         {
3495                 if (!get_com(out_val, &command, FALSE)) break;
3496
3497                 COMMAND_CODE k;
3498                 if (islower(command))
3499                         k = A2I(command);
3500                 else if (isupper(command))
3501                         k = A2I(tolower(command)) + 26;
3502                 else
3503                         k = -1;
3504
3505                 if ((k >= i) && (k <= j))
3506                 {
3507                         *com_val = k;
3508                         break;
3509                 }
3510
3511                 bell();
3512         }
3513
3514         prt("", 0, 0);
3515         if (command == ESCAPE) return FALSE;
3516
3517         repeat_push(*com_val);
3518         return TRUE;
3519 }
3520
3521
3522 /*!
3523  * @brief 店主の不満度を増やし、プレイヤーを締め出す判定と処理を行う /
3524  * Increase the insult counter and get angry if too many -RAK-
3525  * @return プレイヤーを締め出す場合TRUEを返す
3526  */
3527 static int increase_insults(void)
3528 {
3529         st_ptr->insult_cur++;
3530         if (st_ptr->insult_cur <= ot_ptr->insult_max) return FALSE;
3531
3532         say_comment_4();
3533
3534         st_ptr->insult_cur = 0;
3535         st_ptr->good_buy = 0;
3536         st_ptr->bad_buy = 0;
3537         st_ptr->store_open = current_world_ptr->game_turn + TURNS_PER_TICK * TOWN_DAWN / 8 + randint1(TURNS_PER_TICK*TOWN_DAWN / 8);
3538
3539         return TRUE;
3540 }
3541
3542
3543 /*!
3544  * @brief 店主の不満度を減らす /
3545  * Decrease insults                             -RAK-
3546  * @return プレイヤーを締め出す場合TRUEを返す
3547  */
3548 static void decrease_insults(void)
3549 {
3550         if (st_ptr->insult_cur) st_ptr->insult_cur--;
3551 }
3552
3553
3554 /*!
3555  * @brief 店主の不満度が増えた場合のみのメッセージを表示する /
3556  * Have insulted while haggling                         -RAK-
3557  * @return プレイヤーを締め出す場合TRUEを返す
3558  */
3559 static int haggle_insults(void)
3560 {
3561         if (increase_insults()) return TRUE;
3562
3563         say_comment_5();
3564         return FALSE;
3565 }
3566
3567 /*
3568  * Mega-Hack -- Enable "increments"
3569  */
3570 static bool allow_inc = FALSE;
3571
3572 /*
3573  * Mega-Hack -- Last "increment" during haggling
3574  */
3575 static s32b last_inc = 0L;
3576
3577 /*!
3578  * @brief 交渉価格を確認と認証の是非を行う /
3579  * Get a haggle
3580  * @param pmt メッセージ
3581  * @param poffer 別途価格提示をした場合の値を返す参照ポインタ
3582  * @param price 現在の交渉価格
3583  * @param final 最終確定価格ならばTRUE
3584  * @return プレイヤーを締め出す場合TRUEを返す
3585  */
3586 static int get_haggle(concptr pmt, s32b *poffer, PRICE price, int final)
3587 {
3588         GAME_TEXT buf[128];
3589         if (!allow_inc) last_inc = 0L;
3590
3591         if (final)
3592         {
3593                 sprintf(buf, _("%s [承諾] ", "%s [accept] "), pmt);
3594         }
3595         else if (last_inc < 0)
3596         {
3597                 sprintf(buf, _("%s [-$%ld] ", "%s [-%ld] "), pmt, (long)(ABS(last_inc)));
3598         }
3599         else if (last_inc > 0)
3600         {
3601                 sprintf(buf, _("%s [+$%ld] ", "%s [+%ld] "), pmt, (long)(ABS(last_inc)));
3602         }
3603         else
3604         {
3605                 sprintf(buf, "%s ", pmt);
3606         }
3607
3608         msg_print(NULL);
3609         GAME_TEXT out_val[160];
3610         while (TRUE)
3611         {
3612                 bool res;
3613                 prt(buf, 0, 0);
3614                 strcpy(out_val, "");
3615
3616                 /*
3617                  * Ask the user for a response.
3618                  * Don't allow to use numpad as cursor key.
3619                  */
3620                 res = askfor_aux(out_val, 32, FALSE);
3621                 prt("", 0, 0);
3622                 if (!res) return FALSE;
3623
3624                 concptr p;
3625                 for (p = out_val; *p == ' '; p++) /* loop */;
3626
3627                 if (*p == '\0')
3628                 {
3629                         if (final)
3630                         {
3631                                 *poffer = price;
3632                                 last_inc = 0L;
3633                                 break;
3634                         }
3635
3636                         if (allow_inc && last_inc)
3637                         {
3638                                 *poffer += last_inc;
3639                                 break;
3640                         }
3641
3642                         msg_print(_("値がおかしいです。", "Invalid response."));
3643                         msg_print(NULL);
3644                 }
3645
3646                 s32b i = atol(p);
3647                 if ((*p == '+' || *p == '-'))
3648                 {
3649                         if (allow_inc)
3650                         {
3651                                 *poffer += i;
3652                                 last_inc = i;
3653                                 break;
3654                         }
3655                 }
3656                 else
3657                 {
3658                         *poffer = i;
3659                         last_inc = 0L;
3660                         break;
3661                 }
3662         }
3663
3664         return TRUE;
3665 }
3666
3667
3668 /*!
3669  * @brief 店主がプレイヤーからの交渉価格を判断する /
3670  * Receive an offer (from the player)
3671  * @param pmt メッセージ
3672  * @param poffer 店主からの交渉価格を返す参照ポインタ
3673  * @param last_offer 現在の交渉価格
3674  * @param factor 店主の価格基準倍率
3675  * @param price アイテムの実価値
3676  * @param final 最終価格確定ならばTRUE
3677  * @return プレイヤーの価格に対して不服ならばTRUEを返す /
3678  * Return TRUE if offer is NOT okay
3679  */
3680 static bool receive_offer(concptr pmt, s32b *poffer, s32b last_offer, int factor, PRICE price, int final)
3681 {
3682         while (TRUE)
3683         {
3684                 if (!get_haggle(pmt, poffer, price, final)) return TRUE;
3685                 if (((*poffer) * factor) >= (last_offer * factor)) break;
3686                 if (haggle_insults()) return TRUE;
3687
3688                 (*poffer) = last_offer;
3689         }
3690
3691         return FALSE;
3692 }
3693
3694
3695 /*!
3696  * @brief プレイヤーが購入する時の値切り処理メインルーチン /
3697  * Haggling routine                             -RAK-
3698  * @param player_ptr プレーヤーへの参照ポインタ
3699  * @param o_ptr オブジェクトの構造体参照ポインタ
3700  * @param price 最終価格を返す参照ポインタ
3701  * @return プレイヤーの価格に対して店主が不服ならばTRUEを返す /
3702  * Return TRUE if purchase is NOT successful
3703  */
3704 static bool purchase_haggle(player_type *player_ptr, object_type *o_ptr, s32b *price)
3705 {
3706         s32b cur_ask = price_item(player_ptr, o_ptr, ot_ptr->max_inflate, FALSE);
3707         s32b final_ask = price_item(player_ptr, o_ptr, ot_ptr->min_inflate, FALSE);
3708         int noneed = noneedtobargain(final_ask);
3709         bool final = FALSE;
3710         concptr pmt = _("提示価格", "Asking");
3711         if (noneed || !manual_haggle)
3712         {
3713                 if (noneed)
3714                 {
3715                         msg_print(_("結局この金額にまとまった。", "You eventually agree upon the price."));
3716                         msg_print(NULL);
3717                 }
3718                 else
3719                 {
3720                         msg_print(_("すんなりとこの金額にまとまった。", "You quickly agree upon the price."));
3721                         msg_print(NULL);
3722                         final_ask += final_ask / 10;
3723                 }
3724
3725                 cur_ask = final_ask;
3726                 pmt = _("最終提示価格", "Final Offer");
3727                 final = TRUE;
3728         }
3729
3730         cur_ask *= o_ptr->number;
3731         final_ask *= o_ptr->number;
3732         s32b min_per = ot_ptr->haggle_per;
3733         s32b max_per = min_per * 3;
3734         s32b last_offer = object_value(o_ptr) * o_ptr->number;
3735         last_offer = last_offer * (200 - (int)(ot_ptr->max_inflate)) / 100L;
3736         if (last_offer <= 0) last_offer = 1;
3737
3738         s32b offer = 0;
3739         allow_inc = FALSE;
3740         bool flag = FALSE;
3741         int annoyed = 0;
3742         bool cancel = FALSE;
3743         *price = 0;
3744         while (!flag)
3745         {
3746                 bool loop_flag = TRUE;
3747
3748                 while (!flag && loop_flag)
3749                 {
3750                         char out_val[160];
3751                         (void)sprintf(out_val, "%s :  %ld", pmt, (long)cur_ask);
3752                         put_str(out_val, 1, 0);
3753                         cancel = receive_offer(_("提示する金額? ", "What do you offer? "), &offer, last_offer, 1, cur_ask, final);
3754                         if (cancel)
3755                         {
3756                                 flag = TRUE;
3757                         }
3758                         else if (offer > cur_ask)
3759                         {
3760                                 say_comment_6();
3761                                 offer = last_offer;
3762                         }
3763                         else if (offer == cur_ask)
3764                         {
3765                                 flag = TRUE;
3766                                 *price = offer;
3767                         }
3768                         else
3769                         {
3770                                 loop_flag = FALSE;
3771                         }
3772                 }
3773
3774                 if (flag) continue;
3775
3776                 s32b x1 = 100 * (offer - last_offer) / (cur_ask - last_offer);
3777                 if (x1 < min_per)
3778                 {
3779                         if (haggle_insults())
3780                         {
3781                                 flag = TRUE;
3782                                 cancel = TRUE;
3783                         }
3784                 }
3785                 else if (x1 > max_per)
3786                 {
3787                         x1 = x1 * 3 / 4;
3788                         if (x1 < max_per) x1 = max_per;
3789                 }
3790
3791                 s32b x2 = rand_range(x1 - 2, x1 + 2);
3792                 s32b x3 = ((cur_ask - offer) * x2 / 100L) + 1;
3793                 if (x3 < 0) x3 = 0;
3794                 cur_ask -= x3;
3795
3796                 if (cur_ask < final_ask)
3797                 {
3798                         final = TRUE;
3799                         cur_ask = final_ask;
3800                         pmt = _("最終提示価格", "What do you offer? ");
3801                         annoyed++;
3802                         if (annoyed > 3)
3803                         {
3804                                 (void)(increase_insults());
3805                                 cancel = TRUE;
3806                                 flag = TRUE;
3807                         }
3808                 }
3809                 else if (offer >= cur_ask)
3810                 {
3811                         flag = TRUE;
3812                         *price = offer;
3813                 }
3814
3815                 last_offer = offer;
3816                 allow_inc = TRUE;
3817                 prt("", 1, 0);
3818                 char out_val[160];
3819                 (void)sprintf(out_val, _("前回の提示金額: $%ld", "Your last offer: %ld"), (long)last_offer);
3820                 put_str(out_val, 1, 39);
3821                 say_comment_2(cur_ask, annoyed);
3822         }
3823
3824         if (cancel) return TRUE;
3825
3826         updatebargain(*price, final_ask, o_ptr->number);
3827         return FALSE;
3828 }
3829
3830
3831 /*!
3832  * @brief プレイヤーが売却する時の値切り処理メインルーチン /
3833  * Haggling routine                             -RAK-
3834  * @param player_ptr プレーヤーへの参照ポインタ
3835  * @param o_ptr オブジェクトの構造体参照ポインタ
3836  * @param price 最終価格を返す参照ポインタ
3837  * @return プレイヤーの価格に対して店主が不服ならばTRUEを返す /
3838  * Return TRUE if purchase is NOT successful
3839  */
3840 static bool sell_haggle(player_type *player_ptr, object_type *o_ptr, s32b *price)
3841 {
3842         s32b cur_ask = price_item(player_ptr, o_ptr, ot_ptr->max_inflate, TRUE);
3843         s32b final_ask = price_item(player_ptr, o_ptr, ot_ptr->min_inflate, TRUE);
3844         int noneed = noneedtobargain(final_ask);
3845         s32b purse = (s32b)(ot_ptr->max_cost);
3846         bool final = FALSE;
3847         concptr pmt = _("提示金額", "Offer");
3848         if (noneed || !manual_haggle || (final_ask >= purse))
3849         {
3850                 if (!manual_haggle && !noneed)
3851                 {
3852                         final_ask -= final_ask / 10;
3853                 }
3854
3855                 if (final_ask >= purse)
3856                 {
3857                         msg_print(_("即座にこの金額にまとまった。", "You instantly agree upon the price."));
3858                         msg_print(NULL);
3859                         final_ask = purse;
3860                 }
3861                 else if (noneed)
3862                 {
3863                         msg_print(_("結局この金額にまとまった。", "You eventually agree upon the price."));
3864                         msg_print(NULL);
3865                 }
3866                 else
3867                 {
3868                         msg_print(_("すんなりとこの金額にまとまった。", "You quickly agree upon the price."));
3869                         msg_print(NULL);
3870                 }
3871
3872                 cur_ask = final_ask;
3873                 final = TRUE;
3874                 pmt = _("最終提示金額", "Final Offer");
3875         }
3876
3877         cur_ask *= o_ptr->number;
3878         final_ask *= o_ptr->number;
3879
3880         s32b min_per = ot_ptr->haggle_per;
3881         s32b max_per = min_per * 3;
3882         s32b last_offer = object_value(o_ptr) * o_ptr->number;
3883         last_offer = last_offer * ot_ptr->max_inflate / 100L;
3884         s32b offer = 0;
3885         allow_inc = FALSE;
3886         bool flag = FALSE;
3887         bool loop_flag;
3888         int annoyed = 0;
3889         bool cancel = FALSE;
3890         *price = 0;
3891         while (!flag)
3892         {
3893                 while (TRUE)
3894                 {
3895                         loop_flag = TRUE;
3896
3897                         char out_val[160];
3898                         (void)sprintf(out_val, "%s :  %ld", pmt, (long)cur_ask);
3899                         put_str(out_val, 1, 0);
3900                         cancel = receive_offer(_("提示する価格? ", "What price do you ask? "),
3901                                 &offer, last_offer, -1, cur_ask, final);
3902
3903                         if (cancel)
3904                         {
3905                                 flag = TRUE;
3906                         }
3907                         else if (offer < cur_ask)
3908                         {
3909                                 say_comment_6();
3910                                 offer = last_offer;
3911                         }
3912                         else if (offer == cur_ask)
3913                         {
3914                                 flag = TRUE;
3915                                 *price = offer;
3916                         }
3917                         else
3918                         {
3919                                 loop_flag = FALSE;
3920                         }
3921
3922                         if (flag || !loop_flag) break;
3923                 }
3924
3925                 if (flag) continue;
3926
3927                 s32b x1 = 100 * (last_offer - offer) / (last_offer - cur_ask);
3928                 if (x1 < min_per)
3929                 {
3930                         if (haggle_insults())
3931                         {
3932                                 flag = TRUE;
3933                                 cancel = TRUE;
3934                         }
3935                 }
3936                 else if (x1 > max_per)
3937                 {
3938                         x1 = x1 * 3 / 4;
3939                         if (x1 < max_per) x1 = max_per;
3940                 }
3941
3942                 s32b x2 = rand_range(x1 - 2, x1 + 2);
3943                 s32b x3 = ((offer - cur_ask) * x2 / 100L) + 1;
3944                 if (x3 < 0) x3 = 0;
3945                 cur_ask += x3;
3946
3947                 if (cur_ask > final_ask)
3948                 {
3949                         cur_ask = final_ask;
3950                         final = TRUE;
3951                         pmt = _("最終提示金額", "Final Offer");
3952
3953                         annoyed++;
3954                         if (annoyed > 3)
3955                         {
3956                                 flag = TRUE;
3957 #ifdef JP
3958                                 /* 追加 $0 で買い取られてしまうのを防止 By FIRST*/
3959                                 cancel = TRUE;
3960 #endif
3961                                 (void)(increase_insults());
3962                         }
3963                 }
3964                 else if (offer <= cur_ask)
3965                 {
3966                         flag = TRUE;
3967                         *price = offer;
3968                 }
3969
3970                 last_offer = offer;
3971                 allow_inc = TRUE;
3972                 prt("", 1, 0);
3973                 char out_val[160];
3974                 (void)sprintf(out_val, _("前回の提示価格 $%ld", "Your last bid %ld"), (long)last_offer);
3975                 put_str(out_val, 1, 39);
3976                 say_comment_3(cur_ask, annoyed);
3977         }
3978
3979         if (cancel) return TRUE;
3980
3981         updatebargain(*price, final_ask, o_ptr->number);
3982         return FALSE;
3983 }
3984
3985
3986 /*!
3987  * @brief 店からの購入処理のメインルーチン /
3988  * Buy an item from a store                     -RAK-
3989  * @param player_ptr プレーヤーへの参照ポインタ
3990  * @return なし
3991  */
3992 static void store_purchase(player_type *player_ptr)
3993 {
3994         if (cur_store_num == STORE_MUSEUM)
3995         {
3996                 msg_print(_("博物館から取り出すことはできません。", "Museum."));
3997                 return;
3998         }
3999
4000         if (st_ptr->stock_num <= 0)
4001         {
4002                 if (cur_store_num == STORE_HOME)
4003                         msg_print(_("我が家には何も置いてありません。", "Your home is empty."));
4004                 else
4005                         msg_print(_("現在商品の在庫を切らしています。", "I am currently out of stock."));
4006                 return;
4007         }
4008
4009         int i = (st_ptr->stock_num - store_top);
4010         if (i > store_bottom) i = store_bottom;
4011
4012         char out_val[160];
4013 #ifdef JP
4014         /* ブラックマーケットの時は別のメッセージ */
4015         switch (cur_store_num) {
4016         case 7:
4017                 sprintf(out_val, "どのアイテムを取りますか? ");
4018                 break;
4019         case 6:
4020                 sprintf(out_val, "どれ? ");
4021                 break;
4022         default:
4023                 sprintf(out_val, "どの品物が欲しいんだい? ");
4024                 break;
4025         }
4026 #else
4027         if (cur_store_num == STORE_HOME)
4028         {
4029                 sprintf(out_val, "Which item do you want to take? ");
4030         }
4031         else
4032         {
4033                 sprintf(out_val, "Which item are you interested in? ");
4034         }
4035 #endif
4036
4037         COMMAND_CODE item;
4038         if (!get_stock(&item, out_val, 0, i - 1)) return;
4039
4040         item = item + store_top;
4041         object_type *o_ptr;
4042         o_ptr = &st_ptr->stock[item];
4043         ITEM_NUMBER amt = 1;
4044         object_type forge;
4045         object_type *j_ptr;
4046         j_ptr = &forge;
4047         object_copy(j_ptr, o_ptr);
4048
4049         /*
4050          * If a rod or wand, allocate total maximum timeouts or charges
4051          * between those purchased and left on the shelf.
4052          */
4053         reduce_charges(j_ptr, o_ptr->number - amt);
4054         j_ptr->number = amt;
4055         if (!inven_carry_okay(j_ptr))
4056         {
4057                 msg_print(_("そんなにアイテムを持てない。", "You cannot carry that many different items."));
4058                 return;
4059         }
4060
4061         PRICE best = price_item(player_ptr, j_ptr, ot_ptr->min_inflate, FALSE);
4062         if (o_ptr->number > 1)
4063         {
4064                 if ((cur_store_num != STORE_HOME) &&
4065                         (o_ptr->ident & IDENT_FIXED))
4066                 {
4067                         msg_format(_("一つにつき $%ldです。", "That costs %ld gold per item."), (long)(best));
4068                 }
4069
4070                 amt = get_quantity(NULL, o_ptr->number);
4071                 if (amt <= 0) return;
4072         }
4073
4074         j_ptr = &forge;
4075         object_copy(j_ptr, o_ptr);
4076
4077         /*
4078          * If a rod or wand, allocate total maximum timeouts or charges
4079          * between those purchased and left on the shelf.
4080          */
4081         reduce_charges(j_ptr, o_ptr->number - amt);
4082         j_ptr->number = amt;
4083         if (!inven_carry_okay(j_ptr))
4084         {
4085                 msg_print(_("ザックにそのアイテムを入れる隙間がない。", "You cannot carry that many items."));
4086                 return;
4087         }
4088
4089         int choice;
4090         COMMAND_CODE item_new;
4091         PRICE price;
4092         if (cur_store_num == STORE_HOME)
4093         {
4094                 bool combined_or_reordered;
4095                 distribute_charges(o_ptr, j_ptr, amt);
4096                 item_new = inven_carry(player_ptr, j_ptr);
4097                 GAME_TEXT o_name[MAX_NLEN];
4098                 object_desc(player_ptr, o_name, &player_ptr->inventory_list[item_new], 0);
4099
4100                 msg_format(_("%s(%c)を取った。", "You have %s (%c)."), o_name, index_to_label(item_new));
4101                 handle_stuff(player_ptr);
4102
4103                 i = st_ptr->stock_num;
4104                 store_item_increase(item, -amt);
4105                 store_item_optimize(item);
4106                 combined_or_reordered = combine_and_reorder_home(STORE_HOME);
4107                 if (i == st_ptr->stock_num)
4108                 {
4109                         if (combined_or_reordered) display_store_inventory(player_ptr);
4110                         else display_entry(player_ptr, item);
4111                 }
4112                 else
4113                 {
4114                         if (st_ptr->stock_num == 0) store_top = 0;
4115                         else if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
4116                         display_store_inventory(player_ptr);
4117
4118                         chg_virtue(player_ptr, V_SACRIFICE, 1);
4119                 }
4120
4121                 return;
4122         }
4123
4124         if (o_ptr->ident & (IDENT_FIXED))
4125         {
4126                 choice = 0;
4127                 price = (best * j_ptr->number);
4128         }
4129         else
4130         {
4131                 GAME_TEXT o_name[MAX_NLEN];
4132                 object_desc(player_ptr, o_name, j_ptr, 0);
4133                 msg_format(_("%s(%c)を購入する。", "Buying %s (%c)."), o_name, I2A(item));
4134                 msg_print(NULL);
4135                 choice = purchase_haggle(player_ptr, j_ptr, &price);
4136                 if (st_ptr->store_open >= current_world_ptr->game_turn) return;
4137         }
4138
4139         if (choice != 0) return;
4140         if (price == (best * j_ptr->number)) o_ptr->ident |= (IDENT_FIXED);
4141         if (player_ptr->au < price)
4142         {
4143                 msg_print(_("お金が足りません。", "You do not have enough gold."));
4144                 return;
4145         }
4146
4147         say_comment_1(player_ptr);
4148         if (cur_store_num == STORE_BLACK)
4149                 chg_virtue(player_ptr, V_JUSTICE, -1);
4150         if ((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
4151                 chg_virtue(player_ptr, V_NATURE, -1);
4152
4153         sound(SOUND_BUY);
4154         decrease_insults();
4155         player_ptr->au -= price;
4156         store_prt_gold(player_ptr);
4157         object_aware(player_ptr, j_ptr);
4158         j_ptr->ident &= ~(IDENT_FIXED);
4159         GAME_TEXT o_name[MAX_NLEN];
4160         object_desc(player_ptr, o_name, j_ptr, 0);
4161
4162         msg_format(_("%sを $%ldで購入しました。", "You bought %s for %ld gold."), o_name, (long)price);
4163
4164         strcpy(record_o_name, o_name);
4165         record_turn = current_world_ptr->game_turn;
4166
4167         if (record_buy) exe_write_diary(player_ptr, DIARY_BUY, 0, o_name);
4168         object_desc(player_ptr, o_name, o_ptr, OD_NAME_ONLY);
4169         if (record_rand_art && o_ptr->art_name)
4170                 exe_write_diary(player_ptr, DIARY_ART, 0, o_name);
4171
4172         j_ptr->inscription = 0;
4173         j_ptr->feeling = FEEL_NONE;
4174         j_ptr->ident &= ~(IDENT_STORE);
4175         item_new = inven_carry(player_ptr, j_ptr);
4176
4177         object_desc(player_ptr, o_name, &player_ptr->inventory_list[item_new], 0);
4178         msg_format(_("%s(%c)を手に入れた。", "You have %s (%c)."), o_name, index_to_label(item_new));
4179         autopick_alter_item(player_ptr, item_new, FALSE);
4180         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4181         {
4182                 o_ptr->pval -= j_ptr->pval;
4183         }
4184
4185         handle_stuff(player_ptr);
4186         i = st_ptr->stock_num;
4187         store_item_increase(item, -amt);
4188         store_item_optimize(item);
4189         if (st_ptr->stock_num == 0)
4190         {
4191                 if (one_in_(STORE_SHUFFLE))
4192                 {
4193                         char buf[80];
4194                         msg_print(_("店主は引退した。", "The shopkeeper retires."));
4195                         store_shuffle(player_ptr, cur_store_num);
4196
4197                         prt("", 3, 0);
4198                         sprintf(buf, "%s (%s)",
4199                                 ot_ptr->owner_name, race_info[ot_ptr->owner_race].title);
4200                         put_str(buf, 3, 10);
4201                         sprintf(buf, "%s (%ld)",
4202                                 (f_name + f_info[cur_store_feat].name), (long)(ot_ptr->max_cost));
4203                         prt(buf, 3, 50);
4204                 }
4205                 else
4206                 {
4207                         msg_print(_("店主は新たな在庫を取り出した。", "The shopkeeper brings out some new stock."));
4208                 }
4209
4210                 for (i = 0; i < 10; i++)
4211                 {
4212                         store_maint(player_ptr, player_ptr->town_num, cur_store_num);
4213                 }
4214
4215                 store_top = 0;
4216                 display_store_inventory(player_ptr);
4217         }
4218         else if (st_ptr->stock_num != i)
4219         {
4220                 if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
4221                 display_store_inventory(player_ptr);
4222         }
4223         else
4224         {
4225                 display_entry(player_ptr, item);
4226         }
4227 }
4228
4229
4230 /*!
4231  * @brief 店からの売却処理のメインルーチン /
4232  * Sell an item to the store (or home)
4233  * @param owner_ptr プレーヤーへの参照ポインタ
4234  * @return なし
4235  */
4236 static void store_sell(player_type *owner_ptr)
4237 {
4238         concptr q;
4239         if (cur_store_num == STORE_HOME)
4240                 q = _("どのアイテムを置きますか? ", "Drop which item? ");
4241         else if (cur_store_num == STORE_MUSEUM)
4242                 q = _("どのアイテムを寄贈しますか? ", "Give which item? ");
4243         else
4244                 q = _("どのアイテムを売りますか? ", "Sell which item? ");
4245
4246         item_tester_hook = store_will_buy;
4247
4248         /* 我が家でおかしなメッセージが出るオリジナルのバグを修正 */
4249         concptr s;
4250         if (cur_store_num == STORE_HOME)
4251         {
4252                 s = _("置けるアイテムを持っていません。", "You don't have any item to drop.");
4253         }
4254         else if (cur_store_num == STORE_MUSEUM)
4255         {
4256                 s = _("寄贈できるアイテムを持っていません。", "You don't have any item to give.");
4257         }
4258         else
4259         {
4260                 s = _("欲しい物がないですねえ。", "You have nothing that I want.");
4261         }
4262
4263         OBJECT_IDX item;
4264         object_type *o_ptr;
4265         o_ptr = choose_object(owner_ptr, &item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), 0);
4266         if (!o_ptr) return;
4267
4268         if ((item >= INVEN_RARM) && object_is_cursed(o_ptr))
4269         {
4270                 msg_print(_("ふーむ、どうやらそれは呪われているようだね。", "Hmmm, it seems to be cursed."));
4271                 return;
4272         }
4273
4274         int amt = 1;
4275         if (o_ptr->number > 1)
4276         {
4277                 amt = get_quantity(NULL, o_ptr->number);
4278                 if (amt <= 0) return;
4279         }
4280
4281         object_type forge;
4282         object_type *q_ptr;
4283         q_ptr = &forge;
4284         object_copy(q_ptr, o_ptr);
4285         q_ptr->number = amt;
4286
4287         /*
4288          * Hack -- If a rod or wand, allocate total maximum
4289          * timeouts or charges to those being sold. -LM-
4290          */
4291         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4292         {
4293                 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
4294         }
4295
4296         GAME_TEXT o_name[MAX_NLEN];
4297         object_desc(owner_ptr, o_name, q_ptr, 0);
4298
4299         /* Remove any inscription, feeling for stores */
4300         if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
4301         {
4302                 q_ptr->inscription = 0;
4303                 q_ptr->feeling = FEEL_NONE;
4304         }
4305
4306         /* Is there room in the store (or the home?) */
4307         if (!store_check_num(q_ptr))
4308         {
4309                 if (cur_store_num == STORE_HOME)
4310                         msg_print(_("我が家にはもう置く場所がない。", "Your home is full."));
4311
4312                 else if (cur_store_num == STORE_MUSEUM)
4313                         msg_print(_("博物館はもう満杯だ。", "Museum is full."));
4314
4315                 else
4316                         msg_print(_("すいませんが、店にはもう置く場所がありません。", "I have not the room in my store to keep it."));
4317
4318                 return;
4319         }
4320
4321         int choice;
4322         PRICE price, value, dummy;
4323         if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
4324         {
4325                 msg_format(_("%s(%c)を売却する。", "Selling %s (%c)."), o_name, index_to_label(item));
4326                 msg_print(NULL);
4327
4328                 choice = sell_haggle(owner_ptr, q_ptr, &price);
4329                 if (st_ptr->store_open >= current_world_ptr->game_turn) return;
4330
4331                 if (choice == 0)
4332                 {
4333                         say_comment_1(owner_ptr);
4334                         sound(SOUND_SELL);
4335                         if (cur_store_num == STORE_BLACK)
4336                                 chg_virtue(owner_ptr, V_JUSTICE, -1);
4337
4338                         if ((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
4339                                 chg_virtue(owner_ptr, V_NATURE, 1);
4340                         decrease_insults();
4341
4342                         owner_ptr->au += price;
4343                         store_prt_gold(owner_ptr);
4344                         dummy = object_value(q_ptr) * q_ptr->number;
4345
4346                         identify_item(owner_ptr, o_ptr);
4347                         q_ptr = &forge;
4348                         object_copy(q_ptr, o_ptr);
4349                         q_ptr->number = amt;
4350                         q_ptr->ident |= IDENT_STORE;
4351
4352                         /*
4353                          * Hack -- If a rod or wand, let the shopkeeper know just
4354                          * how many charges he really paid for. -LM-
4355                          */
4356                         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4357                         {
4358                                 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
4359                         }
4360
4361                         value = object_value(q_ptr) * q_ptr->number;
4362                         object_desc(owner_ptr, o_name, q_ptr, 0);
4363                         msg_format(_("%sを $%ldで売却しました。", "You sold %s for %ld gold."), o_name, (long)price);
4364
4365                         if (record_sell) exe_write_diary(owner_ptr, DIARY_SELL, 0, o_name);
4366
4367                         if (!((o_ptr->tval == TV_FIGURINE) && (value > 0)))
4368                         {
4369                                 purchase_analyze(owner_ptr, price, value, dummy);
4370                         }
4371
4372                         /*
4373                          * Hack -- Allocate charges between those wands or rods sold
4374                          * and retained, unless all are being sold. -LM-
4375                          */
4376                         distribute_charges(o_ptr, q_ptr, amt);
4377                         q_ptr->timeout = 0;
4378                         inven_item_increase(owner_ptr, item, -amt);
4379                         inven_item_describe(owner_ptr, item);
4380                         if (o_ptr->number > 0)
4381                                 autopick_alter_item(owner_ptr, item, FALSE);
4382
4383                         inven_item_optimize(owner_ptr, item);
4384                         handle_stuff(owner_ptr);
4385                         int item_pos = store_carry(q_ptr);
4386                         if (item_pos >= 0)
4387                         {
4388                                 store_top = (item_pos / store_bottom) * store_bottom;
4389                                 display_store_inventory(owner_ptr);
4390                         }
4391                 }
4392         }
4393         else if (cur_store_num == STORE_MUSEUM)
4394         {
4395                 char o2_name[MAX_NLEN];
4396                 object_desc(owner_ptr, o2_name, q_ptr, OD_NAME_ONLY);
4397
4398                 if (-1 == store_check_num(q_ptr))
4399                 {
4400                         msg_print(_("それと同じ品物は既に博物館にあるようです。", "The Museum already has one of those items."));
4401                 }
4402                 else
4403                 {
4404                         msg_print(_("博物館に寄贈したものは取り出すことができません!!", "You cannot take back items which have been donated to the Museum!!"));
4405                 }
4406
4407                 if (!get_check(format(_("本当に%sを寄贈しますか?", "Really give %s to the Museum? "), o2_name))) return;
4408
4409                 identify_item(owner_ptr, q_ptr);
4410                 q_ptr->ident |= IDENT_FULL_KNOWN;
4411
4412                 distribute_charges(o_ptr, q_ptr, amt);
4413                 msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
4414                 choice = 0;
4415
4416                 vary_item(owner_ptr, item, -amt);
4417                 handle_stuff(owner_ptr);
4418
4419                 int item_pos = home_carry(owner_ptr, q_ptr);
4420                 if (item_pos >= 0)
4421                 {
4422                         store_top = (item_pos / store_bottom) * store_bottom;
4423                         display_store_inventory(owner_ptr);
4424                 }
4425         }
4426         else
4427         {
4428                 distribute_charges(o_ptr, q_ptr, amt);
4429                 msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
4430                 choice = 0;
4431                 vary_item(owner_ptr, item, -amt);
4432                 handle_stuff(owner_ptr);
4433                 int item_pos = home_carry(owner_ptr, q_ptr);
4434                 if (item_pos >= 0)
4435                 {
4436                         store_top = (item_pos / store_bottom) * store_bottom;
4437                         display_store_inventory(owner_ptr);
4438                 }
4439         }
4440
4441         if ((choice == 0) && (item >= INVEN_RARM))
4442         {
4443                 calc_android_exp(owner_ptr);
4444                 verify_equip_slot(owner_ptr, item);
4445         }
4446 }
4447
4448
4449 /*!
4450  * @brief 店のアイテムを調べるコマンドのメインルーチン /
4451  * Examine an item in a store                      -JDL-
4452  * @return なし
4453  */
4454 static void store_examine(player_type *player_ptr)
4455 {
4456         if (st_ptr->stock_num <= 0)
4457         {
4458                 if (cur_store_num == STORE_HOME)
4459                         msg_print(_("我が家には何も置いてありません。", "Your home is empty."));
4460                 else if (cur_store_num == STORE_MUSEUM)
4461                         msg_print(_("博物館には何も置いてありません。", "Museum is empty."));
4462                 else
4463                         msg_print(_("現在商品の在庫を切らしています。", "I am currently out of stock."));
4464                 return;
4465         }
4466
4467         int i = (st_ptr->stock_num - store_top);
4468         if (i > store_bottom) i = store_bottom;
4469
4470         char out_val[160];
4471         sprintf(out_val, _("どれを調べますか?", "Which item do you want to examine? "));
4472
4473         COMMAND_CODE item;
4474         if (!get_stock(&item, out_val, 0, i - 1)) return;
4475         item = item + store_top;
4476         object_type *o_ptr;
4477         o_ptr = &st_ptr->stock[item];
4478         if (!OBJECT_IS_FULL_KNOWN(o_ptr))
4479         {
4480                 msg_print(_("このアイテムについて特に知っていることはない。", "You have no special knowledge about that item."));
4481                 return;
4482         }
4483
4484         GAME_TEXT o_name[MAX_NLEN];
4485         object_desc(player_ptr, o_name, o_ptr, 0);
4486         msg_format(_("%sを調べている...", "Examining %s..."), o_name);
4487
4488         if (!screen_object(player_ptr, o_ptr, SCROBJ_FORCE_DETAIL))
4489                 msg_print(_("特に変わったところはないようだ。", "You see nothing special."));
4490
4491         return;
4492 }
4493
4494
4495 /*!
4496  * @brief 博物館のアイテムを除去するコマンドのメインルーチン /
4497  * Remove an item from museum (Originally from TOband)
4498  * @param player_ptr プレーヤーへの参照ポインタ
4499  * @return なし
4500  */
4501 static void museum_remove_object(player_type *player_ptr)
4502 {
4503         if (st_ptr->stock_num <= 0)
4504         {
4505                 msg_print(_("博物館には何も置いてありません。", "Museum is empty."));
4506                 return;
4507         }
4508
4509         int i = st_ptr->stock_num - store_top;
4510         if (i > store_bottom) i = store_bottom;
4511
4512         char out_val[160];
4513         sprintf(out_val, _("どのアイテムの展示をやめさせますか?", "Which item do you want to order to remove? "));
4514
4515         COMMAND_CODE item;
4516         if (!get_stock(&item, out_val, 0, i - 1)) return;
4517
4518         item = item + store_top;
4519         object_type *o_ptr;
4520         o_ptr = &st_ptr->stock[item];
4521
4522         GAME_TEXT o_name[MAX_NLEN];
4523         object_desc(player_ptr, o_name, o_ptr, 0);
4524
4525         msg_print(_("展示をやめさせたアイテムは二度と見ることはできません!", "Once removed from the Museum, an item will be gone forever!"));
4526         if (!get_check(format(_("本当に%sの展示をやめさせますか?", "Really order to remove %s from the Museum? "), o_name))) return;
4527
4528         msg_format(_("%sの展示をやめさせた。", "You ordered to remove %s."), o_name);
4529
4530         store_item_increase(item, -o_ptr->number);
4531         store_item_optimize(item);
4532
4533         (void)combine_and_reorder_home(STORE_MUSEUM);
4534         if (st_ptr->stock_num == 0) store_top = 0;
4535
4536         else if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
4537         display_store_inventory(player_ptr);
4538 }
4539
4540
4541 /*
4542  * Hack -- set this to leave the store
4543  */
4544 static bool leave_store = FALSE;
4545
4546
4547 /*!
4548  * @brief 店舗処理コマンド選択のメインルーチン /
4549  * Process a command in a store
4550  * @param client_ptr 顧客となるクリーチャーの参照ポインタ
4551  * @return なし
4552  * @note
4553  * <pre>
4554  * Note that we must allow the use of a few "special" commands
4555  * in the stores which are not allowed in the dungeon, and we
4556  * must disable some commands which are allowed in the dungeon
4557  * but not in the stores, to prevent chaos.
4558  * </pre>
4559  */
4560 static void store_process_command(player_type *client_ptr)
4561 {
4562         repeat_check();
4563         if (rogue_like_commands && command_cmd == 'l')
4564         {
4565                 command_cmd = 'x';
4566         }
4567
4568         switch (command_cmd)
4569         {
4570         case ESCAPE:
4571         {
4572                 leave_store = TRUE;
4573                 break;
4574         }
4575         case '-':
4576         {
4577                 /* 日本語版追加 */
4578                 /* 1 ページ戻るコマンド: 我が家のページ数が多いので重宝するはず By BUG */
4579                 if (st_ptr->stock_num <= store_bottom) {
4580                         msg_print(_("これで全部です。", "Entire inventory is shown."));
4581                 }
4582                 else {
4583                         store_top -= store_bottom;
4584                         if (store_top < 0)
4585                                 store_top = ((st_ptr->stock_num - 1) / store_bottom) * store_bottom;
4586                         if ((cur_store_num == STORE_HOME) && (powerup_home == FALSE))
4587                                 if (store_top >= store_bottom) store_top = store_bottom;
4588                         display_store_inventory(client_ptr);
4589                 }
4590
4591                 break;
4592         }
4593         case ' ':
4594         {
4595                 if (st_ptr->stock_num <= store_bottom)
4596                 {
4597                         msg_print(_("これで全部です。", "Entire inventory is shown."));
4598                 }
4599                 else
4600                 {
4601                         store_top += store_bottom;
4602                         /*
4603                          * 隠しオプション(powerup_home)がセットされていないときは
4604                          * 我が家では 2 ページまでしか表示しない
4605                          */
4606                         if ((cur_store_num == STORE_HOME) &&
4607                                 (powerup_home == FALSE) &&
4608                                 (st_ptr->stock_num >= STORE_INVEN_MAX))
4609                         {
4610                                 if (store_top >= (STORE_INVEN_MAX - 1))
4611                                 {
4612                                         store_top = 0;
4613                                 }
4614                         }
4615                         else
4616                         {
4617                                 if (store_top >= st_ptr->stock_num) store_top = 0;
4618                         }
4619
4620                         display_store_inventory(client_ptr);
4621                 }
4622
4623                 break;
4624         }
4625         case KTRL('R'):
4626         {
4627                 do_cmd_redraw(client_ptr);
4628                 display_store(client_ptr);
4629                 break;
4630         }
4631         case 'g':
4632         {
4633                 store_purchase(client_ptr);
4634                 break;
4635         }
4636         case 'd':
4637         {
4638                 store_sell(client_ptr);
4639                 break;
4640         }
4641         case 'x':
4642         {
4643                 store_examine(client_ptr);
4644                 break;
4645         }
4646         case '\r':
4647         {
4648                 break;
4649         }
4650         case 'w':
4651         {
4652                 do_cmd_wield(client_ptr);
4653                 break;
4654         }
4655         case 't':
4656         {
4657                 do_cmd_takeoff(client_ptr);
4658                 break;
4659         }
4660         case 'k':
4661         {
4662                 do_cmd_destroy(client_ptr);
4663                 break;
4664         }
4665         case 'e':
4666         {
4667                 do_cmd_equip(client_ptr);
4668                 break;
4669         }
4670         case 'i':
4671         {
4672                 do_cmd_inven(client_ptr);
4673                 break;
4674         }
4675         case 'I':
4676         {
4677                 do_cmd_observe(client_ptr);
4678                 break;
4679         }
4680         case KTRL('I'):
4681         {
4682                 toggle_inventory_equipment(client_ptr);
4683                 break;
4684         }
4685         case 'b':
4686         {
4687                 if ((client_ptr->pclass == CLASS_MINDCRAFTER) ||
4688                         (client_ptr->pclass == CLASS_BERSERKER) ||
4689                         (client_ptr->pclass == CLASS_NINJA) ||
4690                         (client_ptr->pclass == CLASS_MIRROR_MASTER)
4691                         ) do_cmd_mind_browse(client_ptr);
4692                 else if (client_ptr->pclass == CLASS_SMITH)
4693                         do_cmd_kaji(client_ptr, TRUE);
4694                 else if (client_ptr->pclass == CLASS_MAGIC_EATER)
4695                         do_cmd_magic_eater(client_ptr, TRUE, FALSE);
4696                 else if (client_ptr->pclass == CLASS_SNIPER)
4697                         do_cmd_snipe_browse(client_ptr);
4698                 else do_cmd_browse(client_ptr);
4699                 break;
4700         }
4701         case '{':
4702         {
4703                 do_cmd_inscribe(client_ptr);
4704                 break;
4705         }
4706         case '}':
4707         {
4708                 do_cmd_uninscribe(client_ptr);
4709                 break;
4710         }
4711         case '?':
4712         {
4713                 do_cmd_help(client_ptr);
4714                 break;
4715         }
4716         case '/':
4717         {
4718                 do_cmd_query_symbol(client_ptr);
4719                 break;
4720         }
4721         case 'C':
4722         {
4723                 client_ptr->town_num = old_town_num;
4724                 do_cmd_player_status(client_ptr);
4725                 client_ptr->town_num = inner_town_num;
4726                 display_store(client_ptr);
4727                 break;
4728         }
4729         case '!':
4730         {
4731                 (void)Term_user(0);
4732                 break;
4733         }
4734         case '"':
4735         {
4736                 client_ptr->town_num = old_town_num;
4737                 do_cmd_pref(client_ptr);
4738                 client_ptr->town_num = inner_town_num;
4739                 break;
4740         }
4741         case '@':
4742         {
4743                 client_ptr->town_num = old_town_num;
4744                 do_cmd_macros(client_ptr);
4745                 client_ptr->town_num = inner_town_num;
4746                 break;
4747         }
4748         case '%':
4749         {
4750                 client_ptr->town_num = old_town_num;
4751                 do_cmd_visuals(client_ptr);
4752                 client_ptr->town_num = inner_town_num;
4753                 break;
4754         }
4755         case '&':
4756         {
4757                 client_ptr->town_num = old_town_num;
4758                 do_cmd_colors(client_ptr);
4759                 client_ptr->town_num = inner_town_num;
4760                 break;
4761         }
4762         case '=':
4763         {
4764                 do_cmd_options();
4765                 (void)combine_and_reorder_home(STORE_HOME);
4766                 do_cmd_redraw(client_ptr);
4767                 display_store(client_ptr);
4768                 break;
4769         }
4770         case ':':
4771         {
4772                 do_cmd_note();
4773                 break;
4774         }
4775         case 'V':
4776         {
4777                 do_cmd_version();
4778                 break;
4779         }
4780         case KTRL('F'):
4781         {
4782                 do_cmd_feeling(client_ptr);
4783                 break;
4784         }
4785         case KTRL('O'):
4786         {
4787                 do_cmd_message_one();
4788                 break;
4789         }
4790         case KTRL('P'):
4791         {
4792                 do_cmd_messages(0);
4793                 break;
4794         }
4795         case '|':
4796         {
4797                 do_cmd_diary(client_ptr);
4798                 break;
4799         }
4800         case '~':
4801         {
4802                 do_cmd_knowledge(client_ptr);
4803                 break;
4804         }
4805         case '(':
4806         {
4807                 do_cmd_load_screen();
4808                 break;
4809         }
4810         case ')':
4811         {
4812                 do_cmd_save_screen(client_ptr);
4813                 break;
4814         }
4815         default:
4816         {
4817                 if ((cur_store_num == STORE_MUSEUM) && (command_cmd == 'r'))
4818                 {
4819                         museum_remove_object(client_ptr);
4820                 }
4821                 else
4822                 {
4823                         msg_print(_("そのコマンドは店の中では使えません。", "That command does not work in stores."));
4824                 }
4825
4826                 break;
4827         }
4828         }
4829 }
4830
4831
4832 /*!
4833  * @brief 店舗処理全体のメインルーチン /
4834  * Enter a store, and interact with it. *
4835  * @param player_ptr プレーヤーへの参照ポインタ
4836  * @return なし
4837  * @note
4838  * <pre>
4839  * Note that we use the standard "request_command()" function
4840  * to get a command, allowing us to use "command_arg" and all
4841  * command macros and other nifty stuff, but we use the special
4842  * "shopping" argument, to force certain commands to be converted
4843  * into other commands, normally, we convert "p" (pray) and "m"
4844  * (cast magic) into "g" (get), and "s" (search) into "d" (drop).
4845  * </pre>
4846  */
4847 void do_cmd_store(player_type *player_ptr)
4848 {
4849         if (player_ptr->wild_mode) return;
4850         TERM_LEN w, h;
4851         Term_get_size(&w, &h);
4852
4853         xtra_stock = MIN(14 + 26, ((h > 24) ? (h - 24) : 0));
4854         store_bottom = MIN_STOCK + xtra_stock;
4855
4856         grid_type *g_ptr;
4857         g_ptr = &player_ptr->current_floor_ptr->grid_array[player_ptr->y][player_ptr->x];
4858
4859         if (!cave_have_flag_grid(g_ptr, FF_STORE))
4860         {
4861                 msg_print(_("ここには店がありません。", "You see no store here."));
4862                 return;
4863         }
4864
4865         int which = f_info[g_ptr->feat].subtype;
4866         old_town_num = player_ptr->town_num;
4867         if ((which == STORE_HOME) || (which == STORE_MUSEUM)) player_ptr->town_num = 1;
4868         if (player_ptr->current_floor_ptr->dun_level) player_ptr->town_num = NO_TOWN;
4869         inner_town_num = player_ptr->town_num;
4870
4871         if ((town_info[player_ptr->town_num].store[which].store_open >= current_world_ptr->game_turn) ||
4872                 (ironman_shops))
4873         {
4874                 msg_print(_("ドアに鍵がかかっている。", "The doors are locked."));
4875                 player_ptr->town_num = old_town_num;
4876                 return;
4877         }
4878
4879         int maintain_num = (current_world_ptr->game_turn - town_info[player_ptr->town_num].store[which].last_visit) / (TURNS_PER_TICK * STORE_TICKS);
4880         if (maintain_num > 10)
4881                 maintain_num = 10;
4882         if (maintain_num)
4883         {
4884                 for (int i = 0; i < maintain_num; i++)
4885                         store_maint(player_ptr, player_ptr->town_num, which);
4886
4887                 town_info[player_ptr->town_num].store[which].last_visit = current_world_ptr->game_turn;
4888         }
4889
4890         forget_lite(player_ptr->current_floor_ptr);
4891         forget_view(player_ptr->current_floor_ptr);
4892         current_world_ptr->character_icky = TRUE;
4893         command_arg = 0;
4894         command_rep = 0;
4895         command_new = 0;
4896         get_com_no_macros = TRUE;
4897         cur_store_num = which;
4898         cur_store_feat = g_ptr->feat;
4899         st_ptr = &town_info[player_ptr->town_num].store[cur_store_num];
4900         ot_ptr = &owners[cur_store_num][st_ptr->owner];
4901         store_top = 0;
4902         play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BUILD);
4903         display_store(player_ptr);
4904         leave_store = FALSE;
4905
4906         while (!leave_store)
4907         {
4908                 prt("", 1, 0);
4909                 clear_from(20 + xtra_stock);
4910                 prt(_(" ESC) 建物から出る", " ESC) Exit from Building."), 21 + xtra_stock, 0);
4911                 if (st_ptr->stock_num > store_bottom)
4912                 {
4913                         prt(_(" -)前ページ", " -) Previous page"), 22 + xtra_stock, 0);
4914                         prt(_(" スペース) 次ページ", " SPACE) Next page"), 23 + xtra_stock, 0);
4915                 }
4916
4917                 if (cur_store_num == STORE_HOME)
4918                 {
4919                         prt(_("g) アイテムを取る", "g) Get an item."), 21 + xtra_stock, 27);
4920                         prt(_("d) アイテムを置く", "d) Drop an item."), 22 + xtra_stock, 27);
4921                         prt(_("x) 家のアイテムを調べる", "x) eXamine an item in the home."), 23 + xtra_stock, 27);
4922                 }
4923                 else if (cur_store_num == STORE_MUSEUM)
4924                 {
4925                         prt(_("d) アイテムを置く", "d) Drop an item."), 21 + xtra_stock, 27);
4926                         prt(_("r) アイテムの展示をやめる", "r) order to Remove an item."), 22 + xtra_stock, 27);
4927                         prt(_("x) 博物館のアイテムを調べる", "x) eXamine an item in the museum."), 23 + xtra_stock, 27);
4928                 }
4929                 else
4930                 {
4931                         prt(_("p) 商品を買う", "p) Purchase an item."), 21 + xtra_stock, 30);
4932                         prt(_("s) アイテムを売る", "s) Sell an item."), 22 + xtra_stock, 30);
4933                         prt(_("x) 商品を調べる", "x) eXamine an item in the shop"), 23 + xtra_stock, 30);
4934                 }
4935
4936                 prt(_("i/e) 持ち物/装備の一覧", "i/e) Inventry/Equipment list"), 21 + xtra_stock, 56);
4937                 if (rogue_like_commands)
4938                 {
4939                         prt(_("w/T) 装備する/はずす", "w/T) Wear/Take off equipment"), 22 + xtra_stock, 56);
4940                 }
4941                 else
4942                 {
4943                         prt(_("w/t) 装備する/はずす", "w/t) Wear/Take off equipment"), 22 + xtra_stock, 56);
4944                 }
4945
4946                 prt(_("コマンド:", "You may: "), 20 + xtra_stock, 0);
4947                 request_command(player_ptr, TRUE);
4948                 store_process_command(player_ptr);
4949
4950                 /*
4951                  * Hack -- To redraw missiles damage and prices in store
4952                  * If player's charisma changes, or if player changes a bow, PU_BONUS is set
4953                  */
4954                 bool need_redraw_store_inv = (player_ptr->update & PU_BONUS) ? TRUE : FALSE;
4955                 current_world_ptr->character_icky = TRUE;
4956                 handle_stuff(player_ptr);
4957                 if (player_ptr->inventory_list[INVEN_PACK].k_idx)
4958                 {
4959                         INVENTORY_IDX item = INVEN_PACK;
4960                         object_type *o_ptr = &player_ptr->inventory_list[item];
4961                         if (cur_store_num != STORE_HOME)
4962                         {
4963                                 if (cur_store_num == STORE_MUSEUM)
4964                                         msg_print(_("ザックからアイテムがあふれそうなので、あわてて博物館から出た...", "Your pack is so full that you flee the Museum..."));
4965                                 else
4966                                         msg_print(_("ザックからアイテムがあふれそうなので、あわてて店から出た...", "Your pack is so full that you flee the store..."));
4967
4968                                 leave_store = TRUE;
4969                         }
4970                         else if (!store_check_num(o_ptr))
4971                         {
4972                                 msg_print(_("ザックからアイテムがあふれそうなので、あわてて家から出た...", "Your pack is so full that you flee your home..."));
4973                                 leave_store = TRUE;
4974                         }
4975                         else
4976                         {
4977                                 int item_pos;
4978                                 object_type forge;
4979                                 object_type *q_ptr;
4980                                 GAME_TEXT o_name[MAX_NLEN];
4981                                 msg_print(_("ザックからアイテムがあふれてしまった!", "Your pack overflows!"));
4982                                 q_ptr = &forge;
4983                                 object_copy(q_ptr, o_ptr);
4984                                 object_desc(player_ptr, o_name, q_ptr, 0);
4985                                 msg_format(_("%sが落ちた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
4986                                 vary_item(player_ptr, item, -255);
4987                                 handle_stuff(player_ptr);
4988
4989                                 item_pos = home_carry(player_ptr, q_ptr);
4990                                 if (item_pos >= 0)
4991                                 {
4992                                         store_top = (item_pos / store_bottom) * store_bottom;
4993                                         display_store_inventory(player_ptr);
4994                                 }
4995                         }
4996                 }
4997
4998                 if (need_redraw_store_inv) display_store_inventory(player_ptr);
4999
5000                 if (st_ptr->store_open >= current_world_ptr->game_turn) leave_store = TRUE;
5001         }
5002
5003         select_floor_music(player_ptr);
5004         player_ptr->town_num = old_town_num;
5005         take_turn(player_ptr, 100);
5006         current_world_ptr->character_icky = FALSE;
5007         command_new = 0;
5008         command_see = FALSE;
5009         get_com_no_macros = FALSE;
5010
5011         msg_erase();
5012         Term_clear();
5013
5014         player_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
5015         player_ptr->update |= (PU_MONSTERS);
5016         player_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY);
5017         player_ptr->redraw |= (PR_MAP);
5018         player_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5019 }
5020
5021
5022 /*!
5023  * @brief 現在の町の店主を交代させる /
5024  * Shuffle one of the stores.
5025  * @param which 店舗種類のID
5026  * @return なし
5027  */
5028 void store_shuffle(player_type *player_ptr, int which)
5029 {
5030         if (which == STORE_HOME) return;
5031         if (which == STORE_MUSEUM) return;
5032
5033         cur_store_num = which;
5034         st_ptr = &town_info[player_ptr->town_num].store[cur_store_num];
5035         int j = st_ptr->owner;
5036         while (TRUE)
5037         {
5038                 st_ptr->owner = (byte)randint0(MAX_OWNERS);
5039                 if (j == st_ptr->owner) continue;
5040                 int i;
5041                 for (i = 1; i < max_towns; i++)
5042                 {
5043                         if (i == player_ptr->town_num) continue;
5044                         if (st_ptr->owner == town_info[i].store[cur_store_num].owner) break;
5045                 }
5046
5047                 if (i == max_towns) break;
5048         }
5049
5050         ot_ptr = &owners[cur_store_num][st_ptr->owner];
5051         st_ptr->insult_cur = 0;
5052         st_ptr->store_open = 0;
5053         st_ptr->good_buy = 0;
5054         st_ptr->bad_buy = 0;
5055         for (int i = 0; i < st_ptr->stock_num; i++)
5056         {
5057                 object_type *o_ptr;
5058                 o_ptr = &st_ptr->stock[i];
5059                 if (object_is_artifact(o_ptr)) continue;
5060
5061                 o_ptr->discount = 50;
5062                 o_ptr->ident &= ~(IDENT_FIXED);
5063                 o_ptr->inscription = quark_add(_("売出中", "on sale"));
5064         }
5065 }
5066
5067
5068 /*!
5069  * @brief 店の品揃えを変化させる /
5070  * Maintain the inventory at the stores.
5071  * @param player_ptr プレーヤーへの参照ポインタ
5072  * @param town_num 町のID
5073  * @param store_num 店舗種類のID
5074  * @return なし
5075  */
5076 void store_maint(player_type *player_ptr, int town_num, int store_num)
5077 {
5078         cur_store_num = store_num;
5079         if (store_num == STORE_HOME) return;
5080         if (store_num == STORE_MUSEUM) return;
5081
5082         st_ptr = &town_info[town_num].store[store_num];
5083         ot_ptr = &owners[store_num][st_ptr->owner];
5084         st_ptr->insult_cur = 0;
5085         if (store_num == STORE_BLACK)
5086         {
5087                 for (INVENTORY_IDX j = st_ptr->stock_num - 1; j >= 0; j--)
5088                 {
5089                         object_type *o_ptr = &st_ptr->stock[j];
5090                         if (black_market_crap(player_ptr, o_ptr))
5091                         {
5092                                 store_item_increase(j, 0 - o_ptr->number);
5093                                 store_item_optimize(j);
5094                         }
5095                 }
5096         }
5097
5098         INVENTORY_IDX j = st_ptr->stock_num;
5099         j = j - randint1(STORE_TURNOVER);
5100         if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
5101         if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
5102         if (j < 0) j = 0;
5103
5104         while (st_ptr->stock_num > j)
5105                 store_delete();
5106
5107         j = st_ptr->stock_num;
5108         j = j + randint1(STORE_TURNOVER);
5109         if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
5110         if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
5111         if (j >= st_ptr->stock_size) j = st_ptr->stock_size - 1;
5112
5113         while (st_ptr->stock_num < j) store_create(player_ptr);
5114 }
5115
5116
5117 /*!
5118  * @brief 店舗情報を初期化する /
5119  * Initialize the stores
5120  * @param town_num 町のID
5121  * @param store_num 店舗種類のID
5122  * @return なし
5123  */
5124 void store_init(int town_num, int store_num)
5125 {
5126         cur_store_num = store_num;
5127         st_ptr = &town_info[town_num].store[store_num];
5128         while (TRUE)
5129         {
5130                 st_ptr->owner = (byte)randint0(MAX_OWNERS);
5131                 int i;
5132                 for (i = 1; i < max_towns; i++)
5133                 {
5134                         if (i == town_num) continue;
5135                         if (st_ptr->owner == town_info[i].store[store_num].owner) break;
5136                 }
5137
5138                 if (i == max_towns) break;
5139         }
5140
5141         ot_ptr = &owners[store_num][st_ptr->owner];
5142
5143         st_ptr->store_open = 0;
5144         st_ptr->insult_cur = 0;
5145         st_ptr->good_buy = 0;
5146         st_ptr->bad_buy = 0;
5147         st_ptr->stock_num = 0;
5148
5149         /*
5150          * MEGA-HACK - Last visit to store is
5151          * BEFORE player birth to enable store restocking
5152          */
5153         st_ptr->last_visit = -10L * TURNS_PER_TICK * STORE_TICKS;
5154         for (int k = 0; k < st_ptr->stock_size; k++)
5155         {
5156                 object_wipe(&st_ptr->stock[k]);
5157         }
5158 }