OSDN Git Service

[Refactor] #37353 コメント整理。 / Refactor comments.
[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 #ifdef JP
3696                 prt("-続く-", k + 6, 3);
3697 #else
3698                 prt("-more-", k + 6, 3);
3699 #endif
3700
3701
3702                 /* Indicate the "current page" */
3703                 /* Trailing spaces are to display (Page xx) and (Page x) */
3704 #ifdef JP
3705                 put_str(format("(%dページ)  ", store_top/store_bottom + 1), 5, 20);
3706 #else
3707                 put_str(format("(Page %d)  ", store_top/store_bottom + 1), 5, 20);
3708 #endif
3709
3710         }
3711
3712         if (cur_store_num == STORE_HOME || cur_store_num == STORE_MUSEUM)
3713         {
3714                 k = st_ptr->stock_size;
3715
3716                 if (cur_store_num == STORE_HOME && !powerup_home) k /= 10;
3717 #ifdef JP
3718                 put_str(format("アイテム数:  %4d/%4d", st_ptr->stock_num, k), 19 + xtra_stock, 27);
3719 #else
3720                 put_str(format("Objects:  %4d/%4d", st_ptr->stock_num, k), 19 + xtra_stock, 30);
3721 #endif
3722         }
3723 }
3724
3725
3726 /*!
3727  * @brief プレイヤーの所持金を表示する /
3728  * Displays players gold                                        -RAK-
3729  * @return なし
3730  * @details
3731  */
3732 static void store_prt_gold(void)
3733 {
3734         char out_val[64];
3735
3736 #ifdef JP
3737         prt("手持ちのお金: ", 19 + xtra_stock, 53);
3738 #else
3739         prt("Gold Remaining: ", 19 + xtra_stock, 53);
3740 #endif
3741
3742
3743         sprintf(out_val, "%9ld", (long)p_ptr->au);
3744         prt(out_val, 19 + xtra_stock, 68);
3745 }
3746
3747 /*!
3748  * @brief 店舗情報全体を表示するメインルーチン /
3749  * Displays store (after clearing screen)               -RAK-
3750  * @return なし
3751  * @details
3752  */
3753 static void display_store(void)
3754 {
3755         char buf[80];
3756
3757         Term_clear();
3758
3759         /* The "Home" is special */
3760         if (cur_store_num == STORE_HOME)
3761         {
3762                 /* Put the owner name */
3763                 put_str(_("我が家", "Your Home"), 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         /* The "Home" is special */
3776         else if (cur_store_num == STORE_MUSEUM)
3777         {
3778                 /* Put the owner name */
3779                 put_str(_("博物館", "Museum"), 3, 31);
3780
3781                 /* Label the item descriptions */
3782                 put_str(_("アイテムの一覧", "Item Description"), 5, 4);
3783
3784                 /* If showing weights, show label */
3785                 if (show_weights)
3786                 {
3787                         put_str(_("  重さ", "Weight"), 5, 70);
3788                 }
3789         }
3790
3791         /* Normal stores */
3792         else
3793         {
3794                 concptr store_name = (f_name + f_info[cur_store_feat].name);
3795                 concptr owner_name = (ot_ptr->owner_name);
3796                 concptr race_name = race_info[ot_ptr->owner_race].title;
3797
3798                 /* Put the owner name and race */
3799                 sprintf(buf, "%s (%s)", owner_name, race_name);
3800                 put_str(buf, 3, 10);
3801
3802                 /* Show the max price in the store (above prices) */
3803                 sprintf(buf, "%s (%ld)", store_name, (long)(ot_ptr->max_cost));
3804                 prt(buf, 3, 50);
3805
3806                 /* Label the item descriptions */
3807                 put_str(_("商品の一覧", "Item Description"), 5, 5);
3808
3809
3810                 /* If showing weights, show label */
3811                 if (show_weights)
3812                 {
3813                         put_str(_("  重さ", "Weight"), 5, 60);
3814                 }
3815
3816                 /* Label the asking price (in stores) */
3817                 put_str(_(" 価格", "Price"), 5, 72);
3818         }
3819
3820         /* Display the current gold */
3821         store_prt_gold();
3822
3823         /* Draw in the inventory */
3824         display_inventory();
3825 }
3826
3827
3828
3829 /*!
3830  * @brief 店舗からアイテムを選択する /
3831  * Get the ID of a store item and return its value      -RAK-
3832  * @param com_val 選択IDを返す参照ポインタ
3833  * @param pmt メッセージキャプション
3834  * @param i 選択範囲の最小値
3835  * @param j 選択範囲の最大値
3836  * @return 実際に選択したらTRUE、キャンセルしたらFALSE
3837  */
3838 static int get_stock(COMMAND_CODE *com_val, concptr pmt, int i, int j)
3839 {
3840         char command;
3841         char out_val[160];
3842         char lo, hi;
3843
3844         /* Get the item index */
3845         if (repeat_pull(com_val))
3846         {
3847                 /* Verify the item */
3848                 if ((*com_val >= i) && (*com_val <= j))
3849                 {
3850                         /* Success */
3851                         return (TRUE);
3852                 }
3853         }
3854
3855         /* Paranoia */
3856         msg_print(NULL);
3857
3858         /* Assume failure */
3859         *com_val = (-1);
3860
3861         /* Build the prompt */
3862         lo = I2A(i);
3863         hi = (j > 25) ? toupper(I2A(j - 26)) : I2A(j);
3864 #ifdef JP
3865         (void)sprintf(out_val, "(%s:%c-%c, ESCで中断) %s",
3866                 (((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) ? "アイテム" : "商品"), 
3867                                   lo, hi, pmt);
3868 #else
3869         (void)sprintf(out_val, "(Items %c-%c, ESC to exit) %s",
3870                                   lo, hi, pmt);
3871 #endif
3872
3873
3874         /* Ask until done */
3875         while (TRUE)
3876         {
3877                 COMMAND_CODE k;
3878
3879                 /* Escape */
3880                 if (!get_com(out_val, &command, FALSE)) break;
3881
3882                 /* Convert */
3883                 if (islower(command))
3884                         k = A2I(command);
3885                 else if (isupper(command))
3886                         k = A2I(tolower(command)) + 26;
3887                 else
3888                         k = -1;
3889
3890                 /* Legal responses */
3891                 if ((k >= i) && (k <= j))
3892                 {
3893                         *com_val = k;
3894                         break;
3895                 }
3896
3897                 bell();
3898         }
3899
3900         /* Clear the prompt */
3901         prt("", 0, 0);
3902
3903         if (command == ESCAPE) return (FALSE);
3904
3905         repeat_push(*com_val);
3906
3907         /* Success */
3908         return (TRUE);
3909 }
3910
3911
3912 /*!
3913  * @brief 店主の不満度を増やし、プレイヤーを締め出す判定と処理を行う /
3914  * Increase the insult counter and get angry if too many -RAK-
3915  * @return プレイヤーを締め出す場合TRUEを返す
3916  */
3917 static int increase_insults(void)
3918 {
3919         /* Increase insults */
3920         st_ptr->insult_cur++;
3921
3922         /* Become insulted */
3923         if (st_ptr->insult_cur > ot_ptr->insult_max)
3924         {
3925                 /* Complain */
3926                 say_comment_4();
3927
3928                 /* Reset insults */
3929                 st_ptr->insult_cur = 0;
3930                 st_ptr->good_buy = 0;
3931                 st_ptr->bad_buy = 0;
3932
3933                 /* Open tomorrow */
3934                 st_ptr->store_open = turn + TURNS_PER_TICK*TOWN_DAWN/8 + randint1(TURNS_PER_TICK*TOWN_DAWN/8);
3935
3936                 /* Closed */
3937                 return (TRUE);
3938         }
3939
3940         /* Not closed */
3941         return (FALSE);
3942 }
3943
3944
3945 /*!
3946  * @brief 店主の不満度を減らす /
3947  * Decrease insults                             -RAK-
3948  * @return プレイヤーを締め出す場合TRUEを返す
3949  */
3950 static void decrease_insults(void)
3951 {
3952         /* Decrease insults */
3953         if (st_ptr->insult_cur) st_ptr->insult_cur--;
3954 }
3955
3956
3957 /*!
3958  * @brief 店主の不満度が増えた場合のみのメッセージを表示する /
3959  * Have insulted while haggling                         -RAK-
3960  * @return プレイヤーを締め出す場合TRUEを返す
3961  */
3962 static int haggle_insults(void)
3963 {
3964         /* Increase insults */
3965         if (increase_insults()) return (TRUE);
3966
3967         /* Display and flush insult */
3968         say_comment_5();
3969
3970         /* Still okay */
3971         return (FALSE);
3972 }
3973
3974
3975 /*
3976  * Mega-Hack -- Enable "increments"
3977  */
3978 static bool allow_inc = FALSE;
3979
3980 /*
3981  * Mega-Hack -- Last "increment" during haggling
3982  */
3983 static s32b last_inc = 0L;
3984
3985
3986 /*!
3987  * @brief 交渉価格を確認と認証の是非を行う /
3988  * Get a haggle
3989  * @param pmt メッセージ
3990  * @param poffer 別途価格提示をした場合の値を返す参照ポインタ
3991  * @param price 現在の交渉価格
3992  * @param final 最終確定価格ならばTRUE
3993  * @return プレイヤーを締め出す場合TRUEを返す
3994  */
3995 static int get_haggle(concptr pmt, s32b *poffer, PRICE price, int final)
3996 {
3997         s32b            i;
3998
3999         concptr         p;
4000
4001         char                            buf[128];
4002         char            out_val[160];
4003
4004
4005         /* Clear old increment if necessary */
4006         if (!allow_inc) last_inc = 0L;
4007
4008
4009         /* Final offer */
4010         if (final)
4011         {
4012 #ifdef JP
4013                 sprintf(buf, "%s [承諾] ", pmt);
4014 #else
4015                 sprintf(buf, "%s [accept] ", pmt);
4016 #endif
4017
4018         }
4019
4020         /* Old (negative) increment, and not final */
4021         else if (last_inc < 0)
4022         {
4023 #ifdef JP
4024                 sprintf(buf, "%s [-$%ld] ", pmt, (long)(ABS(last_inc)));
4025 #else
4026                 sprintf(buf, "%s [-%ld] ", pmt, (long)(ABS(last_inc)));
4027 #endif
4028
4029         }
4030
4031         /* Old (positive) increment, and not final */
4032         else if (last_inc > 0)
4033         {
4034 #ifdef JP
4035                 sprintf(buf, "%s [+$%ld] ", pmt, (long)(ABS(last_inc)));
4036 #else
4037                 sprintf(buf, "%s [+%ld] ", pmt, (long)(ABS(last_inc)));
4038 #endif
4039
4040         }
4041
4042         /* Normal haggle */
4043         else
4044         {
4045                 sprintf(buf, "%s ", pmt);
4046         }
4047
4048
4049         /* Paranoia */
4050         msg_print(NULL);
4051
4052
4053         /* Ask until done */
4054         while (TRUE)
4055         {
4056                 bool res;
4057
4058                 /* Display prompt */
4059                 prt(buf, 0, 0);
4060
4061                 /* Default */
4062                 strcpy(out_val, "");
4063
4064                 /*
4065                  * Ask the user for a response.
4066                  * Don't allow to use numpad as cursor key.
4067                  */
4068                 res = askfor_aux(out_val, 32, FALSE);
4069
4070                 /* Clear prompt */
4071                 prt("", 0, 0);
4072
4073                 /* Cancelled */
4074                 if (!res) return FALSE;
4075
4076                 /* Skip leading spaces */
4077                 for (p = out_val; *p == ' '; p++) /* loop */;
4078
4079                 /* Empty response */
4080                 if (*p == '\0')
4081                 {
4082                         /* Accept current price */
4083                         if (final)
4084                         {
4085                                 *poffer = price;
4086                                 last_inc = 0L;
4087                                 break;
4088                         }
4089
4090                         /* Use previous increment */
4091                         if (allow_inc && last_inc)
4092                         {
4093                                 *poffer += last_inc;
4094                                 break;
4095                         }
4096                 }
4097
4098                 /* Normal response */
4099                 else
4100                 {
4101                         /* Extract a number */
4102                         i = atol(p);
4103
4104                         /* Handle "incremental" number */
4105                         if ((*p == '+' || *p == '-'))
4106                         {
4107                                 /* Allow increments */
4108                                 if (allow_inc)
4109                                 {
4110                                         /* Use the given "increment" */
4111                                         *poffer += i;
4112                                         last_inc = i;
4113                                         break;
4114                                 }
4115                         }
4116
4117                         /* Handle normal number */
4118                         else
4119                         {
4120                                 /* Use the given "number" */
4121                                 *poffer = i;
4122                                 last_inc = 0L;
4123                                 break;
4124                         }
4125                 }
4126
4127                 /* Warning */
4128 #ifdef JP
4129                 msg_print("値がおかしいです。");
4130 #else
4131                 msg_print("Invalid response.");
4132 #endif
4133
4134                 msg_print(NULL);
4135         }
4136
4137         /* Success */
4138         return (TRUE);
4139 }
4140
4141
4142 /*!
4143  * @brief 店主がプレイヤーからの交渉価格を判断する /
4144  * Receive an offer (from the player)
4145  * @param pmt メッセージ
4146  * @param poffer 店主からの交渉価格を返す参照ポインタ
4147  * @param last_offer 現在の交渉価格
4148  * @param factor 店主の価格基準倍率
4149  * @param price アイテムの実価値
4150  * @param final 最終価格確定ならばTRUE
4151  * @return プレイヤーの価格に対して不服ならばTRUEを返す /
4152  * Return TRUE if offer is NOT okay
4153  */
4154 static bool receive_offer(concptr pmt, s32b *poffer,
4155                           s32b last_offer, int factor,
4156                           PRICE price, int final)
4157 {
4158         /* Haggle till done */
4159         while (TRUE)
4160         {
4161                 /* Get a haggle (or cancel) */
4162                 if (!get_haggle(pmt, poffer, price, final)) return (TRUE);
4163
4164                 /* Acceptable offer */
4165                 if (((*poffer) * factor) >= (last_offer * factor)) break;
4166
4167                 /* Insult, and check for kicked out */
4168                 if (haggle_insults()) return (TRUE);
4169
4170                 /* Reject offer (correctly) */
4171                 (*poffer) = last_offer;
4172         }
4173
4174         /* Success */
4175         return (FALSE);
4176 }
4177
4178
4179 /*!
4180  * @brief プレイヤーが購入する時の値切り処理メインルーチン /
4181  * Haggling routine                             -RAK-
4182  * @param o_ptr オブジェクトの構造体参照ポインタ
4183  * @param price 最終価格を返す参照ポインタ
4184  * @return プレイヤーの価格に対して店主が不服ならばTRUEを返す /
4185  * Return TRUE if purchase is NOT successful
4186  */
4187 static bool purchase_haggle(object_type *o_ptr, s32b *price)
4188 {
4189         s32b                       cur_ask, final_ask;
4190         s32b                       last_offer, offer;
4191         s32b                       x1, x2, x3;
4192         s32b                       min_per, max_per;
4193         int                        flag, loop_flag, noneed;
4194         int                        annoyed = 0, final = FALSE;
4195
4196         bool            cancel = FALSE;
4197
4198 #ifdef JP
4199         concptr pmt = "提示価格";
4200 #else
4201         concptr         pmt = "Asking";
4202 #endif
4203
4204
4205         char            out_val[160];
4206
4207
4208         *price = 0;
4209
4210
4211         /* Extract the starting offer and the final offer */
4212         cur_ask = price_item(o_ptr, ot_ptr->max_inflate, FALSE);
4213         final_ask = price_item(o_ptr, ot_ptr->min_inflate, FALSE);
4214
4215         /* Determine if haggling is necessary */
4216         noneed = noneedtobargain(final_ask);
4217
4218         /* No need to haggle */
4219         if (noneed || !manual_haggle)
4220         {
4221                 /* No need to haggle */
4222                 if (noneed)
4223                 {
4224                         /* Message summary */
4225 #ifdef JP
4226                         msg_print("結局この金額にまとまった。");
4227 #else
4228                         msg_print("You eventually agree upon the price.");
4229 #endif
4230
4231                         msg_print(NULL);
4232                 }
4233
4234                 /* No haggle option */
4235                 else
4236                 {
4237                         /* Message summary */
4238 #ifdef JP
4239                         msg_print("すんなりとこの金額にまとまった。");
4240 #else
4241                         msg_print("You quickly agree upon the price.");
4242 #endif
4243
4244                         msg_print(NULL);
4245
4246                         /* Apply Sales Tax */
4247                         final_ask += final_ask / 10;
4248                 }
4249
4250                 /* Final price */
4251                 cur_ask = final_ask;
4252
4253                 /* Go to final offer */
4254 #ifdef JP
4255                 pmt = "最終提示価格";
4256 #else
4257                 pmt = "Final Offer";
4258 #endif
4259
4260                 final = TRUE;
4261         }
4262
4263
4264         /* Haggle for the whole pile */
4265         cur_ask *= o_ptr->number;
4266         final_ask *= o_ptr->number;
4267
4268
4269         /* Haggle parameters */
4270         min_per = ot_ptr->haggle_per;
4271         max_per = min_per * 3;
4272
4273         /* Mega-Hack -- artificial "last offer" value */
4274         last_offer = object_value(o_ptr) * o_ptr->number;
4275         last_offer = last_offer * (200 - (int)(ot_ptr->max_inflate)) / 100L;
4276         if (last_offer <= 0) last_offer = 1;
4277
4278         /* No offer yet */
4279         offer = 0;
4280
4281         /* No incremental haggling yet */
4282         allow_inc = FALSE;
4283
4284         /* Haggle until done */
4285         for (flag = FALSE; !flag; )
4286         {
4287                 loop_flag = TRUE;
4288
4289                 while (!flag && loop_flag)
4290                 {
4291                         (void)sprintf(out_val, "%s :  %ld", pmt, (long)cur_ask);
4292                         put_str(out_val, 1, 0);
4293 #ifdef JP
4294                         cancel = receive_offer("提示する金額? ",
4295 #else
4296                         cancel = receive_offer("What do you offer? ",
4297 #endif
4298
4299                                                &offer, last_offer, 1, cur_ask, final);
4300
4301                         if (cancel)
4302                         {
4303                                 flag = TRUE;
4304                         }
4305                         else if (offer > cur_ask)
4306                         {
4307                                 say_comment_6();
4308                                 offer = last_offer;
4309                         }
4310                         else if (offer == cur_ask)
4311                         {
4312                                 flag = TRUE;
4313                                 *price = offer;
4314                         }
4315                         else
4316                         {
4317                                 loop_flag = FALSE;
4318                         }
4319                 }
4320
4321                 if (!flag)
4322                 {
4323                         x1 = 100 * (offer - last_offer) / (cur_ask - last_offer);
4324                         if (x1 < min_per)
4325                         {
4326                                 if (haggle_insults())
4327                                 {
4328                                         flag = TRUE;
4329                                         cancel = TRUE;
4330                                 }
4331                         }
4332                         else if (x1 > max_per)
4333                         {
4334                                 x1 = x1 * 3 / 4;
4335                                 if (x1 < max_per) x1 = max_per;
4336                         }
4337                         x2 = rand_range(x1-2, x1+2);
4338                         x3 = ((cur_ask - offer) * x2 / 100L) + 1;
4339                         /* don't let the price go up */
4340                         if (x3 < 0) x3 = 0;
4341                         cur_ask -= x3;
4342
4343                         /* Too little */
4344                         if (cur_ask < final_ask)
4345                         {
4346                                 final = TRUE;
4347                                 cur_ask = final_ask;
4348 #ifdef JP
4349                                 pmt = "最終提示価格";
4350 #else
4351                                 pmt = "Final Offer";
4352 #endif
4353
4354                                 annoyed++;
4355                                 if (annoyed > 3)
4356                                 {
4357                                         (void)(increase_insults());
4358                                         cancel = TRUE;
4359                                         flag = TRUE;
4360                                 }
4361                         }
4362                         else if (offer >= cur_ask)
4363                         {
4364                                 flag = TRUE;
4365                                 *price = offer;
4366                         }
4367
4368                         if (!flag)
4369                         {
4370                                 last_offer = offer;
4371                                 allow_inc = TRUE;
4372                                 prt("", 1, 0);
4373 #ifdef JP
4374 (void)sprintf(out_val, "前回の提示金額: $%ld",
4375 #else
4376                                 (void)sprintf(out_val, "Your last offer: %ld",
4377 #endif
4378
4379                                                           (long)last_offer);
4380                                 put_str(out_val, 1, 39);
4381                                 say_comment_2(cur_ask, annoyed);
4382                         }
4383                 }
4384         }
4385
4386         if (cancel) return (TRUE);
4387
4388         updatebargain(*price, final_ask, o_ptr->number);
4389
4390         /* Do not cancel */
4391         return (FALSE);
4392 }
4393
4394
4395 /*!
4396  * @brief プレイヤーが売却する時の値切り処理メインルーチン /
4397  * Haggling routine                             -RAK-
4398  * @param o_ptr オブジェクトの構造体参照ポインタ
4399  * @param price 最終価格を返す参照ポインタ
4400  * @return プレイヤーの価格に対して店主が不服ならばTRUEを返す /
4401  * Return TRUE if purchase is NOT successful
4402  */
4403 static bool sell_haggle(object_type *o_ptr, s32b *price)
4404 {
4405         s32b    purse, cur_ask, final_ask;
4406         s32b    last_offer = 0, offer = 0;
4407         s32b    x1, x2, x3;
4408         s32b    min_per, max_per;
4409         int     flag, loop_flag, noneed;
4410         int     annoyed = 0, final = FALSE;
4411         bool    cancel = FALSE;
4412 #ifdef JP
4413         concptr pmt = "提示金額";
4414 #else
4415         concptr    pmt = "Offer";
4416 #endif
4417
4418         char    out_val[160];
4419
4420
4421         *price = 0;
4422
4423
4424         /* Obtain the starting offer and the final offer */
4425         cur_ask = price_item(o_ptr, ot_ptr->max_inflate, TRUE);
4426         final_ask = price_item(o_ptr, ot_ptr->min_inflate, TRUE);
4427
4428         /* Determine if haggling is necessary */
4429         noneed = noneedtobargain(final_ask);
4430
4431         /* Get the owner's payout limit */
4432         purse = (s32b)(ot_ptr->max_cost);
4433
4434         /* No need to haggle */
4435         if (noneed || !manual_haggle || (final_ask >= purse))
4436         {
4437                 /* Apply Sales Tax (if needed) */
4438                 if (!manual_haggle && !noneed)
4439                 {
4440                         final_ask -= final_ask / 10;
4441                 }
4442
4443                 /* No reason to haggle */
4444                 if (final_ask >= purse)
4445                 {
4446 #ifdef JP
4447                         msg_print("即座にこの金額にまとまった。");
4448 #else
4449                         msg_print("You instantly agree upon the price.");
4450 #endif
4451
4452                         msg_print(NULL);
4453
4454                         /* Offer full purse */
4455                         final_ask = purse;
4456                 }
4457
4458                 /* No need to haggle */
4459                 else if (noneed)
4460                 {
4461 #ifdef JP
4462                         msg_print("結局この金額にまとまった。");
4463 #else
4464                         msg_print("You eventually agree upon the price.");
4465 #endif
4466
4467                         msg_print(NULL);
4468                 }
4469
4470                 /* No haggle option */
4471                 else
4472                 {
4473                         /* Message summary */
4474 #ifdef JP
4475                         msg_print("すんなりとこの金額にまとまった。");
4476 #else
4477                         msg_print("You quickly agree upon the price.");
4478 #endif
4479
4480                         msg_print(NULL);
4481                 }
4482
4483                 /* Final price */
4484                 cur_ask = final_ask;
4485
4486                 /* Final offer */
4487                 final = TRUE;
4488 #ifdef JP
4489                 pmt = "最終提示金額";
4490 #else
4491                 pmt = "Final Offer";
4492 #endif
4493
4494         }
4495
4496         /* Haggle for the whole pile */
4497         cur_ask *= o_ptr->number;
4498         final_ask *= o_ptr->number;
4499
4500
4501         /* Display commands */
4502
4503         /* Haggling parameters */
4504         min_per = ot_ptr->haggle_per;
4505         max_per = min_per * 3;
4506
4507         /* Mega-Hack -- artificial "last offer" value */
4508         last_offer = object_value(o_ptr) * o_ptr->number;
4509         last_offer = last_offer * ot_ptr->max_inflate / 100L;
4510
4511         /* No offer yet */
4512         offer = 0;
4513
4514         /* No incremental haggling yet */
4515         allow_inc = FALSE;
4516
4517         /* Haggle */
4518         for (flag = FALSE; !flag; )
4519         {
4520                 while (1)
4521                 {
4522                         loop_flag = TRUE;
4523
4524                         (void)sprintf(out_val, "%s :  %ld", pmt, (long)cur_ask);
4525                         put_str(out_val, 1, 0);
4526 #ifdef JP
4527                         cancel = receive_offer("提示する価格? ",
4528 #else
4529                         cancel = receive_offer("What price do you ask? ",
4530 #endif
4531
4532                                                                    &offer, last_offer, -1, cur_ask, final);
4533
4534                         if (cancel)
4535                         {
4536                                 flag = TRUE;
4537                         }
4538                         else if (offer < cur_ask)
4539                         {
4540                                 say_comment_6();
4541                                 /* rejected, reset offer for incremental haggling */
4542                                 offer = last_offer;
4543                         }
4544                         else if (offer == cur_ask)
4545                         {
4546                                 flag = TRUE;
4547                                 *price = offer;
4548                         }
4549                         else
4550                         {
4551                                 loop_flag = FALSE;
4552                         }
4553
4554                         /* Stop */
4555                         if (flag || !loop_flag) break;
4556                 }
4557
4558                 if (!flag)
4559                 {
4560                         x1 = 100 * (last_offer - offer) / (last_offer - cur_ask);
4561                         if (x1 < min_per)
4562                         {
4563                                 if (haggle_insults())
4564                                 {
4565                                         flag = TRUE;
4566                                         cancel = TRUE;
4567                                 }
4568                         }
4569                         else if (x1 > max_per)
4570                         {
4571                                 x1 = x1 * 3 / 4;
4572                                 if (x1 < max_per) x1 = max_per;
4573                         }
4574                         x2 = rand_range(x1-2, x1+2);
4575                         x3 = ((offer - cur_ask) * x2 / 100L) + 1;
4576                         /* don't let the price go down */
4577                         if (x3 < 0) x3 = 0;
4578                         cur_ask += x3;
4579
4580                         if (cur_ask > final_ask)
4581                         {
4582                                 cur_ask = final_ask;
4583                                 final = TRUE;
4584 #ifdef JP
4585                                 pmt = "最終提示金額";
4586 #else
4587                                 pmt = "Final Offer";
4588 #endif
4589
4590                                 annoyed++;
4591                                 if (annoyed > 3)
4592                                 {
4593                                         flag = TRUE;
4594 #ifdef JP
4595                                 /* 追加 $0 で買い取られてしまうのを防止 By FIRST*/
4596                                         cancel = TRUE;
4597 #endif
4598                                         (void)(increase_insults());
4599                                 }
4600                         }
4601                         else if (offer <= cur_ask)
4602                         {
4603                                 flag = TRUE;
4604                                 *price = offer;
4605                         }
4606
4607                         if (!flag)
4608                         {
4609                                 last_offer = offer;
4610                                 allow_inc = TRUE;
4611                                 prt("", 1, 0);
4612                                 (void)sprintf(out_val,
4613 #ifdef JP
4614                                               "前回の提示価格 $%ld", (long)last_offer);
4615 #else
4616                                                           "Your last bid %ld", (long)last_offer);
4617 #endif
4618
4619                                 put_str(out_val, 1, 39);
4620                                 say_comment_3(cur_ask, annoyed);
4621                         }
4622                 }
4623         }
4624
4625         if (cancel) return (TRUE);
4626
4627         updatebargain(*price, final_ask, o_ptr->number);
4628
4629         /* Do not cancel */
4630         return (FALSE);
4631 }
4632
4633
4634 /*!
4635  * @brief 店からの購入処理のメインルーチン /
4636  * Buy an item from a store                     -RAK-
4637  * @return なし
4638  */
4639 static void store_purchase(void)
4640 {
4641         int i, choice;
4642         COMMAND_CODE item, item_new;
4643
4644         ITEM_NUMBER amt;
4645
4646         PRICE price, best;
4647
4648         object_type forge;
4649         object_type *j_ptr;
4650
4651         object_type *o_ptr;
4652
4653         GAME_TEXT o_name[MAX_NLEN];
4654
4655         char out_val[160];
4656
4657         if (cur_store_num == STORE_MUSEUM)
4658         {
4659 #ifdef JP
4660                 msg_print("博物館から取り出すことはできません。");
4661 #else
4662                 msg_print("Museum.");
4663 #endif
4664                 return;
4665         }
4666
4667         /* Empty? */
4668         if (st_ptr->stock_num <= 0)
4669         {
4670                 if (cur_store_num == STORE_HOME)
4671 #ifdef JP
4672                         msg_print("我が家には何も置いてありません。");
4673 #else
4674                         msg_print("Your home is empty.");
4675 #endif
4676
4677                 else
4678 #ifdef JP
4679                         msg_print("現在商品の在庫を切らしています。");
4680 #else
4681                         msg_print("I am currently out of stock.");
4682 #endif
4683
4684                 return;
4685         }
4686
4687
4688         /* Find the number of objects on this and following pages */
4689         i = (st_ptr->stock_num - store_top);
4690
4691         /* And then restrict it to the current page */
4692         if (i > store_bottom) i = store_bottom;
4693
4694         /* Prompt */
4695 #ifdef JP
4696         /* ブラックマーケットの時は別のメッセージ */
4697         switch( cur_store_num ) {
4698                 case 7:
4699                         sprintf(out_val, "どのアイテムを取りますか? ");
4700                         break;
4701                 case 6:
4702                         sprintf(out_val, "どれ? ");
4703                         break;
4704                 default:
4705                         sprintf(out_val, "どの品物が欲しいんだい? ");
4706                         break;
4707         }
4708 #else
4709         if (cur_store_num == STORE_HOME)
4710         {
4711                 sprintf(out_val, "Which item do you want to take? ");
4712         }
4713         else
4714         {
4715                 sprintf(out_val, "Which item are you interested in? ");
4716         }
4717 #endif
4718
4719
4720         /* Get the item number to be bought */
4721         if (!get_stock(&item, out_val, 0, i - 1)) return;
4722
4723         /* Get the actual index */
4724         item = item + store_top;
4725
4726         /* Get the actual item */
4727         o_ptr = &st_ptr->stock[item];
4728
4729         /* Assume the player wants just one of them */
4730         amt = 1;
4731         j_ptr = &forge;
4732
4733         /* Get a copy of the object */
4734         object_copy(j_ptr, o_ptr);
4735
4736         /*
4737          * If a rod or wand, allocate total maximum timeouts or charges
4738          * between those purchased and left on the shelf.
4739          */
4740         reduce_charges(j_ptr, o_ptr->number - amt);
4741
4742         /* Modify quantity */
4743         j_ptr->number = amt;
4744
4745         /* Hack -- require room in pack */
4746         if (!inven_carry_okay(j_ptr))
4747         {
4748                 msg_print(_("そんなにアイテムを持てない。", "You cannot carry that many different items."));
4749                 return;
4750         }
4751
4752         /* Determine the "best" price (per item) */
4753         best = price_item(j_ptr, ot_ptr->min_inflate, FALSE);
4754
4755         /* Find out how many the player wants */
4756         if (o_ptr->number > 1)
4757         {
4758                 /* Hack -- note cost of "fixed" items */
4759                 if ((cur_store_num != STORE_HOME) &&
4760                     (o_ptr->ident & IDENT_FIXED))
4761                 {
4762                         msg_format(_("一つにつき $%ldです。", "That costs %ld gold per item."), (long)(best));
4763                 }
4764
4765                 /* Get a quantity */
4766                 amt = get_quantity(NULL, o_ptr->number);
4767
4768                 /* Allow user abort */
4769                 if (amt <= 0) return;
4770         }
4771         j_ptr = &forge;
4772
4773         /* Get desired object */
4774         object_copy(j_ptr, o_ptr);
4775
4776         /*
4777          * If a rod or wand, allocate total maximum timeouts or charges
4778          * between those purchased and left on the shelf.
4779          */
4780         reduce_charges(j_ptr, o_ptr->number - amt);
4781
4782         /* Modify quantity */
4783         j_ptr->number = amt;
4784
4785         /* Hack -- require room in pack */
4786         if (!inven_carry_okay(j_ptr))
4787         {
4788                 msg_print(_("ザックにそのアイテムを入れる隙間がない。", "You cannot carry that many items."));
4789                 return;
4790         }
4791
4792         /* Attempt to buy it */
4793         if (cur_store_num != STORE_HOME)
4794         {
4795                 /* Fixed price, quick buy */
4796                 if (o_ptr->ident & (IDENT_FIXED))
4797                 {
4798                         /* Assume accept */
4799                         choice = 0;
4800
4801                         /* Go directly to the "best" deal */
4802                         price = (best * j_ptr->number);
4803                 }
4804
4805                 /* Haggle for it */
4806                 else
4807                 {
4808                         /* Describe the object (fully) */
4809                         object_desc(o_name, j_ptr, 0);
4810                         msg_format(_("%s(%c)を購入する。", "Buying %s (%c)."), o_name, I2A(item));
4811                         msg_print(NULL);
4812
4813                         /* Haggle for a final price */
4814                         choice = purchase_haggle(j_ptr, &price);
4815
4816                         /* Hack -- Got kicked out */
4817                         if (st_ptr->store_open >= turn) return;
4818                 }
4819
4820                 /* Player wants it */
4821                 if (choice == 0)
4822                 {
4823                         /* Fix the item price (if "correctly" haggled) */
4824                         if (price == (best * j_ptr->number)) o_ptr->ident |= (IDENT_FIXED);
4825
4826                         /* Player can afford it */
4827                         if (p_ptr->au >= price)
4828                         {
4829                                 /* Say "okay" */
4830                                 say_comment_1();
4831
4832                                 if (cur_store_num == STORE_BLACK) /* The black market is illegal! */
4833                                         chg_virtue(V_JUSTICE, -1);
4834                                 if((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
4835                                         chg_virtue(V_NATURE, -1);
4836
4837                                 /* Make a sound */
4838                                 sound(SOUND_BUY);
4839
4840                                 /* Be happy */
4841                                 decrease_insults();
4842
4843                                 /* Spend the money */
4844                                 p_ptr->au -= price;
4845
4846                                 /* Update the display */
4847                                 store_prt_gold();
4848
4849                                 /* Hack -- buying an item makes you aware of it */
4850                                 object_aware(j_ptr);
4851
4852                                 /* Hack -- clear the "fixed" flag from the item */
4853                                 j_ptr->ident &= ~(IDENT_FIXED);
4854
4855                                 /* Describe the transaction */
4856                                 object_desc(o_name, j_ptr, 0);
4857
4858                                 msg_format(_("%sを $%ldで購入しました。", "You bought %s for %ld gold."), o_name, (long)price);
4859
4860                                 strcpy(record_o_name, o_name);
4861                                 record_turn = turn;
4862
4863                                 if (record_buy) do_cmd_write_nikki(NIKKI_BUY, 0, o_name);
4864                                 object_desc(o_name, o_ptr, OD_NAME_ONLY);
4865                                 if(record_rand_art && o_ptr->art_name)
4866                                         do_cmd_write_nikki(NIKKI_ART, 0, o_name);
4867
4868                                 /* Erase the inscription */
4869                                 j_ptr->inscription = 0;
4870
4871                                 /* Erase the "feeling" */
4872                                 j_ptr->feeling = FEEL_NONE;
4873                                 j_ptr->ident &= ~(IDENT_STORE);
4874                                 /* Give it to the player */
4875                                 item_new = inven_carry(j_ptr);
4876
4877                                 /* Describe the final result */
4878                                 object_desc(o_name, &inventory[item_new], 0);
4879                                 msg_format(_("%s(%c)を手に入れた。", "You have %s (%c)."), o_name, index_to_label(item_new));
4880
4881                                 /* Auto-inscription */
4882                                 autopick_alter_item(item_new, FALSE);
4883
4884                                 /* Now, reduce the original stack's pval. */
4885                                 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4886                                 {
4887                                         o_ptr->pval -= j_ptr->pval;
4888                                 }
4889                                 handle_stuff();
4890
4891                                 /* Note how many slots the store used to have */
4892                                 i = st_ptr->stock_num;
4893
4894                                 /* Remove the bought items from the store */
4895                                 store_item_increase(item, -amt);
4896                                 store_item_optimize(item);
4897
4898                                 /* Store is empty */
4899                                 if (st_ptr->stock_num == 0)
4900                                 {
4901                                         /* Shuffle */
4902                                         if (one_in_(STORE_SHUFFLE))
4903                                         {
4904                                                 char buf[80];
4905                                                 msg_print(_("店主は引退した。", "The shopkeeper retires."));
4906
4907                                                 /* Shuffle the store */
4908                                                 store_shuffle(cur_store_num);
4909
4910                                                 prt("",3,0);
4911                                                 sprintf(buf, "%s (%s)",
4912                                                         ot_ptr->owner_name, race_info[ot_ptr->owner_race].title);
4913                                                 put_str(buf, 3, 10);
4914                                                 sprintf(buf, "%s (%ld)",
4915                                                         (f_name + f_info[cur_store_feat].name), (long)(ot_ptr->max_cost));
4916                                                 prt(buf, 3, 50);
4917                                         }
4918
4919                                         /* Maintain */
4920                                         else
4921                                         {
4922                                                 msg_print(_("店主は新たな在庫を取り出した。", "The shopkeeper brings out some new stock."));
4923                                         }
4924
4925                                         /* New inventory */
4926                                         for (i = 0; i < 10; i++)
4927                                         {
4928                                                 /* Maintain the store */
4929                                                 store_maint(p_ptr->town_num, cur_store_num);
4930                                         }
4931
4932                                         /* Start over */
4933                                         store_top = 0;
4934                                         display_inventory();
4935                                 }
4936
4937                                 /* The item is gone */
4938                                 else if (st_ptr->stock_num != i)
4939                                 {
4940                                         /* Pick the correct screen */
4941                                         if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
4942                                         display_inventory();
4943                                 }
4944
4945                                 /* Item is still here */
4946                                 else
4947                                 {
4948                                         /* Redraw the item */
4949                                         display_entry(item);
4950                                 }
4951                         }
4952
4953                         /* Player cannot afford it */
4954                         else
4955                         {
4956                                 /* Simple message (no insult) */
4957                                 msg_print(_("お金が足りません。", "You do not have enough gold."));
4958                         }
4959                 }
4960         }
4961
4962         /* Home is much easier */
4963         else
4964         {
4965                 bool combined_or_reordered;
4966
4967                 /* Distribute charges of wands/rods */
4968                 distribute_charges(o_ptr, j_ptr, amt);
4969
4970                 /* Give it to the player */
4971                 item_new = inven_carry(j_ptr);
4972
4973                 /* Describe just the result */
4974                 object_desc(o_name, &inventory[item_new], 0);
4975
4976                 msg_format(_("%s(%c)を取った。", "You have %s (%c)."), o_name, index_to_label(item_new));
4977                 handle_stuff();
4978
4979                 /* Take note if we take the last one */
4980                 i = st_ptr->stock_num;
4981
4982                 /* Remove the items from the home */
4983                 store_item_increase(item, -amt);
4984                 store_item_optimize(item);
4985
4986                 combined_or_reordered = combine_and_reorder_home(STORE_HOME);
4987
4988                 /* Hack -- Item is still here */
4989                 if (i == st_ptr->stock_num)
4990                 {
4991                         if (combined_or_reordered) display_inventory();
4992
4993                         /* Redraw the item */
4994                         else display_entry(item);
4995                 }
4996
4997                 /* The item is gone */
4998                 else
4999                 {
5000                         /* Nothing left */
5001                         if (st_ptr->stock_num == 0) store_top = 0;
5002
5003                         /* Nothing left on that screen */
5004                         else if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
5005                         display_inventory();
5006
5007                         chg_virtue(V_SACRIFICE, 1);
5008                 }
5009         }
5010
5011         /* Not kicked out */
5012         return;
5013 }
5014
5015
5016 /*!
5017  * @brief 店からの売却処理のメインルーチン /
5018  * Sell an item to the store (or home)
5019  * @return なし
5020  */
5021 static void store_sell(void)
5022 {
5023         int choice;
5024         OBJECT_IDX item;
5025         int item_pos;
5026         int amt;
5027
5028         PRICE price, value, dummy;
5029
5030         object_type forge;
5031         object_type *q_ptr;
5032
5033         object_type *o_ptr;
5034
5035         concptr q, s;
5036
5037         GAME_TEXT o_name[MAX_NLEN];
5038
5039
5040         /* Prepare a prompt */
5041         if (cur_store_num == STORE_HOME)
5042                 q = _("どのアイテムを置きますか? ", "Drop which item? ");
5043
5044         else if (cur_store_num == STORE_MUSEUM)
5045                 q = _("どのアイテムを寄贈しますか? ", "Give which item? ");
5046
5047         else
5048                 q = _("どのアイテムを売りますか? ", "Sell which item? ");
5049
5050         /* Only allow items the store will buy */
5051         item_tester_hook = store_will_buy;
5052
5053         /* 我が家でおかしなメッセージが出るオリジナルのバグを修正 */
5054         if (cur_store_num == STORE_HOME)
5055         {
5056                 s = _("置けるアイテムを持っていません。", "You don't have any item to drop.");
5057         }
5058         else if (cur_store_num == STORE_MUSEUM)
5059         {
5060                 s = _("寄贈できるアイテムを持っていません。", "You don't have any item to give.");
5061         }
5062         else
5063         {
5064                 s = _("欲しい物がないですねえ。", "You have nothing that I want.");
5065         }
5066
5067         o_ptr = choose_object(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT));
5068         if (!o_ptr) return;
5069
5070         /* Hack -- Cannot remove cursed items */
5071         if ((item >= INVEN_RARM) && object_is_cursed(o_ptr))
5072         {
5073                 msg_print(_("ふーむ、どうやらそれは呪われているようだね。", "Hmmm, it seems to be cursed."));
5074                 return;
5075         }
5076
5077         /* Assume one item */
5078         amt = 1;
5079
5080         /* Find out how many the player wants (letter means "all") */
5081         if (o_ptr->number > 1)
5082         {
5083                 /* Get a quantity */
5084                 amt = get_quantity(NULL, o_ptr->number);
5085
5086                 /* Allow user abort */
5087                 if (amt <= 0) return;
5088         }
5089         q_ptr = &forge;
5090
5091         /* Get a copy of the object */
5092         object_copy(q_ptr, o_ptr);
5093
5094         /* Modify quantity */
5095         q_ptr->number = amt;
5096
5097         /*
5098          * Hack -- If a rod or wand, allocate total maximum
5099          * timeouts or charges to those being sold. -LM-
5100          */
5101         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
5102         {
5103                 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
5104         }
5105
5106         /* Get a full description */
5107         object_desc(o_name, q_ptr, 0);
5108
5109         /* Remove any inscription, feeling for stores */
5110         if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
5111         {
5112                 q_ptr->inscription = 0;
5113                 q_ptr->feeling = FEEL_NONE;
5114         }
5115
5116         /* Is there room in the store (or the home?) */
5117         if (!store_check_num(q_ptr))
5118         {
5119                 if (cur_store_num == STORE_HOME)
5120                         msg_print(_("我が家にはもう置く場所がない。", "Your home is full."));
5121
5122                 else if (cur_store_num == STORE_MUSEUM)
5123                         msg_print(_("博物館はもう満杯だ。", "Museum is full."));
5124
5125                 else
5126                         msg_print(_("すいませんが、店にはもう置く場所がありません。", "I have not the room in my store to keep it."));
5127
5128                 return;
5129         }
5130
5131
5132         /* Real store */
5133         if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
5134         {
5135                 /* Describe the transaction */
5136                 msg_format(_("%s(%c)を売却する。", "Selling %s (%c)."), o_name, index_to_label(item));
5137
5138                 msg_print(NULL);
5139
5140                 /* Haggle for it */
5141                 choice = sell_haggle(q_ptr, &price);
5142
5143                 /* Kicked out */
5144                 if (st_ptr->store_open >= turn) return;
5145
5146                 /* Sold... */
5147                 if (choice == 0)
5148                 {
5149                         /* Say "okay" */
5150                         say_comment_1();
5151
5152                         /* Make a sound */
5153                         sound(SOUND_SELL);
5154
5155                         /* Be happy */
5156                         if (cur_store_num == STORE_BLACK) /* The black market is illegal! */
5157                                 chg_virtue(V_JUSTICE, -1);
5158
5159                         if((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
5160                                 chg_virtue(V_NATURE, 1);
5161                         decrease_insults();
5162
5163                         /* Get some money */
5164                         p_ptr->au += price;
5165
5166                         /* Update the display */
5167                         store_prt_gold();
5168
5169                         /* Get the "apparent" value */
5170                         dummy = object_value(q_ptr) * q_ptr->number;
5171
5172                         identify_item(o_ptr);
5173                         q_ptr = &forge;
5174
5175                         /* Get a copy of the object */
5176                         object_copy(q_ptr, o_ptr);
5177
5178                         /* Modify quantity */
5179                         q_ptr->number = amt;
5180
5181                         /* Make it look like to be known */
5182                         q_ptr->ident |= IDENT_STORE;
5183
5184                         /*
5185                          * Hack -- If a rod or wand, let the shopkeeper know just
5186                          * how many charges he really paid for. -LM-
5187                          */
5188                         if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
5189                         {
5190                                 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
5191                         }
5192
5193                         /* Get the "actual" value */
5194                         value = object_value(q_ptr) * q_ptr->number;
5195
5196                         /* Get the description all over again */
5197                         object_desc(o_name, q_ptr, 0);
5198
5199                         /* Describe the result (in message buffer) */
5200                         msg_format(_("%sを $%ldで売却しました。", "You sold %s for %ld gold."), o_name, (long)price);
5201
5202                         if (record_sell) do_cmd_write_nikki(NIKKI_SELL, 0, o_name);
5203
5204                         if (!((o_ptr->tval == TV_FIGURINE) && (value > 0)))
5205                         {
5206                          /* Analyze the prices (and comment verbally) unless a figurine*/
5207                         purchase_analyze(price, value, dummy);
5208                         }
5209
5210                         /*
5211                          * Hack -- Allocate charges between those wands or rods sold
5212                          * and retained, unless all are being sold. -LM-
5213                          */
5214                         distribute_charges(o_ptr, q_ptr, amt);
5215
5216                         /* Reset timeouts of the sold items */
5217                         q_ptr->timeout = 0;
5218
5219                         /* Take the item from the player, describe the result */
5220                         inven_item_increase(item, -amt);
5221                         inven_item_describe(item);
5222
5223                         /* If items remain, auto-inscribe before optimizing */
5224                         if (o_ptr->number > 0)
5225                                 autopick_alter_item(item, FALSE);
5226
5227                         inven_item_optimize(item);
5228                         handle_stuff();
5229
5230                         /* The store gets that (known) item */
5231                         item_pos = store_carry(q_ptr);
5232
5233                         /* Re-display if item is now in store */
5234                         if (item_pos >= 0)
5235                         {
5236                                 store_top = (item_pos / store_bottom) * store_bottom;
5237                                 display_inventory();
5238                         }
5239                 }
5240         }
5241
5242         /* Player is at museum */
5243         else if (cur_store_num == STORE_MUSEUM)
5244         {
5245                 char o2_name[MAX_NLEN];
5246                 object_desc(o2_name, q_ptr, OD_NAME_ONLY);
5247
5248                 if (-1 == store_check_num(q_ptr))
5249                 {
5250                         msg_print(_("それと同じ品物は既に博物館にあるようです。", "The same object as it is already in the Museum."));
5251                 }
5252                 else
5253                 {
5254                         msg_print(_("博物館に寄贈したものは取り出すことができません!!", "You cannot take items which is given to the Museum back!!"));
5255                 }
5256
5257                 if (!get_check(format(_("本当に%sを寄贈しますか?", "Really give %s to the Museum? "), o2_name))) return;
5258
5259                 identify_item(q_ptr);
5260                 q_ptr->ident |= IDENT_MENTAL;
5261
5262                 /* Distribute charges of wands/rods */
5263                 distribute_charges(o_ptr, q_ptr, amt);
5264                 msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
5265                 choice = 0;
5266
5267                 /* Take it from the players inventory */
5268                 inven_item_increase(item, -amt);
5269                 inven_item_describe(item);
5270                 inven_item_optimize(item);
5271                 handle_stuff();
5272
5273                 /* Let the home carry it */
5274                 item_pos = home_carry(q_ptr);
5275
5276                 /* Update store display */
5277                 if (item_pos >= 0)
5278                 {
5279                         store_top = (item_pos / store_bottom) * store_bottom;
5280                         display_inventory();
5281                 }
5282         }
5283         /* Player is at home */
5284         else
5285         {
5286                 /* Distribute charges of wands/rods */
5287                 distribute_charges(o_ptr, q_ptr, amt);
5288                 msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
5289
5290                 choice = 0;
5291
5292                 /* Take it from the players inventory */
5293                 inven_item_increase(item, -amt);
5294                 inven_item_describe(item);
5295                 inven_item_optimize(item);
5296                 handle_stuff();
5297
5298                 /* Let the home carry it */
5299                 item_pos = home_carry(q_ptr);
5300
5301                 /* Update store display */
5302                 if (item_pos >= 0)
5303                 {
5304                         store_top = (item_pos / store_bottom) * store_bottom;
5305                         display_inventory();
5306                 }
5307         }
5308
5309         if ((choice == 0) && (item >= INVEN_RARM))
5310         {
5311                 calc_android_exp();
5312                 kamaenaoshi(item);
5313         }
5314 }
5315
5316
5317 /*!
5318  * @brief 店のアイテムを調べるコマンドのメインルーチン /
5319  * Examine an item in a store                      -JDL-
5320  * @return なし
5321  */
5322 static void store_examine(void)
5323 {
5324         int         i;
5325         COMMAND_CODE item;
5326         object_type *o_ptr;
5327         GAME_TEXT o_name[MAX_NLEN];
5328         char        out_val[160];
5329
5330         /* Empty? */
5331         if (st_ptr->stock_num <= 0)
5332         {
5333                 if (cur_store_num == STORE_HOME)
5334                         msg_print(_("我が家には何も置いてありません。", "Your home is empty."));
5335                 else if (cur_store_num == STORE_MUSEUM)
5336                         msg_print(_("博物館には何も置いてありません。", "Museum is empty."));
5337                 else
5338                         msg_print(_("現在商品の在庫を切らしています。", "I am currently out of stock."));
5339                 return;
5340         }
5341
5342         /* Find the number of objects on this and following pages */
5343         i = (st_ptr->stock_num - store_top);
5344
5345         /* And then restrict it to the current page */
5346         if (i > store_bottom) i = store_bottom;
5347
5348         /* Prompt */
5349         sprintf(out_val, _("どれを調べますか?", "Which item do you want to examine? "));
5350
5351         /* Get the item number to be examined */
5352         if (!get_stock(&item, out_val, 0, i - 1)) return;
5353
5354         /* Get the actual index */
5355         item = item + store_top;
5356
5357         /* Get the actual item */
5358         o_ptr = &st_ptr->stock[item];
5359
5360         /* Require full knowledge */
5361         if (!(o_ptr->ident & IDENT_MENTAL))
5362         {
5363                 /* This can only happen in the home */
5364                 msg_print(_("このアイテムについて特に知っていることはない。", "You have no special knowledge about that item."));
5365                 return;
5366         }
5367
5368         object_desc(o_name, o_ptr, 0);
5369         msg_format(_("%sを調べている...", "Examining %s..."), o_name);
5370
5371         if (!screen_object(o_ptr, SCROBJ_FORCE_DETAIL))
5372                 msg_print(_("特に変わったところはないようだ。", "You see nothing special."));
5373
5374         return;
5375 }
5376
5377
5378 /*!
5379  * @brief 博物館のアイテムを除去するコマンドのメインルーチン /
5380  * Remove an item from museum (Originally from TOband)
5381  * @return なし
5382  */
5383 static void museum_remove_object(void)
5384 {
5385         int i;
5386         COMMAND_CODE item;
5387         object_type *o_ptr;
5388         GAME_TEXT o_name[MAX_NLEN];
5389         char out_val[160];
5390
5391         /* Empty? */
5392         if (st_ptr->stock_num <= 0)
5393         {
5394                 msg_print(_("博物館には何も置いてありません。", "Museum is empty."));
5395                 return;
5396         }
5397
5398         /* Find the number of objects on this and following pages */
5399         i = st_ptr->stock_num - store_top;
5400
5401         /* And then restrict it to the current page */
5402         if (i > store_bottom) i = store_bottom;
5403
5404         /* Prompt */
5405         sprintf(out_val, _("どのアイテムの展示をやめさせますか?", "Which item do you want to order to remove? "));
5406
5407         /* Get the item number to be removed */
5408         if (!get_stock(&item, out_val, 0, i - 1)) return;
5409
5410         /* Get the actual index */
5411         item = item + store_top;
5412
5413         /* Get the actual item */
5414         o_ptr = &st_ptr->stock[item];
5415
5416         object_desc(o_name, o_ptr, 0);
5417
5418         msg_print(_("展示をやめさせたアイテムは二度と見ることはできません!", "You cannot see items which is removed from the Museum!"));
5419         if (!get_check(format(_("本当に%sの展示をやめさせますか?", "Really order to remove %s from the Museum? "), o_name))) return;
5420
5421         msg_format(_("%sの展示をやめさせた。", "You ordered to remove %s."), o_name);
5422
5423         /* Remove the items from the home */
5424         store_item_increase(item, -o_ptr->number);
5425         store_item_optimize(item);
5426
5427         (void)combine_and_reorder_home(STORE_MUSEUM);
5428
5429         /* The item is gone */
5430
5431         /* Nothing left */
5432         if (st_ptr->stock_num == 0) store_top = 0;
5433
5434         /* Nothing left on that screen */
5435         else if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
5436         display_inventory();
5437
5438         return;
5439 }
5440
5441
5442 /*
5443  * Hack -- set this to leave the store
5444  */
5445 static bool leave_store = FALSE;
5446
5447
5448 /*!
5449  * @brief 店舗処理コマンド選択のメインルーチン /
5450  * Process a command in a store
5451  * @return なし
5452  * @note
5453  * <pre>
5454  * Note that we must allow the use of a few "special" commands
5455  * in the stores which are not allowed in the dungeon, and we
5456  * must disable some commands which are allowed in the dungeon
5457  * but not in the stores, to prevent chaos.
5458  * </pre>
5459  */
5460 static void store_process_command(void)
5461 {
5462         /* Handle repeating the last command */
5463         repeat_check();
5464
5465         if (rogue_like_commands && command_cmd == 'l')
5466         {
5467                 command_cmd = 'x';      /* hack! */
5468         }
5469
5470         /* Parse the command */
5471         switch (command_cmd)
5472         {
5473                 /* Leave */
5474                 case ESCAPE:
5475                 {
5476                         leave_store = TRUE;
5477                         break;
5478                 }
5479
5480                 /* 日本語版追加 */
5481                 /* 1 ページ戻るコマンド: 我が家のページ数が多いので重宝するはず By BUG */
5482                 case '-':
5483                 {
5484                         if (st_ptr->stock_num <= store_bottom) {
5485                                 msg_print(_("これで全部です。", "Entire inventory is shown."));
5486                         }
5487                         else{
5488                                 store_top -= store_bottom;
5489                                 if ( store_top < 0 )
5490                                         store_top = ((st_ptr->stock_num - 1 )/store_bottom) * store_bottom;
5491                                 if ( (cur_store_num == STORE_HOME) && (powerup_home == FALSE) )
5492                                         if ( store_top >= store_bottom ) store_top = store_bottom;
5493                                 display_inventory();
5494                         }
5495                         break;
5496                 }
5497
5498                 /* Browse */
5499                 case ' ':
5500                 {
5501                         if (st_ptr->stock_num <= store_bottom)
5502                         {
5503                                 msg_print(_("これで全部です。", "Entire inventory is shown."));
5504                         }
5505                         else
5506                         {
5507                                 store_top += store_bottom;
5508                                 /*
5509                                  * 隠しオプション(powerup_home)がセットされていないときは
5510                                  * 我が家では 2 ページまでしか表示しない
5511                                  */
5512                                 if ((cur_store_num == STORE_HOME) && 
5513                                     (powerup_home == FALSE) && 
5514                                         (st_ptr->stock_num >= STORE_INVEN_MAX))
5515                                 {
5516                                         if (store_top >= (STORE_INVEN_MAX - 1))
5517                                         {
5518                                                 store_top = 0;
5519                                         }
5520                                 }
5521                                 else
5522                                 {
5523                                         if (store_top >= st_ptr->stock_num) store_top = 0;
5524                                 }
5525
5526                                 display_inventory();
5527                         }
5528                         break;
5529                 }
5530
5531                 case KTRL('R'):
5532                 {
5533                         do_cmd_redraw();
5534                         display_store();
5535                         break;
5536                 }
5537
5538                 /* Get (purchase) */
5539                 case 'g':
5540                 {
5541                         store_purchase();
5542                         break;
5543                 }
5544
5545                 /* Drop (Sell) */
5546                 case 'd':
5547                 {
5548                         store_sell();
5549                         break;
5550                 }
5551
5552                 /* Examine */
5553                 case 'x':
5554                 {
5555                         store_examine();
5556                         break;
5557                 }
5558
5559                 /* Ignore return */
5560                 case '\r':
5561                 {
5562                         break;
5563                 }
5564
5565                 /*** Inventory Commands ***/
5566
5567                 /* Wear/wield equipment */
5568                 case 'w':
5569                 {
5570                         do_cmd_wield();
5571                         break;
5572                 }
5573
5574                 /* Take off equipment */
5575                 case 't':
5576                 {
5577                         do_cmd_takeoff();
5578                         break;
5579                 }
5580
5581                 /* Destroy an item */
5582                 case 'k':
5583                 {
5584                         do_cmd_destroy();
5585                         break;
5586                 }
5587
5588                 /* Equipment list */
5589                 case 'e':
5590                 {
5591                         do_cmd_equip();
5592                         break;
5593                 }
5594
5595                 /* Inventory list */
5596                 case 'i':
5597                 {
5598                         do_cmd_inven();
5599                         break;
5600                 }
5601
5602
5603                 /*** Various commands ***/
5604
5605                 /* Identify an object */
5606                 case 'I':
5607                 {
5608                         do_cmd_observe();
5609                         break;
5610                 }
5611
5612                 /* Hack -- toggle windows */
5613                 case KTRL('I'):
5614                 {
5615                         toggle_inven_equip();
5616                         break;
5617                 }
5618
5619                 /*** Use various objects ***/
5620
5621                 /* Browse a book */
5622                 case 'b':
5623                 {
5624                         if ( (p_ptr->pclass == CLASS_MINDCRAFTER) ||
5625                              (p_ptr->pclass == CLASS_BERSERKER) ||
5626                              (p_ptr->pclass == CLASS_NINJA) ||
5627                              (p_ptr->pclass == CLASS_MIRROR_MASTER) 
5628                              ) do_cmd_mind_browse();
5629                         else if (p_ptr->pclass == CLASS_SMITH)
5630                                 do_cmd_kaji(TRUE);
5631                         else if (p_ptr->pclass == CLASS_MAGIC_EATER)
5632                                 do_cmd_magic_eater(TRUE, FALSE);
5633                         else if (p_ptr->pclass == CLASS_SNIPER)
5634                                 do_cmd_snipe_browse();
5635                         else do_cmd_browse();
5636                         break;
5637                 }
5638
5639                 /* Inscribe an object */
5640                 case '{':
5641                 {
5642                         do_cmd_inscribe();
5643                         break;
5644                 }
5645
5646                 /* Uninscribe an object */
5647                 case '}':
5648                 {
5649                         do_cmd_uninscribe();
5650                         break;
5651                 }
5652
5653
5654
5655                 /*** Help and Such ***/
5656
5657                 /* Help */
5658                 case '?':
5659                 {
5660                         do_cmd_help();
5661                         break;
5662                 }
5663
5664                 /* Identify symbol */
5665                 case '/':
5666                 {
5667                         do_cmd_query_symbol();
5668                         break;
5669                 }
5670
5671                 /* Character description */
5672                 case 'C':
5673                 {
5674                         p_ptr->town_num = old_town_num;
5675                         do_cmd_change_name();
5676                         p_ptr->town_num = inner_town_num;
5677                         display_store();
5678                         break;
5679                 }
5680
5681
5682                 /*** System Commands ***/
5683
5684                 /* Hack -- User interface */
5685                 case '!':
5686                 {
5687                         (void)Term_user(0);
5688                         break;
5689                 }
5690
5691                 /* Single line from a pref file */
5692                 case '"':
5693                 {
5694                         p_ptr->town_num = old_town_num;
5695                         do_cmd_pref();
5696                         p_ptr->town_num = inner_town_num;
5697                         break;
5698                 }
5699
5700                 /* Interact with macros */
5701                 case '@':
5702                 {
5703                         p_ptr->town_num = old_town_num;
5704                         do_cmd_macros();
5705                         p_ptr->town_num = inner_town_num;
5706                         break;
5707                 }
5708
5709                 /* Interact with visuals */
5710                 case '%':
5711                 {
5712                         p_ptr->town_num = old_town_num;
5713                         do_cmd_visuals();
5714                         p_ptr->town_num = inner_town_num;
5715                         break;
5716                 }
5717
5718                 /* Interact with colors */
5719                 case '&':
5720                 {
5721                         p_ptr->town_num = old_town_num;
5722                         do_cmd_colors();
5723                         p_ptr->town_num = inner_town_num;
5724                         break;
5725                 }
5726
5727                 /* Interact with options */
5728                 case '=':
5729                 {
5730                         do_cmd_options();
5731                         (void)combine_and_reorder_home(STORE_HOME);
5732                         do_cmd_redraw();
5733                         display_store();
5734                         break;
5735                 }
5736
5737                 /*** Misc Commands ***/
5738
5739                 /* Take notes */
5740                 case ':':
5741                 {
5742                         do_cmd_note();
5743                         break;
5744                 }
5745
5746                 /* Version info */
5747                 case 'V':
5748                 {
5749                         do_cmd_version();
5750                         break;
5751                 }
5752
5753                 /* Repeat level feeling */
5754                 case KTRL('F'):
5755                 {
5756                         do_cmd_feeling();
5757                         break;
5758                 }
5759
5760                 /* Show previous message */
5761                 case KTRL('O'):
5762                 {
5763                         do_cmd_message_one();
5764                         break;
5765                 }
5766
5767                 /* Show previous messages */
5768                 case KTRL('P'):
5769                 {
5770                         do_cmd_messages(0);
5771                         break;
5772                 }
5773
5774                 case '|':
5775                 {
5776                         do_cmd_nikki();
5777                         break;
5778                 }
5779
5780                 /* Check artifacts, uniques etc. */
5781                 case '~':
5782                 {
5783                         do_cmd_knowledge();
5784                         break;
5785                 }
5786
5787                 /* Load "screen dump" */
5788                 case '(':
5789                 {
5790                         do_cmd_load_screen();
5791                         break;
5792                 }
5793
5794                 /* Save "screen dump" */
5795                 case ')':
5796                 {
5797                         do_cmd_save_screen();
5798                         break;
5799                 }
5800
5801                 /* Hack -- Unknown command */
5802                 default:
5803                 {
5804                         if ((cur_store_num == STORE_MUSEUM) && (command_cmd == 'r'))
5805                         {
5806                                 museum_remove_object();
5807                         }
5808                         else
5809                         {
5810                                 msg_print(_("そのコマンドは店の中では使えません。", "That command does not work in stores."));
5811                         }
5812                         break;
5813                 }
5814         }
5815 }
5816
5817
5818 /*!
5819  * @brief 店舗処理全体のメインルーチン /
5820  * Enter a store, and interact with it. *
5821  * @return なし
5822  * @note
5823  * <pre>
5824  * Note that we use the standard "request_command()" function
5825  * to get a command, allowing us to use "command_arg" and all
5826  * command macros and other nifty stuff, but we use the special
5827  * "shopping" argument, to force certain commands to be converted
5828  * into other commands, normally, we convert "p" (pray) and "m"
5829  * (cast magic) into "g" (get), and "s" (search) into "d" (drop).
5830  * </pre>
5831  */
5832 void do_cmd_store(void)
5833 {
5834         int which;
5835         int maintain_num;
5836         int i;
5837         cave_type *c_ptr;
5838         bool need_redraw_store_inv; /* To redraw missiles damage and prices in store */
5839         TERM_LEN w, h;
5840
5841         if(p_ptr->wild_mode) return;
5842         Term_get_size(&w, &h);
5843
5844         /* Calculate stocks per 1 page */
5845         xtra_stock = MIN(14+26, ((h > 24) ? (h - 24) : 0));
5846         store_bottom = MIN_STOCK + xtra_stock;
5847
5848         /* Access the player grid */
5849         c_ptr = &cave[p_ptr->y][p_ptr->x];
5850
5851         /* Verify a store */
5852         if (!cave_have_flag_grid(c_ptr, FF_STORE))
5853         {
5854                 msg_print(_("ここには店がありません。", "You see no store here."));
5855                 return;
5856         }
5857
5858         /* Extract the store code */
5859         which = f_info[c_ptr->feat].subtype;
5860
5861         old_town_num = p_ptr->town_num;
5862         if ((which == STORE_HOME) || (which == STORE_MUSEUM)) p_ptr->town_num = 1;
5863         if (dun_level) p_ptr->town_num = NO_TOWN;
5864         inner_town_num = p_ptr->town_num;
5865
5866         /* Hack -- Check the "locked doors" */
5867         if ((town[p_ptr->town_num].store[which].store_open >= turn) ||
5868             (ironman_shops))
5869         {
5870                 msg_print(_("ドアに鍵がかかっている。", "The doors are locked."));
5871                 p_ptr->town_num = old_town_num;
5872                 return;
5873         }
5874
5875         /* Calculate the number of store maintainances since the last visit */
5876         maintain_num = (turn - town[p_ptr->town_num].store[which].last_visit) / (TURNS_PER_TICK * STORE_TICKS);
5877
5878         /* Maintain the store max. 10 times */
5879         if (maintain_num > 10) maintain_num = 10;
5880
5881         if (maintain_num)
5882         {
5883                 /* Maintain the store */
5884                 for (i = 0; i < maintain_num; i++)
5885                         store_maint(p_ptr->town_num, which);
5886
5887                 /* Save the visit */
5888                 town[p_ptr->town_num].store[which].last_visit = turn;
5889         }
5890
5891         forget_lite();
5892         forget_view();
5893
5894         /* Hack -- Character is in "icky" mode */
5895         character_icky = TRUE;
5896
5897         /* command reset */
5898         command_arg = 0;
5899         command_rep = 0;
5900         command_new = 0;
5901
5902         /* Do not expand macros */
5903         get_com_no_macros = TRUE;
5904
5905         /* Save the store number */
5906         cur_store_num = which;
5907
5908         /* Hack -- save the store feature */
5909         cur_store_feat = c_ptr->feat;
5910
5911         /* Save the store and owner pointers */
5912         st_ptr = &town[p_ptr->town_num].store[cur_store_num];
5913         ot_ptr = &owners[cur_store_num][st_ptr->owner];
5914
5915         /* Start at the beginning */
5916         store_top = 0;
5917
5918         play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BUILD);
5919
5920         display_store();
5921
5922         /* Do not leave */
5923         leave_store = FALSE;
5924
5925         /* Interact with player */
5926         while (!leave_store)
5927         {
5928                 /* Hack -- Clear line 1 */
5929                 prt("", 1, 0);
5930
5931                 /* Clear */
5932                 clear_from(20 + xtra_stock);
5933
5934                 /* Basic commands */
5935                 prt(_(" ESC) 建物から出る", " ESC) Exit from Building."), 21 + xtra_stock, 0);
5936
5937                 /* Browse if necessary */
5938                 if (st_ptr->stock_num > store_bottom)
5939                 {
5940                         prt(_(" -)前ページ", " -) Previous page"), 22 + xtra_stock, 0);
5941                         prt(_(" スペース) 次ページ", " SPACE) Next page"), 23 + xtra_stock, 0);
5942                 }
5943
5944                 /* Home commands */
5945                 if (cur_store_num == STORE_HOME)
5946                 {
5947                         prt(_("g) アイテムを取る", "g) Get an item."), 21 + xtra_stock, 27);
5948                         prt(_("d) アイテムを置く", "d) Drop an item."), 22 + xtra_stock, 27);
5949                         prt(_("x) 家のアイテムを調べる", "x) eXamine an item in the home."), 23 + xtra_stock, 27);
5950                 }
5951
5952                 /* Museum commands */
5953                 else if (cur_store_num == STORE_MUSEUM)
5954                 {
5955                         prt(_("d) アイテムを置く", "d) Drop an item."), 21 + xtra_stock, 27);
5956                         prt(_("r) アイテムの展示をやめる", "r) order to Remove an item."), 22 + xtra_stock, 27);
5957                         prt(_("x) 博物館のアイテムを調べる", "x) eXamine an item in the museum."), 23 + xtra_stock, 27);
5958                 }
5959
5960                 /* Shop commands */
5961                 else
5962                 {
5963                         prt(_("p) 商品を買う", "p) Purchase an item."), 21 + xtra_stock, 30);
5964                         prt(_("s) アイテムを売る", "s) Sell an item."), 22 + xtra_stock, 30);
5965                         prt(_("x) 商品を調べる", "x) eXamine an item in the shop"), 23 + xtra_stock,30);
5966                 }
5967
5968                 /* 基本的なコマンドの追加表示 */
5969                 prt(_("i/e) 持ち物/装備の一覧", "i/e) Inventry/Equipment list"), 21 + xtra_stock, 56);
5970
5971                 if (rogue_like_commands)
5972                 {
5973                         prt(_("w/T) 装備する/はずす", "w/T) Wear/Take off equipment"), 22 + xtra_stock, 56);
5974                 }
5975                 else
5976                 {
5977                         prt(_("w/t) 装備する/はずす", "w/t) Wear/Take off equipment"), 22 + xtra_stock, 56);
5978                 }
5979
5980                 /* Prompt */
5981                 prt(_("コマンド:", "You may: "), 20 + xtra_stock, 0);
5982
5983                 request_command(TRUE);
5984
5985                 /* Process the command */
5986                 store_process_command();
5987
5988                 /*
5989                  * Hack -- To redraw missiles damage and prices in store
5990                  * If player's charisma changes, or if player changes a bow, PU_BONUS is set
5991                  */
5992                 need_redraw_store_inv = (p_ptr->update & PU_BONUS) ? TRUE : FALSE;
5993
5994                 /* Hack -- Character is still in "icky" mode */
5995                 character_icky = TRUE;
5996
5997                 handle_stuff();
5998
5999                 /* Pack Overflow */
6000                 if (inventory[INVEN_PACK].k_idx)
6001                 {
6002                         INVENTORY_IDX item = INVEN_PACK;
6003
6004                         object_type *o_ptr = &inventory[item];
6005
6006                         /* Hack -- Flee from the store */
6007                         if (cur_store_num != STORE_HOME)
6008                         {
6009                                 if (cur_store_num == STORE_MUSEUM)
6010                                         msg_print(_("ザックからアイテムがあふれそうなので、あわてて博物館から出た...", "Your pack is so full that you flee the Museum..."));
6011                                 else
6012                                         msg_print(_("ザックからアイテムがあふれそうなので、あわてて店から出た...", "Your pack is so full that you flee the store..."));
6013
6014                                 /* Leave */
6015                                 leave_store = TRUE;
6016                         }
6017
6018                         /* Hack -- Flee from the home */
6019                         else if (!store_check_num(o_ptr))
6020                         {
6021                                 msg_print(_("ザックからアイテムがあふれそうなので、あわてて家から出た...", "Your pack is so full that you flee your home..."));
6022                                 /* Leave */
6023                                 leave_store = TRUE;
6024                         }
6025
6026                         /* Hack -- Drop items into the home */
6027                         else
6028                         {
6029                                 int item_pos;
6030
6031                                 object_type forge;
6032                                 object_type *q_ptr;
6033
6034                                 GAME_TEXT o_name[MAX_NLEN];
6035
6036                                 /* Give a message */
6037                                 msg_print(_("ザックからアイテムがあふれてしまった!", "Your pack overflows!"));
6038
6039                                 q_ptr = &forge;
6040
6041                                 object_copy(q_ptr, o_ptr);
6042                                 object_desc(o_name, q_ptr, 0);
6043
6044                                 msg_format(_("%sが落ちた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
6045
6046                                 /* Remove it from the players inventory */
6047                                 inven_item_increase(item, -255);
6048                                 inven_item_describe(item);
6049                                 inven_item_optimize(item);
6050                                 handle_stuff();
6051
6052                                 /* Let the home carry it */
6053                                 item_pos = home_carry(q_ptr);
6054
6055                                 /* Redraw the home */
6056                                 if (item_pos >= 0)
6057                                 {
6058                                         store_top = (item_pos / store_bottom) * store_bottom;
6059                                         display_inventory();
6060                                 }
6061                         }
6062                 }
6063
6064                 /* Hack -- Redisplay store prices if charisma changes */
6065                 /* Hack -- Redraw missiles damage if player changes bow */
6066                 if (need_redraw_store_inv) display_inventory();
6067
6068                 /* Hack -- get kicked out of the store */
6069                 if (st_ptr->store_open >= turn) leave_store = TRUE;
6070         }
6071
6072         select_floor_music();
6073
6074         p_ptr->town_num = old_town_num;
6075
6076         take_turn(p_ptr, 100);;
6077
6078         /* Hack -- Character is no longer in "icky" mode */
6079         character_icky = FALSE;
6080
6081         /* Hack -- Cancel automatic command */
6082         command_new = 0;
6083
6084         /* Hack -- Cancel "see" mode */
6085         command_see = FALSE;
6086
6087         /* Allow expanding macros */
6088         get_com_no_macros = FALSE;
6089
6090         msg_erase();
6091         Term_clear();
6092
6093         /* Update everything */
6094         p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
6095         p_ptr->update |= (PU_MONSTERS);
6096
6097         /* Redraw entire screen */
6098         p_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY);
6099         p_ptr->redraw |= (PR_MAP);
6100         p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
6101 }
6102
6103
6104
6105 /*!
6106  * @brief 現在の町の店主を交代させる /
6107  * Shuffle one of the stores.
6108  * @param which 店舗種類のID
6109  * @return なし
6110  */
6111 void store_shuffle(int which)
6112 {
6113         int i, j;
6114
6115
6116         /* Ignore home */
6117         if (which == STORE_HOME) return;
6118         if (which == STORE_MUSEUM) return;
6119
6120
6121         /* Save the store index */
6122         cur_store_num = which;
6123
6124         /* Activate that store */
6125         st_ptr = &town[p_ptr->town_num].store[cur_store_num];
6126
6127         j = st_ptr->owner;
6128         /* Pick a new owner */
6129         while(1)
6130         {
6131                 st_ptr->owner = (byte)randint0(MAX_OWNERS);
6132                 if (j == st_ptr->owner) continue;
6133                 for (i = 1;i < max_towns; i++)
6134                 {
6135                         if (i == p_ptr->town_num) continue;
6136                         if (st_ptr->owner == town[i].store[cur_store_num].owner) break;
6137                 }
6138                 if (i == max_towns) break;
6139         }
6140
6141         /* Activate the new owner */
6142         ot_ptr = &owners[cur_store_num][st_ptr->owner];
6143
6144
6145         /* Reset the owner data */
6146         st_ptr->insult_cur = 0;
6147         st_ptr->store_open = 0;
6148         st_ptr->good_buy = 0;
6149         st_ptr->bad_buy = 0;
6150
6151
6152         /* Hack -- discount all the items */
6153         for (i = 0; i < st_ptr->stock_num; i++)
6154         {
6155                 object_type *o_ptr;
6156
6157                 o_ptr = &st_ptr->stock[i];
6158
6159                 if (!object_is_artifact(o_ptr))
6160                 {
6161                         /* Hack -- Sell all non-artifact old items for "half price" */
6162                         o_ptr->discount = 50;
6163
6164                         /* Hack -- Items are no longer "fixed price" */
6165                         o_ptr->ident &= ~(IDENT_FIXED);
6166
6167                         /* Mega-Hack -- Note that the item is "on sale" */
6168                         o_ptr->inscription = quark_add(_("売出中", "on sale"));
6169                 }
6170         }
6171 }
6172
6173
6174 /*!
6175  * @brief 店の品揃えを変化させる /
6176  * Maintain the inventory at the stores.
6177  * @param town_num 町のID
6178  * @param store_num 店舗種類のID
6179  * @return なし
6180  */
6181 void store_maint(int town_num, int store_num)
6182 {
6183         INVENTORY_IDX j;
6184
6185         cur_store_num = store_num;
6186
6187         /* Ignore home */
6188         if (store_num == STORE_HOME) return;
6189         if (store_num == STORE_MUSEUM) return;
6190
6191         /* Activate that store */
6192         st_ptr = &town[town_num].store[store_num];
6193
6194         /* Activate the owner */
6195         ot_ptr = &owners[store_num][st_ptr->owner];
6196
6197         /* Store keeper forgives the player */
6198         st_ptr->insult_cur = 0;
6199
6200         /* Mega-Hack -- prune the black market */
6201         if (store_num == STORE_BLACK)
6202         {
6203                 /* Destroy crappy black market items */
6204                 for (j = st_ptr->stock_num - 1; j >= 0; j--)
6205                 {
6206                         object_type *o_ptr = &st_ptr->stock[j];
6207
6208                         /* Destroy crappy items */
6209                         if (black_market_crap(o_ptr))
6210                         {
6211                                 /* Destroy the item */
6212                                 store_item_increase(j, 0 - o_ptr->number);
6213                                 store_item_optimize(j);
6214                         }
6215                 }
6216         }
6217
6218
6219         /* Choose the number of slots to keep */
6220         j = st_ptr->stock_num;
6221
6222         /* Sell a few items */
6223         j = j - randint1(STORE_TURNOVER);
6224
6225         /* Never keep more than "STORE_MAX_KEEP" slots */
6226         if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
6227
6228         /* Always "keep" at least "STORE_MIN_KEEP" items */
6229         if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
6230
6231         /* Hack -- prevent "underflow" */
6232         if (j < 0) j = 0;
6233
6234         /* Destroy objects until only "j" slots are left */
6235         while (st_ptr->stock_num > j) store_delete();
6236
6237
6238         /* Choose the number of slots to fill */
6239         j = st_ptr->stock_num;
6240
6241         /* Buy some more items */
6242         j = j + randint1(STORE_TURNOVER);
6243
6244         /* Never keep more than "STORE_MAX_KEEP" slots */
6245         if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
6246
6247         /* Always "keep" at least "STORE_MIN_KEEP" items */
6248         if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
6249
6250         /* Hack -- prevent "overflow" */
6251         if (j >= st_ptr->stock_size) j = st_ptr->stock_size - 1;
6252
6253         /* Acquire some new items */
6254         while (st_ptr->stock_num < j) store_create();
6255 }
6256
6257
6258 /*!
6259  * @brief 店舗情報を初期化する /
6260  * Initialize the stores
6261  * @param town_num 町のID
6262  * @param store_num 店舗種類のID
6263  * @return なし
6264  */
6265 void store_init(int town_num, int store_num)
6266 {
6267         int k;
6268         cur_store_num = store_num;
6269
6270         /* Activate that store */
6271         st_ptr = &town[town_num].store[store_num];
6272
6273
6274         /* Pick an owner */
6275         while(1)
6276         {
6277                 int i;
6278
6279                 st_ptr->owner = (byte)randint0(MAX_OWNERS);
6280                 for (i = 1;i < max_towns; i++)
6281                 {
6282                         if (i == town_num) continue;
6283                         if (st_ptr->owner == town[i].store[store_num].owner) break;
6284                 }
6285                 if (i == max_towns) break;
6286         }
6287
6288         /* Activate the new owner */
6289         ot_ptr = &owners[store_num][st_ptr->owner];
6290
6291
6292         /* Initialize the store */
6293         st_ptr->store_open = 0;
6294         st_ptr->insult_cur = 0;
6295         st_ptr->good_buy = 0;
6296         st_ptr->bad_buy = 0;
6297
6298         /* Nothing in stock */
6299         st_ptr->stock_num = 0;
6300
6301         /*
6302          * MEGA-HACK - Last visit to store is
6303          * BEFORE player birth to enable store restocking
6304          */
6305         st_ptr->last_visit = -10L * TURNS_PER_TICK * STORE_TICKS;
6306
6307         /* Clear any old items */
6308         for (k = 0; k < st_ptr->stock_size; k++)
6309         {
6310                 object_wipe(&st_ptr->stock[k]);
6311         }
6312 }
6313
6314
6315 /*!
6316  * @brief アイテムを町のブラックマーケットに移動させる /
6317  * @param o_ptr 移動させたいオブジェクトの構造体参照ポインタ
6318  * @return なし
6319  */
6320 void move_to_black_market(object_type *o_ptr)
6321 {
6322         /* Not in town */
6323         if (!p_ptr->town_num) return;
6324
6325         st_ptr = &town[p_ptr->town_num].store[STORE_BLACK];
6326
6327         o_ptr->ident |= IDENT_STORE;
6328
6329         (void)store_carry(o_ptr);
6330
6331         object_wipe(o_ptr); /* Don't leave a bogus object behind... */
6332 }
6333