OSDN Git Service

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