OSDN Git Service

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