OSDN Git Service

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