3 * @brief 店の処理 / Store commands
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.
19 #include "io/write-diary.h"
20 #include "cmd/cmd-basic.h"
21 #include "cmd/cmd-diary.h"
22 #include "cmd/cmd-draw.h"
23 #include "cmd/cmd-dump.h"
24 #include "cmd/cmd-help.h"
25 #include "cmd/cmd-item.h"
26 #include "cmd/cmd-macro.h"
27 #include "cmd/cmd-smith.h"
28 #include "cmd/cmd-zapwand.h"
29 #include "cmd/cmd-magiceat.h"
33 #include "cmd-spell.h"
35 #include "player-status.h"
36 #include "player-class.h"
37 #include "player-inventory.h"
38 #include "object-flavor.h"
39 #include "object-hook.h"
40 #include "floor-events.h"
43 #include "player-effects.h"
44 #include "player-race.h"
47 #include "objectkind.h"
49 #include "floor-town.h"
51 #include "view-mainwindow.h"
57 * @brief 闘技場のモンスターID及び報酬アイテムテーブル /
58 * Store owners (exactly four "possible" owners per store, chosen randomly)
61 * { name, purse, max greed, min greed, haggle_per, tolerance, race, unused }
63 * Lifted extra shopkeepers from CthAngband (don't you just love open source
64 * development? ;-)). Since this gave less than 32 unique names for some
65 * shops, those have their first x names copied to reach 32.
67 * For the weapon and armour shops, several owners have a limit of 5k.
69 * I want to do 50k owners, but the purse is currently s16b. Perhaps
70 * we should just store 1/10th of the purse?
73 const owner_type owners[MAX_STORES][MAX_OWNERS] =
76 /* General store - 32 unique names */
78 Raistlin は dragonlance の powerful wizard 。
79 Rincewind the Chicken は Terry Pratchett の Discworld の登場人物 上記のパロディ?、
80 { "憶病者ラストリン", 200, 175, 108, 4, 12, RACE_HUMAN},
81 { "Raistlin the Chicken", 200, 175, 108, 4, 12, RACE_HUMAN},
85 { "フレンドリーなビルボ", 200, 170, 108, 5, 15, RACE_HOBBIT},
86 { "憶病者リンスウィンド", 200, 175, 108, 4, 12, RACE_HUMAN},
87 { "背の低いサルタン", 300, 170, 107, 5, 15, RACE_GNOME},
88 { "ハンサムなライア=エル", 300, 165, 107, 6, 18, RACE_ELF},
89 { "親切なファリルマウエン", 250, 170, 108, 5, 15, RACE_HOBBIT},
90 { "臆病者ヴォワラン", 500, 175, 108, 4, 12, RACE_HUMAN},
91 { "チビのエラシュナク", 750, 170, 107, 5, 15, RACE_BEASTMAN},
92 { "ハンサムなグラッグ", 1000, 165, 107, 6, 18, RACE_HALF_TITAN},
93 { "ケチなフォロビア", 250, 170, 108, 5, 15, RACE_HUMAN},
94 { "馬鹿のエリス", 500, 175, 108, 4, 12, RACE_HUMAN},
95 { "腹ペコのフィルバート", 750, 170, 107, 5, 15, RACE_VAMPIRE},
96 { "スナーグル・サシグア", 1000, 165, 107, 6, 18, RACE_MIND_FLAYER},
97 { "長死きエロワーズ", 250, 170, 108, 5, 15, RACE_SPECTRE},
98 { "ノロマのフンディ", 500, 175, 108, 4, 12, RACE_ZOMBIE},
99 { "グランサス", 750, 170, 107, 5, 15, RACE_SKELETON},
100 { "丁寧なロラックス", 1000, 165, 107, 6, 18, RACE_VAMPIRE},
101 { "ブッチ", 250, 170, 108, 5, 15, RACE_HALF_ORC},
102 { "美しきエルベレス", 500, 175, 108, 4, 12, RACE_HIGH_ELF},
103 { "こそこそサーレス", 750, 170, 107, 5, 15, RACE_GNOME},
104 { "ナーロック", 1000, 165, 107, 6, 18, RACE_DWARF},
105 { "チビのヘイネッカ", 250, 170, 108, 5, 15, RACE_GNOME},
106 { "きちがいロワラン", 500, 175, 108, 4, 12, RACE_HALF_GIANT},
107 { "毒息のウート", 750, 170, 107, 5, 15, RACE_DRACONIAN},
108 { "でぶっちょアラァカ", 1000, 165, 107, 6, 18, RACE_DRACONIAN},
109 { "低能なプーゴー", 250, 170, 108, 5, 15, RACE_BEASTMAN},
110 { "フェロールフィリアン", 500, 175, 108, 4, 12, RACE_ELF},
111 { "年寄りマロカ", 750, 170, 107, 5, 15, RACE_GNOME},
112 { "勇敢なサシン", 1000, 165, 107, 6, 18, RACE_HALF_GIANT},
113 { "田舎者アビエマール", 250, 170, 108, 5, 15, RACE_HUMAN},
114 { "貧乏なハーク", 500, 175, 108, 4, 12, RACE_HALF_ORC},
115 { "みじめなソアリン", 750, 170, 107, 5, 15, RACE_ZOMBIE},
116 { "質素なメルラ", 1000, 165, 107, 6, 18, RACE_ELF},
118 { "Bilbo the Friendly", 200, 170, 108, 5, 15, RACE_HOBBIT},
119 { "Rincewind the Chicken", 200, 175, 108, 4, 12, RACE_HUMAN},
120 { "Sultan the Midget", 300, 170, 107, 5, 15, RACE_GNOME},
121 { "Lyar-el the Comely", 300, 165, 107, 6, 18, RACE_ELF},
122 { "Falilmawen the Friendly", 250, 170, 108, 5, 15, RACE_HOBBIT},
123 { "Voirin the Cowardly", 500, 175, 108, 4, 12, RACE_HUMAN},
124 { "Erashnak the Midget", 750, 170, 107, 5, 15, RACE_BEASTMAN},
125 { "Grug the Comely", 1000, 165, 107, 6, 18, RACE_HALF_TITAN},
126 { "Forovir the Cheap", 250, 170, 108, 5, 15, RACE_HUMAN},
127 { "Ellis the Fool", 500, 175, 108, 4, 12, RACE_HUMAN},
128 { "Filbert the Hungry", 750, 170, 107, 5, 15, RACE_VAMPIRE},
129 { "Fthnargl Psathiggua", 1000, 165, 107, 6, 18, RACE_MIND_FLAYER},
130 { "Eloise Long-Dead", 250, 170, 108, 5, 15, RACE_SPECTRE},
131 { "Fundi the Slow", 500, 175, 108, 4, 12, RACE_ZOMBIE},
132 { "Granthus", 750, 170, 107, 5, 15, RACE_SKELETON},
133 { "Lorax the Suave", 1000, 165, 107, 6, 18, RACE_VAMPIRE},
134 { "Butch", 250, 170, 108, 5, 15, RACE_HALF_ORC},
135 { "Elbereth the Beautiful", 500, 175, 108, 4, 12, RACE_HIGH_ELF},
136 { "Sarleth the Sneaky", 750, 170, 107, 5, 15, RACE_GNOME},
137 { "Narlock", 1000, 165, 107, 6, 18, RACE_DWARF},
138 { "Haneka the Small", 250, 170, 108, 5, 15, RACE_GNOME},
139 { "Loirin the Mad", 500, 175, 108, 4, 12, RACE_HALF_GIANT},
140 { "Wuto Poisonbreath", 750, 170, 107, 5, 15, RACE_DRACONIAN},
141 { "Araaka the Rotund", 1000, 165, 107, 6, 18, RACE_DRACONIAN},
142 { "Poogor the Dumb", 250, 170, 108, 5, 15, RACE_BEASTMAN},
143 { "Felorfiliand", 500, 175, 108, 4, 12, RACE_ELF},
144 { "Maroka the Aged", 750, 170, 107, 5, 15, RACE_GNOME},
145 { "Sasin the Bold", 1000, 165, 107, 6, 18, RACE_HALF_GIANT},
146 { "Abiemar the Peasant", 250, 170, 108, 5, 15, RACE_HUMAN},
147 { "Hurk the Poor", 500, 175, 108, 4, 12, RACE_HALF_ORC},
148 { "Soalin the Wretched", 750, 170, 107, 5, 15, RACE_ZOMBIE},
149 { "Merulla the Humble", 1000, 165, 107, 6, 18, RACE_ELF},
153 /* Armoury - 28 unique names */
155 { "醜悪コン=ダー", 5000, 210, 115, 5, 7, RACE_HALF_ORC},
156 { "頑固者ダーグ=ロウ", 10000, 190, 111, 4, 9, RACE_HUMAN},
157 { "賢者デカド", 25000, 200, 112, 4, 10, RACE_DUNADAN},
158 { "鍛冶屋のウィーランド", 30000, 200, 112, 4, 5, RACE_DWARF},
159 { "醜悪コン=ダー", 10000, 210, 115, 5, 7, RACE_HALF_ORC},
160 { "頑固者ダーグ=ロウ", 15000, 190, 111, 4, 9, RACE_HUMAN},
161 { "ハンサムなデカド", 25000, 200, 112, 4, 10, RACE_AMBERITE},
162 { "エロー・ドラゴンスケイル", 30000, 200, 112, 4, 5, RACE_ELF},
163 { "デリカトス", 10000, 210, 115, 5, 7, RACE_SPRITE},
164 { "巨大なグルース", 15000, 190, 111, 4, 9, RACE_HALF_GIANT},
165 { "アニムス", 25000, 200, 112, 4, 10, RACE_GOLEM},
166 { "マルヴァス", 30000, 200, 112, 4, 5, RACE_HALF_TITAN},
167 { "セラクシス", 10000, 210, 115, 5, 7, RACE_ZOMBIE},
168 { "デス・チル", 5000, 190, 111, 4, 9, RACE_SPECTRE},
169 { "微かなドリオス", 25000, 200, 112, 4, 10, RACE_SPECTRE},
170 { "冷たいバスリック", 30000, 200, 112, 4, 5, RACE_VAMPIRE},
171 { "冷酷ヴェンジェラ", 10000, 210, 115, 5, 7, RACE_HALF_TROLL},
172 { "強者ウィラナ", 15000, 190, 111, 4, 9, RACE_HUMAN},
173 { "ヨジョ二世", 25000, 200, 112, 4, 10, RACE_DWARF},
174 { "優しいラナラー", 30000, 200, 112, 4, 5, RACE_AMBERITE},
175 { "不浄のホルバグ", 5000, 210, 115, 5, 7, RACE_HALF_ORC},
176 { "テレパスのエレレン", 15000, 190, 111, 4, 9, RACE_DARK_ELF},
177 { "イスドリリアス", 25000, 200, 112, 4, 10, RACE_SPRITE},
178 { "一つ目ヴェグナー", 5000, 200, 112, 4, 5, RACE_CYCLOPS},
179 { "混沌のロディッシュ", 10000, 210, 115, 5, 7, RACE_BEASTMAN},
180 { "剣豪ヘジン", 15000, 190, 111, 4, 9, RACE_NIBELUNG},
181 { "ずる屋のエルベレリス", 10000, 200, 112, 4, 10, RACE_DARK_ELF},
182 { "インプのザサス", 30000, 200, 112, 4, 5, RACE_IMP},
183 { "醜悪コン=ダー", 5000, 210, 115, 5, 7, RACE_HALF_ORC},
184 { "頑固者ダーグ=ロウ", 10000, 190, 111, 4, 9, RACE_HUMAN},
185 { "ハンサムなデカド", 25000, 200, 112, 4, 10, RACE_AMBERITE},
186 { "鍛冶屋のウィーランド", 30000, 200, 112, 4, 5, RACE_DWARF},
188 { "Kon-Dar the Ugly", 5000, 210, 115, 5, 7, RACE_HALF_ORC},
189 { "Darg-Low the Grim", 10000, 190, 111, 4, 9, RACE_HUMAN},
190 { "Decado the Handsome", 25000, 200, 112, 4, 10, RACE_DUNADAN},
191 { "Wieland the Smith", 30000, 200, 112, 4, 5, RACE_DWARF},
192 { "Kon-Dar the Ugly", 10000, 210, 115, 5, 7, RACE_HALF_ORC},
193 { "Darg-Low the Grim", 15000, 190, 111, 4, 9, RACE_HUMAN},
194 { "Decado the Handsome", 25000, 200, 112, 4, 10, RACE_AMBERITE},
195 { "Elo Dragonscale", 30000, 200, 112, 4, 5, RACE_ELF},
196 { "Delicatus", 10000, 210, 115, 5, 7, RACE_SPRITE},
197 { "Gruce the Huge", 15000, 190, 111, 4, 9, RACE_HALF_GIANT},
198 { "Animus", 25000, 200, 112, 4, 10, RACE_GOLEM},
199 { "Malvus", 30000, 200, 112, 4, 5, RACE_HALF_TITAN},
200 { "Selaxis", 10000, 210, 115, 5, 7, RACE_ZOMBIE},
201 { "Deathchill", 5000, 190, 111, 4, 9, RACE_SPECTRE},
202 { "Drios the Faint", 25000, 200, 112, 4, 10, RACE_SPECTRE},
203 { "Bathric the Cold", 30000, 200, 112, 4, 5, RACE_VAMPIRE},
204 { "Vengella the Cruel", 10000, 210, 115, 5, 7, RACE_HALF_TROLL},
205 { "Wyrana the Mighty", 15000, 190, 111, 4, 9, RACE_HUMAN},
206 { "Yojo II", 25000, 200, 112, 4, 10, RACE_DWARF},
207 { "Ranalar the Sweet", 30000, 200, 112, 4, 5, RACE_AMBERITE},
208 { "Horbag the Unclean", 5000, 210, 115, 5, 7, RACE_HALF_ORC},
209 { "Elelen the Telepath", 15000, 190, 111, 4, 9, RACE_DARK_ELF},
210 { "Isedrelias", 25000, 200, 112, 4, 10, RACE_SPRITE},
211 { "Vegnar One-eye", 5000, 200, 112, 4, 5, RACE_CYCLOPS},
212 { "Rodish the Chaotic", 10000, 210, 115, 5, 7, RACE_BEASTMAN},
213 { "Hesin Swordmaster", 15000, 190, 111, 4, 9, RACE_NIBELUNG},
214 { "Elvererith the Cheat", 10000, 200, 112, 4, 10, RACE_DARK_ELF},
215 { "Zzathath the Imp", 30000, 200, 112, 4, 5, RACE_IMP},
216 { "Kon-Dar the Ugly", 5000, 210, 115, 5, 7, RACE_HALF_ORC},
217 { "Darg-Low the Grim", 10000, 190, 111, 4, 9, RACE_HUMAN},
218 { "Decado the Handsome", 25000, 200, 112, 4, 10, RACE_AMBERITE},
219 { "Wieland the Smith", 30000, 200, 112, 4, 5, RACE_DWARF},
224 /* Weapon Smith - 28 unique names */
226 { "残忍なるアーノルド", 5000, 210, 115, 6, 6, RACE_HALF_TROLL},
227 { "獣殺しのアーンダル", 10000, 185, 110, 5, 9, RACE_HALF_ELF},
228 { "獣マスターのエディー", 25000, 190, 115, 5, 7, RACE_HOBBIT},
229 { "竜殺しのオグライン", 30000, 195, 112, 4, 8, RACE_DWARF},
230 { "熟練者ドリュー", 10000, 210, 115, 6, 6, RACE_HUMAN},
231 { "龍の子オラックス", 15000, 185, 110, 5, 9, RACE_DRACONIAN},
232 { "病気持ちのアンスラックス", 25000, 190, 115, 5, 7, RACE_BEASTMAN},
233 { "頑丈者アルコス", 30000, 195, 112, 4, 8, RACE_DWARF},
234 { "腐れ者のサリアス", 5000, 210, 115, 6, 6, RACE_ZOMBIE},
235 { "晒し骨のトゥエシク", 15000, 185, 110, 5, 9, RACE_SKELETON},
236 { "ビリオス", 25000, 190, 115, 5, 7, RACE_BEASTMAN},
237 { "ファスガル", 30000, 195, 112, 4, 8, RACE_ZOMBIE},
238 { "パラディンのエレフリス", 10000, 210, 115, 6, 6, RACE_BARBARIAN},
239 { "キ'トリッ'ク", 15000, 185, 110, 5, 9, RACE_KLACKON},
240 { "蜘蛛の友ドゥロカス", 25000, 190, 115, 5, 7, RACE_DARK_ELF},
241 { "巨人殺しのフングス", 30000, 195, 112, 4, 8, RACE_DWARF},
242 { "デランサ", 10000, 210, 115, 6, 6, RACE_ELF},
243 { "レンジャーのソルビスタニ", 15000, 185, 110, 5, 9, RACE_HALF_ELF},
244 { "ノロマのゾリル", 25000, 190, 115, 5, 7, RACE_GOLEM},
245 { "イーオン・フラックス", 20000, 195, 112, 4, 8, RACE_HALF_ELF},
246 { "強者ナドック", 10000, 210, 115, 6, 6, RACE_HOBBIT},
247 { "弱虫エラモグ", 15000, 185, 110, 5, 9, RACE_KOBOLD},
248 { "公正なエオウィリス", 25000, 190, 115, 5, 7, RACE_VAMPIRE},
249 { "バルログ殺しのヒュイモグ", 30000, 195, 112, 4, 8, RACE_HALF_ORC},
250 { "冷酷ピーダス", 5000, 210, 115, 6, 6, RACE_HUMAN},
251 { "ヴァモグ スレイヤー", 15000, 185, 110, 5, 9, RACE_HALF_OGRE},
252 { "性悪フーシュナク", 25000, 190, 115, 5, 7, RACE_BEASTMAN},
253 { "舞闘バレン", 30000, 195, 112, 4, 8, RACE_BARBARIAN},
254 { "残忍なるアーノルド", 5000, 210, 115, 6, 6, RACE_BARBARIAN},
255 { "獣殺しのアーンダル", 10000, 185, 110, 5, 9, RACE_HALF_ELF},
256 { "ビーストマスター・エディー", 25000, 190, 115, 5, 7, RACE_HALF_ORC},
257 { "竜殺しのオグライン", 30000, 195, 112, 4, 8, RACE_DWARF},
259 { "Arnold the Beastly", 5000, 210, 115, 6, 6, RACE_BARBARIAN},
260 { "Arndal Beast-Slayer", 10000, 185, 110, 5, 9, RACE_HALF_ELF},
261 { "Eddie Beast-Master", 25000, 190, 115, 5, 7, RACE_HALF_ORC},
262 { "Oglign Dragon-Slayer", 30000, 195, 112, 4, 8, RACE_DWARF},
263 { "Drew the Skilled", 10000, 210, 115, 6, 6, RACE_HUMAN},
264 { "Orrax Dragonson", 15000, 185, 110, 5, 9, RACE_DRACONIAN},
265 { "Anthrax Disease-Carrier", 25000, 190, 115, 5, 7, RACE_BEASTMAN},
266 { "Arkhoth the Stout", 30000, 195, 112, 4, 8, RACE_DWARF},
267 { "Sarlyas the Rotten", 5000, 210, 115, 6, 6, RACE_ZOMBIE},
268 { "Tuethic Bare-Bones", 15000, 185, 110, 5, 9, RACE_SKELETON},
269 { "Bilious", 25000, 190, 115, 5, 7, RACE_BEASTMAN},
270 { "Fasgul", 30000, 195, 112, 4, 8, RACE_ZOMBIE},
271 { "Ellefris the Paladin", 10000, 210, 115, 6, 6, RACE_BARBARIAN},
272 { "K'trrik'k", 15000, 185, 110, 5, 9, RACE_KLACKON},
273 { "Drocus Spiderfriend", 25000, 190, 115, 5, 7, RACE_DARK_ELF},
274 { "Fungus Giant-Slayer", 30000, 195, 112, 4, 8, RACE_DWARF},
275 { "Delantha", 10000, 210, 115, 6, 6, RACE_ELF},
276 { "Solvistani the Ranger", 15000, 185, 110, 5, 9, RACE_HALF_ELF},
277 { "Xoril the Slow", 25000, 190, 115, 5, 7, RACE_GOLEM},
278 { "Aeon Flux", 20000, 195, 112, 4, 8, RACE_HALF_ELF},
279 { "Nadoc the Strong", 10000, 210, 115, 6, 6, RACE_HOBBIT},
280 { "Eramog the Weak", 15000, 185, 110, 5, 9, RACE_KOBOLD},
281 { "Eowilith the Fair", 25000, 190, 115, 5, 7, RACE_VAMPIRE},
282 { "Huimog Balrog-Slayer", 30000, 195, 112, 4, 8, RACE_HALF_ORC},
283 { "Peadus the Cruel", 5000, 210, 115, 6, 6, RACE_HUMAN},
284 { "Vamog Slayer", 15000, 185, 110, 5, 9, RACE_HALF_OGRE},
285 { "Hooshnak the Vicious", 25000, 190, 115, 5, 7, RACE_BEASTMAN},
286 { "Balenn War-Dancer", 30000, 195, 112, 4, 8, RACE_BARBARIAN},
287 { "Arnold the Beastly", 5000, 210, 115, 6, 6, RACE_BARBARIAN},
288 { "Arndal Beast-Slayer", 10000, 185, 110, 5, 9, RACE_HALF_ELF},
289 { "Eddie Beast-Master", 25000, 190, 115, 5, 7, RACE_HALF_ORC},
290 { "Oglign Dragon-Slayer", 30000, 195, 112, 4, 8, RACE_DWARF},
294 /* Temple - 22 unique names */
296 { "質素なルードヴィヒ", 5000, 175, 109, 6, 15, RACE_HUMAN},
297 { "パラディンのガンナー", 10000, 185, 110, 5, 23, RACE_HUMAN},
298 { "選ばれしトリン", 25000, 180, 107, 6, 20, RACE_ELF},
299 { "賢明なるサラストロ", 30000, 185, 109, 5, 15, RACE_DWARF},
300 { "パーシヴァル卿", 25000, 180, 107, 6, 20, RACE_HIGH_ELF},
301 { "神聖なるアセナス", 30000, 185, 109, 5, 15, RACE_HUMAN},
302 { "マッキノン", 10000, 175, 109, 6, 15, RACE_HUMAN},
303 { "謹み婦人", 15000, 185, 110, 5, 23, RACE_HIGH_ELF},
304 { "ドルイドのハシュニック", 25000, 180, 107, 6, 20, RACE_HOBBIT},
305 { "フィナク", 30000, 185, 109, 5, 15, RACE_YEEK},
306 { "クリキック", 10000, 175, 109, 6, 15, RACE_KLACKON},
307 { "荒くれ者モリヴァル", 15000, 185, 110, 5, 23, RACE_ELF},
308 { "暗きホシャック", 25000, 180, 107, 6, 20, RACE_IMP},
309 { "賢者アタール", 30000, 185, 109, 5, 15, RACE_HUMAN},
310 { "清きイベニッド", 10000, 175, 109, 6, 15, RACE_HUMAN},
311 { "エリディシュ", 15000, 185, 110, 5, 23, RACE_HALF_TROLL},
312 { "呪術師ヴルドゥシュ", 25000, 180, 107, 6, 20, RACE_HALF_OGRE},
313 { "狂戦士ハオブ", 30000, 185, 109, 5, 15, RACE_BARBARIAN},
314 { "若きプルーグディシュ", 10000, 175, 109, 6, 15, RACE_HALF_OGRE},
315 { "きちがいラムワイズ", 15000, 185, 110, 5, 23, RACE_YEEK},
316 { "有徳者ムワート", 25000, 180, 107, 6, 20, RACE_KOBOLD},
317 { "弱虫ダードバード", 30000, 185, 109, 5, 15, RACE_SPECTRE},
318 { "質素なルードヴィヒ", 5000, 175, 109, 6, 15, RACE_HUMAN},
319 { "パラディンのガンナー", 10000, 185, 110, 5, 23, RACE_HUMAN},
320 { "選ばれしトリン", 25000, 180, 107, 6, 20, RACE_ELF},
321 { "賢明なるサラストロ", 30000, 185, 109, 5, 15, RACE_DWARF},
322 { "パーシヴァル卿", 25000, 180, 107, 6, 20, RACE_HIGH_ELF},
323 { "神聖なるアセナス", 30000, 185, 109, 5, 15, RACE_HUMAN},
324 { "マッキノン", 10000, 175, 109, 6, 15, RACE_HUMAN},
325 { "謹み婦人", 15000, 185, 110, 5, 23, RACE_HIGH_ELF},
326 { "ドルイドのハシュニック", 25000, 180, 107, 6, 20, RACE_HOBBIT},
327 { "フィナク", 30000, 185, 109, 5, 15, RACE_YEEK},
329 { "Ludwig the Humble", 5000, 175, 109, 6, 15, RACE_DWARF},
330 { "Gunnar the Paladin", 10000, 185, 110, 5, 23, RACE_HALF_TROLL},
331 { "Torin the Chosen", 25000, 180, 107, 6, 20, RACE_HIGH_ELF},
332 { "Sarastro the Wise", 30000, 185, 109, 5, 15, RACE_HUMAN},
333 { "Sir Parsival the Pure", 25000, 180, 107, 6, 20, RACE_HIGH_ELF},
334 { "Asenath the Holy", 30000, 185, 109, 5, 15, RACE_HUMAN},
335 { "McKinnon", 10000, 175, 109, 6, 15, RACE_HUMAN},
336 { "Mistress Chastity", 15000, 185, 110, 5, 23, RACE_HIGH_ELF},
337 { "Hashnik the Druid", 25000, 180, 107, 6, 20, RACE_HOBBIT},
338 { "Finak", 30000, 185, 109, 5, 15, RACE_YEEK},
339 { "Krikkik", 10000, 175, 109, 6, 15, RACE_KLACKON},
340 { "Morival the Wild", 15000, 185, 110, 5, 23, RACE_ELF},
341 { "Hoshak the Dark", 25000, 180, 107, 6, 20, RACE_IMP},
342 { "Atal the Wise", 30000, 185, 109, 5, 15, RACE_HUMAN},
343 { "Ibenidd the Chaste", 10000, 175, 109, 6, 15, RACE_HUMAN},
344 { "Eridish", 15000, 185, 110, 5, 23, RACE_HALF_TROLL},
345 { "Vrudush the Shaman", 25000, 180, 107, 6, 20, RACE_HALF_OGRE},
346 { "Haob the Berserker", 30000, 185, 109, 5, 15, RACE_BARBARIAN},
347 { "Proogdish the Youthfull", 10000, 175, 109, 6, 15, RACE_HALF_OGRE},
348 { "Lumwise the Mad", 15000, 185, 110, 5, 23, RACE_YEEK},
349 { "Muirt the Virtuous", 25000, 180, 107, 6, 20, RACE_KOBOLD},
350 { "Dardobard the Weak", 30000, 185, 109, 5, 15, RACE_SPECTRE},
351 { "Ludwig the Humble", 5000, 175, 109, 6, 15, RACE_DWARF},
352 { "Gunnar the Paladin", 10000, 185, 110, 5, 23, RACE_HALF_TROLL},
353 { "Torin the Chosen", 25000, 180, 107, 6, 20, RACE_HIGH_ELF},
354 { "Sarastro the Wise", 30000, 185, 109, 5, 15, RACE_HUMAN},
355 { "Sir Parsival the Pure", 25000, 180, 107, 6, 20, RACE_HIGH_ELF},
356 { "Asenath the Holy", 30000, 185, 109, 5, 15, RACE_HUMAN},
357 { "McKinnon", 10000, 175, 109, 6, 15, RACE_HUMAN},
358 { "Mistress Chastity", 15000, 185, 110, 5, 23, RACE_HIGH_ELF},
359 { "Hashnik the Druid", 25000, 180, 107, 6, 20, RACE_HOBBIT},
360 { "Finak", 30000, 185, 109, 5, 15, RACE_YEEK},
364 /* Alchemist - 26 unique names */
366 { "化学者マウザー", 10000, 190, 111, 5, 8, RACE_HALF_ELF},
367 { "カオスのウィズル", 10000, 190, 110, 6, 8, RACE_HOBBIT},
368 { "強欲ミダス", 15000, 200, 116, 6, 9, RACE_GNOME},
369 { "貧弱ジャ=ファー", 15000, 220, 111, 4, 9, RACE_ELF},/*FIRST*/
370 { "カカルラカカル", 15000, 200, 116, 6, 9, RACE_KLACKON},
371 { "錬金術師ジャル=エス", 15000, 220, 111, 4, 9, RACE_ELF},
372 { "用心深いファネラス", 10000, 190, 111, 5, 8, RACE_DWARF},
373 { "キチガイのルンシー", 10000, 190, 110, 6, 8, RACE_HUMAN},
374 { "グランブルワース", 15000, 200, 116, 6, 9, RACE_GNOME},
375 { "フリッター", 15000, 220, 111, 4, 9, RACE_SPRITE},
376 { "ザリルス", 10000, 190, 111, 5, 8, RACE_HUMAN},
377 { "古きエグバート", 10000, 190, 110, 6, 8, RACE_DWARF},
378 { "誇り高きヴァリンドラ", 15000, 200, 116, 6, 9, RACE_HIGH_ELF},
379 { "錬金術師タエン", 15000, 220, 111, 4, 9, RACE_HUMAN},
380 { "巧言カイド", 10000, 190, 111, 5, 8, RACE_VAMPIRE},
381 { "暗きフリア", 10000, 190, 110, 6, 8, RACE_NIBELUNG},
382 { "質素なドムリ", 15000, 200, 116, 6, 9, RACE_DWARF},
383 { "魔の子ヤァジュッカ", 15000, 220, 111, 4, 9, RACE_IMP},
384 { "薬草師ジェララルドール", 10000, 190, 111, 5, 8, RACE_HIGH_ELF},
385 { "賢者オレラルダン", 10000, 190, 110, 6, 8, RACE_BARBARIAN},
386 { "デモニシストのフゾグロ", 15000, 200, 116, 6, 9, RACE_IMP},
387 { "錬金術師ドゥリアシュ", 15000, 220, 111, 4, 9, RACE_HALF_ORC},
388 { "強者ネリア", 10000, 190, 111, 5, 8, RACE_CYCLOPS},
389 { "辛口リグナス", 10000, 190, 110, 6, 8, RACE_HALF_ORC},
390 { "ティルバ", 15000, 200, 116, 6, 9, RACE_HOBBIT},
391 { "金持ちミリルドリック", 15000, 220, 111, 4, 9, RACE_HUMAN},
393 { "科学者マウザー", 10000, 190, 111, 5, 8, RACE_HALF_ELF},
394 { "カオスのウィズル", 10000, 190, 110, 6, 8, RACE_HOBBIT},
395 { "強欲ミダス", 15000, 200, 116, 6, 9, RACE_GNOME},
396 { "錬金術師ジャ=ファー", 15000, 220, 111, 4, 9, RACE_ELF},
397 { "カカルラカカル", 15000, 200, 116, 6, 9, RACE_KLACKON},
398 { "錬金術師ジャル=エス", 15000, 220, 111, 4, 9, RACE_ELF},
400 { "Mauser the Chemist", 10000, 190, 111, 5, 8, RACE_HALF_ELF},
401 { "Wizzle the Chaotic", 10000, 190, 110, 6, 8, RACE_HOBBIT},
402 { "Midas the Greedy", 15000, 200, 116, 6, 9, RACE_GNOME},
403 { "Ja-Far the Alchemist", 15000, 220, 111, 4, 9, RACE_ELF},
404 { "Kakalrakakal", 15000, 200, 116, 6, 9, RACE_KLACKON},
405 { "Jal-Eth the Alchemist", 15000, 220, 111, 4, 9, RACE_ELF},
406 { "Fanelath the Cautious", 10000, 190, 111, 5, 8, RACE_DWARF},
407 { "Runcie the Insane", 10000, 190, 110, 6, 8, RACE_HUMAN},
408 { "Grumbleworth", 15000, 200, 116, 6, 9, RACE_GNOME},
409 { "Flitter", 15000, 220, 111, 4, 9, RACE_SPRITE},
410 { "Xarillus", 10000, 190, 111, 5, 8, RACE_HUMAN},
411 { "Egbert the Old", 10000, 190, 110, 6, 8, RACE_DWARF},
412 { "Valindra the Proud", 15000, 200, 116, 6, 9, RACE_HIGH_ELF},
413 { "Taen the Alchemist", 15000, 220, 111, 4, 9, RACE_HUMAN},
414 { "Cayd the Sweet", 10000, 190, 111, 5, 8, RACE_VAMPIRE},
415 { "Fulir the Dark", 10000, 190, 110, 6, 8, RACE_NIBELUNG},
416 { "Domli the Humble", 15000, 200, 116, 6, 9, RACE_DWARF},
417 { "Yaarjukka Demonspawn", 15000, 220, 111, 4, 9, RACE_IMP},
418 { "Gelaraldor the Herbmaster", 10000, 190, 111, 5, 8, RACE_HIGH_ELF},
419 { "Olelaldan the Wise", 10000, 190, 110, 6, 8, RACE_BARBARIAN},
420 { "Fthoglo the Demonicist", 15000, 200, 116, 6, 9, RACE_IMP},
421 { "Dridash the Alchemist", 15000, 220, 111, 4, 9, RACE_HALF_ORC},
422 { "Nelir the Strong", 10000, 190, 111, 5, 8, RACE_CYCLOPS},
423 { "Lignus the Pungent", 10000, 190, 110, 6, 8, RACE_HALF_ORC},
424 { "Tilba", 15000, 200, 116, 6, 9, RACE_HOBBIT},
425 { "Myrildric the Wealthy", 15000, 220, 111, 4, 9, RACE_HUMAN},
427 { "Mauser the Chemist", 10000, 190, 111, 5, 8, RACE_HALF_ELF},
428 { "Wizzle the Chaotic", 10000, 190, 110, 6, 8, RACE_HOBBIT},
429 { "Midas the Greedy", 15000, 200, 116, 6, 9, RACE_GNOME},
430 { "Ja-Far the Alchemist", 15000, 220, 111, 4, 9, RACE_ELF},
431 { "Kakalrakakal", 15000, 200, 116, 6, 9, RACE_KLACKON},
432 { "Jal-Eth the Alchemist", 15000, 220, 111, 4, 9, RACE_ELF},
437 /* Magic Shop - 23 unique names */
439 { "ソーサラーのロ=パン", 20000, 200, 110, 7, 8, RACE_HALF_ELF},
440 { "偉大なるブガービイ", 20000, 215, 113, 6, 10, RACE_GNOME},
441 { "イェンダーの魔法使い", 30000, 200, 110, 7, 10, RACE_HUMAN},
442 { "死霊使いリャク",30000, 175, 110, 5, 11, RACE_HIGH_ELF},
443 { "魔術師スキドゥニー", 15000, 200, 110, 7, 8, RACE_HALF_ELF},
444 { "幻術師キリア", 30000, 200, 110, 7, 10, RACE_HUMAN},
445 { "死霊術師ニッキ", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
446 { "ソロストラン", 15000, 200, 110, 7, 8, RACE_SPRITE},
447 { "烏賊口アチシェ", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER},
448 { "貴族のカザ", 30000, 200, 110, 7, 10, RACE_HIGH_ELF},
449 { "暗きファジル", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
450 { "偉大なるケルドーン", 15000, 200, 110, 7, 8, RACE_DWARF},
451 { "フィランスロプス", 20000, 215, 113, 6, 10, RACE_HOBBIT},
452 { "魔女のアグナー", 30000, 200, 110, 7, 10, RACE_HUMAN},
453 { "死霊術師ビュリアンス", 30000, 175, 110, 5, 11, RACE_BEASTMAN},
454 { "ハイメイジのヴイラク", 15000, 200, 110, 7, 8, RACE_BEASTMAN},
455 { "知恵者マディッシュ", 20000, 215, 113, 6, 10, RACE_BEASTMAN},
456 { "ファレブリンボール", 30000, 200, 110, 7, 10, RACE_HIGH_ELF},
457 { "陰険フェリル=ガンド", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
458 { "呪術師サレゴード", 15000, 200, 110, 7, 8, RACE_BARBARIAN},
459 { "神秘家クトゥアロス", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER},
460 { "幻術師イベリ", 30000, 200, 110, 7, 10, RACE_SKELETON},
461 { "死霊術師ヘトー", 30000, 175, 110, 5, 11, RACE_YEEK},
462 { "魔術師ロ=パン", 20000, 200, 110, 7, 8, RACE_HALF_ELF},
463 { "偉大なるブガービイ", 20000, 215, 113, 6, 10, RACE_GNOME},
464 { "イェンダーの魔法使い", 30000, 200, 110, 7, 10, RACE_HUMAN},
465 { "死霊術師リャク", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
466 { "魔術師スキドゥニー", 15000, 200, 110, 7, 8, RACE_HALF_ELF},
467 { "幻術師キリア", 30000, 200, 110, 7, 10, RACE_HUMAN},
468 { "死霊術師ニッキ", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
469 { "ソロストラン", 15000, 200, 110, 7, 8, RACE_SPRITE},
470 { "烏賊口アチシェ", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER},
472 { "Lo Pan the Sorcerer", 20000, 200, 110, 7, 8, RACE_HALF_ELF},
473 { "Buggerby the Great", 20000, 215, 113, 6, 10, RACE_GNOME},
474 { "The Wizard of Yendor", 30000, 200, 110, 7, 10, RACE_HUMAN},
475 { "Rjak the Necromancer", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
476 { "Skidney the Sorcerer", 15000, 200, 110, 7, 8, RACE_HALF_ELF},
477 { "Kyria the Illusionist", 30000, 200, 110, 7, 10, RACE_HUMAN},
478 { "Nikki the Necromancer", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
479 { "Solostoran", 15000, 200, 110, 7, 8, RACE_SPRITE},
480 { "Achshe the Tentacled", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER},
481 { "Kaza the Noble", 30000, 200, 110, 7, 10, RACE_HIGH_ELF},
482 { "Fazzil the Dark", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
483 { "Keldorn the Grand", 15000, 200, 110, 7, 8, RACE_DWARF},
484 { "Philanthropus", 20000, 215, 113, 6, 10, RACE_HOBBIT},
485 { "Agnar the Enchantress", 30000, 200, 110, 7, 10, RACE_HUMAN},
486 { "Buliance the Necromancer", 30000, 175, 110, 5, 11, RACE_BEASTMAN},
487 { "Vuirak the High-Mage", 15000, 200, 110, 7, 8, RACE_BEASTMAN},
488 { "Madish the Smart", 20000, 215, 113, 6, 10, RACE_BEASTMAN},
489 { "Falebrimbor", 30000, 200, 110, 7, 10, RACE_HIGH_ELF},
490 { "Felil-Gand the Subtle", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
491 { "Thalegord the Shaman", 15000, 200, 110, 7, 8, RACE_BARBARIAN},
492 { "Cthoaloth the Mystic", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER},
493 { "Ibeli the Illusionist", 30000, 200, 110, 7, 10, RACE_SKELETON},
494 { "Heto the Necromancer", 30000, 175, 110, 5, 11, RACE_YEEK},
495 { "Lo Pan the Sorcerer", 20000, 200, 110, 7, 8, RACE_HALF_ELF},
496 { "Buggerby the Great", 20000, 215, 113, 6, 10, RACE_GNOME},
497 { "The Wizard of Yendor", 30000, 200, 110, 7, 10, RACE_HUMAN},
498 { "Rjak the Necromancer", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
499 { "Skidney the Sorcerer", 15000, 200, 110, 7, 8, RACE_HALF_ELF},
500 { "Kyria the Illusionist", 30000, 200, 110, 7, 10, RACE_HUMAN},
501 { "Nikki the Necromancer", 30000, 175, 110, 5, 11, RACE_DARK_ELF},
502 { "Solostoran", 15000, 200, 110, 7, 8, RACE_SPRITE},
503 { "Achshe the Tentacled", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER},
507 /* Black Market - 32 unique names */
509 { "ガリー=ギガズ", 20000, 250, 150, 10, 5, RACE_HALF_TROLL},
510 { "ゴブリンのヒストーア", 20000, 250, 150, 10, 5, RACE_HALF_ORC},
511 { "フェレンギ人クアーク", 30000, 250, 150, 10, 5, RACE_HUMAN},
512 { "公正なる(?)トッピ", 30000, 250, 150, 10, 5, RACE_ELF},
513 { "死人ヴァッサ", 20000, 250, 150, 10, 5, RACE_ZOMBIE},
514 { "裏切り者カイン", 20000, 250, 150, 10, 5, RACE_VAMPIRE},
515 { "ブボニカス", 30000, 250, 150, 10, 5, RACE_BEASTMAN},
516 { "コープスライト", 30000, 250, 150, 10, 5, RACE_SPECTRE},
517 { "血に飢えしパリッシュ", 20000, 250, 150, 10, 5, RACE_VAMPIRE},
518 { "ヴァイル", 20000, 250, 150, 10, 5, RACE_SKELETON},
519 { "信頼のプレンティス", 30000, 250, 150, 10, 5, RACE_SKELETON},
520 { "人間殺しのグリエラ", 30000, 250, 150, 10, 5, RACE_IMP},
521 { "エンジェル", 20000, 250, 150, 10, 5, RACE_VAMPIRE},
522 { "水膨れフロツァム", 20000, 250, 150, 10, 5, RACE_ZOMBIE},
523 { "ニーヴァル", 30000, 250, 150, 10, 5, RACE_VAMPIRE},
524 { "明るいアナスタシア", 30000, 250, 150, 10, 5, RACE_SPECTRE},
525 { "死霊術師チャリティー", 20000, 250, 150, 10, 5, RACE_DARK_ELF},
526 { "ボクサーのプグナシオス", 20000, 250, 150, 10, 5, RACE_HALF_ORC},
527 { "幸運なフットソア", 30000, 250, 150, 10, 5, RACE_BEASTMAN},
528 { "光指のシドリア", 30000, 250, 150, 10, 5, RACE_HUMAN},
529 { "手品師リアソー", 20000, 250, 150, 10, 5, RACE_HOBBIT},
530 { "やりくり上手のジャナッカ", 20000, 250, 150, 10, 5, RACE_GNOME},
531 { "悪党シーナ", 30000, 250, 150, 10, 5, RACE_GNOME},
532 { "大爪アルニッキ", 30000, 250, 150, 10, 5, RACE_DRACONIAN},
533 { "貧乏チャエアンド", 20000, 250, 150, 10, 5, RACE_HUMAN},
534 { "山賊アファードーフ", 20000, 250, 150, 10, 5, RACE_BARBARIAN},
535 { "強欲ラザクスル", 30000, 250, 150, 10, 5, RACE_MIND_FLAYER},
536 { "ファラレウィン", 30000, 250, 150, 10, 5, RACE_SPRITE},
537 { "しわしわヴォスール", 20000, 250, 150, 10, 5, RACE_NIBELUNG},
538 { "ハンサムなアラオード", 20000, 250, 150, 10, 5, RACE_AMBERITE},
539 { "負け犬セラドフリド", 30000, 250, 150, 10, 5, RACE_HUMAN},
540 { "片足のエルーロ", 30000, 250, 150, 10, 5, RACE_HALF_OGRE},
542 { "Gary Gygaz", 20000, 250, 150, 10, 5, RACE_HALF_TROLL},
543 { "Histor the Goblin", 20000, 250, 150, 10, 5, RACE_HALF_ORC},
544 { "Quark the Ferengi", 30000, 250, 150, 10, 5, RACE_DWARF},
545 { "Topi the Fair(?)", 30000, 250, 150, 10, 5, RACE_HUMAN},
546 { "Vhassa the Dead", 20000, 250, 150, 10, 5, RACE_ZOMBIE},
547 { "Kyn the Treacherous", 20000, 250, 150, 10, 5, RACE_VAMPIRE},
548 { "Bubonicus", 30000, 250, 150, 10, 5, RACE_BEASTMAN},
549 { "Corpselight", 30000, 250, 150, 10, 5, RACE_SPECTRE},
550 { "Parrish the Bloodthirsty", 20000, 250, 150, 10, 5, RACE_VAMPIRE},
551 { "Vile", 20000, 250, 150, 10, 5, RACE_SKELETON},
552 { "Prentice the Trusted", 30000, 250, 150, 10, 5, RACE_SKELETON},
553 { "Griella Humanslayer", 30000, 250, 150, 10, 5, RACE_IMP},
554 { "Angel", 20000, 250, 150, 10, 5, RACE_VAMPIRE},
555 { "Flotsam the Bloated", 20000, 250, 150, 10, 5, RACE_ZOMBIE},
556 { "Nieval", 30000, 250, 150, 10, 5, RACE_VAMPIRE},
557 { "Anastasia the Luminous", 30000, 250, 150, 10, 5, RACE_SPECTRE},
558 { "Charity the Necromancer", 20000, 250, 150, 10, 5, RACE_DARK_ELF},
559 { "Pugnacious the Pugilist", 20000, 250, 150, 10, 5, RACE_HALF_ORC},
560 { "Footsore the Lucky", 30000, 250, 150, 10, 5, RACE_BEASTMAN},
561 { "Sidria Lighfingered", 30000, 250, 150, 10, 5, RACE_HUMAN},
562 { "Riatho the Juggler", 20000, 250, 150, 10, 5, RACE_HOBBIT},
563 { "Janaaka the Shifty", 20000, 250, 150, 10, 5, RACE_GNOME},
564 { "Cina the Rogue", 30000, 250, 150, 10, 5, RACE_GNOME},
565 { "Arunikki Greatclaw", 30000, 250, 150, 10, 5, RACE_DRACONIAN},
566 { "Chaeand the Poor", 20000, 250, 150, 10, 5, RACE_HUMAN},
567 { "Afardorf the Brigand", 20000, 250, 150, 10, 5, RACE_BARBARIAN},
568 { "Lathaxl the Greedy", 30000, 250, 150, 10, 5, RACE_MIND_FLAYER},
569 { "Falarewyn", 30000, 250, 150, 10, 5, RACE_SPRITE},
570 { "Vosur the Wrinkled", 20000, 250, 150, 10, 5, RACE_NIBELUNG},
571 { "Araord the Handsome", 20000, 250, 150, 10, 5, RACE_AMBERITE},
572 { "Theradfrid the Loser", 30000, 250, 150, 10, 5, RACE_HUMAN},
573 { "One-Legged Eroolo", 30000, 250, 150, 10, 5, RACE_HALF_OGRE},
579 { "我が家", 0, 100, 100, 0, 99, 99},
580 { "我が家", 0, 100, 100, 0, 99, 99},
581 { "我が家", 0, 100, 100, 0, 99, 99},
582 { "我が家", 0, 100, 100, 0, 99, 99},
583 { "我が家", 0, 100, 100, 0, 99, 99},
584 { "我が家", 0, 100, 100, 0, 99, 99},
585 { "我が家", 0, 100, 100, 0, 99, 99},
586 { "我が家", 0, 100, 100, 0, 99, 99},
587 { "我が家", 0, 100, 100, 0, 99, 99},
588 { "我が家", 0, 100, 100, 0, 99, 99},
589 { "我が家", 0, 100, 100, 0, 99, 99},
590 { "我が家", 0, 100, 100, 0, 99, 99},
591 { "我が家", 0, 100, 100, 0, 99, 99},
592 { "我が家", 0, 100, 100, 0, 99, 99},
593 { "我が家", 0, 100, 100, 0, 99, 99},
594 { "我が家", 0, 100, 100, 0, 99, 99},
595 { "我が家", 0, 100, 100, 0, 99, 99},
596 { "我が家", 0, 100, 100, 0, 99, 99},
597 { "我が家", 0, 100, 100, 0, 99, 99},
598 { "我が家", 0, 100, 100, 0, 99, 99},
599 { "我が家", 0, 100, 100, 0, 99, 99},
600 { "我が家", 0, 100, 100, 0, 99, 99},
601 { "我が家", 0, 100, 100, 0, 99, 99},
602 { "我が家", 0, 100, 100, 0, 99, 99},
603 { "我が家", 0, 100, 100, 0, 99, 99},
604 { "我が家", 0, 100, 100, 0, 99, 99},
605 { "我が家", 0, 100, 100, 0, 99, 99},
606 { "我が家", 0, 100, 100, 0, 99, 99},
607 { "我が家", 0, 100, 100, 0, 99, 99},
608 { "我が家", 0, 100, 100, 0, 99, 99},
609 { "我が家", 0, 100, 100, 0, 99, 99},
610 { "我が家", 0, 100, 100, 0, 99, 99},
612 { "Your home", 0, 100, 100, 0, 99, 99},
613 { "Your home", 0, 100, 100, 0, 99, 99},
614 { "Your home", 0, 100, 100, 0, 99, 99},
615 { "Your home", 0, 100, 100, 0, 99, 99},
616 { "Your home", 0, 100, 100, 0, 99, 99},
617 { "Your home", 0, 100, 100, 0, 99, 99},
618 { "Your home", 0, 100, 100, 0, 99, 99},
619 { "Your home", 0, 100, 100, 0, 99, 99},
620 { "Your home", 0, 100, 100, 0, 99, 99},
621 { "Your home", 0, 100, 100, 0, 99, 99},
622 { "Your home", 0, 100, 100, 0, 99, 99},
623 { "Your home", 0, 100, 100, 0, 99, 99},
624 { "Your home", 0, 100, 100, 0, 99, 99},
625 { "Your home", 0, 100, 100, 0, 99, 99},
626 { "Your home", 0, 100, 100, 0, 99, 99},
627 { "Your home", 0, 100, 100, 0, 99, 99},
628 { "Your home", 0, 100, 100, 0, 99, 99},
629 { "Your home", 0, 100, 100, 0, 99, 99},
630 { "Your home", 0, 100, 100, 0, 99, 99},
631 { "Your home", 0, 100, 100, 0, 99, 99},
632 { "Your home", 0, 100, 100, 0, 99, 99},
633 { "Your home", 0, 100, 100, 0, 99, 99},
634 { "Your home", 0, 100, 100, 0, 99, 99},
635 { "Your home", 0, 100, 100, 0, 99, 99},
636 { "Your home", 0, 100, 100, 0, 99, 99},
637 { "Your home", 0, 100, 100, 0, 99, 99},
638 { "Your home", 0, 100, 100, 0, 99, 99},
639 { "Your home", 0, 100, 100, 0, 99, 99},
640 { "Your home", 0, 100, 100, 0, 99, 99},
641 { "Your home", 0, 100, 100, 0, 99, 99},
642 { "Your home", 0, 100, 100, 0, 99, 99},
643 { "Your home", 0, 100, 100, 0, 99, 99},
649 /* Bookstore - 21 unique names */
651 { "強欲ドラフ", 10000, 175, 108, 4, 12, RACE_HUMAN},
652 { "賢者オドナー", 15000, 120, 105, 6, 16, RACE_HIGH_ELF},
653 { "中立のガンダー", 25000, 120, 110, 7, 19, RACE_DARK_ELF},
654 { "忍耐の人ロ=シャ", 30000, 140, 105, 6, 12, RACE_ELF},
655 { "ランドルフ・カーター", 15000, 175, 108, 4, 12, RACE_HUMAN},
656 { "隼のサライ", 15000, 175, 108, 4, 12, RACE_HUMAN},
657 { "千里眼ボドリル", 20000, 120, 105, 6, 16, RACE_HIGH_ELF},
658 { "沈黙のヴェオロイン", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
659 { "学者のヴァンシラス", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER},
660 { "物書きオセイン", 15000, 175, 108, 4, 12, RACE_SKELETON},
661 { "本の虫オルヴァー", 20000, 120, 105, 6, 16, RACE_VAMPIRE},
662 { "浅井墓男", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
663 { "デスマスク", 30000, 140, 105, 6, 12, RACE_ZOMBIE},
664 { "学者のアスーヌ", 15000, 175, 108, 4, 12, RACE_MIND_FLAYER},
665 { "死人のプリランド", 20000, 120, 105, 6, 16, RACE_ZOMBIE},
666 { "鉄のロナール", 25000, 120, 110, 7, 19, RACE_GOLEM},
668 { "Dolaf the Greedy", 10000, 175, 108, 4, 12, RACE_HUMAN},
669 { "Odnar the Sage", 15000, 120, 105, 6, 16, RACE_HIGH_ELF},
670 { "Gandar the Neutral", 25000, 120, 110, 7, 19, RACE_DARK_ELF},
671 { "Ro-sha the Patient", 30000, 140, 105, 6, 12, RACE_ELF},
672 { "Randolph Carter", 15000, 175, 108, 4, 12, RACE_HUMAN},
673 { "Sarai the Swift", 15000, 175, 108, 4, 12, RACE_HUMAN},
674 { "Bodril the Seer", 20000, 120, 105, 6, 16, RACE_HIGH_ELF},
675 { "Veloin the Quiet", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
676 { "Vanthylas the Learned", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER},
677 { "Ossein the Literate", 15000, 175, 108, 4, 12, RACE_SKELETON},
678 { "Olvar Bookworm", 20000, 120, 105, 6, 16, RACE_VAMPIRE},
679 { "Shallowgrave", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
680 { "Death Mask", 30000, 140, 105, 6, 12, RACE_ZOMBIE},
681 { "Asuunu the Learned", 15000, 175, 108, 4, 12, RACE_MIND_FLAYER},
682 { "Prirand the Dead", 20000, 120, 105, 6, 16, RACE_ZOMBIE},
683 { "Ronar the Iron", 25000, 120, 110, 7, 19, RACE_GOLEM},
686 { "ガリル=ガミル", 30000, 140, 105, 6, 12, RACE_ELF},
687 { "本食いローバグ", 15000, 175, 108, 4, 12, RACE_KOBOLD},
688 { "キリアリキーク", 20000, 120, 105, 6, 16, RACE_KLACKON},
689 { "静かなるリリン", 25000, 120, 110, 7, 19, RACE_DWARF},
690 { "王者イサング", 30000, 140, 105, 6, 12, RACE_HIGH_ELF},
691 { "強欲ドラフ", 10000, 175, 108, 4, 12, RACE_HUMAN},
692 { "賢者オドナー", 15000, 120, 105, 6, 16, RACE_HIGH_ELF},
693 { "中立のガンダー", 25000, 120, 110, 7, 19, RACE_DARK_ELF},
694 { "忍耐の人ロ=シャ", 30000, 140, 105, 6, 12, RACE_ELF},
695 { "ランドルフ・カーター", 15000, 175, 108, 4, 12, RACE_HUMAN},
696 { "隼サライ", 15000, 175, 108, 4, 12, RACE_HUMAN},
697 { "千里眼ボドリル", 20000, 120, 105, 6, 16, RACE_HIGH_ELF},
698 { "沈黙のヴェオロイン", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
699 { "学者のヴァンシラス", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER},
700 { "物書きオセイン", 15000, 175, 108, 4, 12, RACE_SKELETON},
701 { "本の虫オルヴァー", 20000, 120, 105, 6, 16, RACE_VAMPIRE},
703 { "Galil-Gamir", 30000, 140, 105, 6, 12, RACE_ELF},
704 { "Rorbag Book-Eater", 15000, 175, 108, 4, 12, RACE_KOBOLD},
705 { "Kiriarikirk", 20000, 120, 105, 6, 16, RACE_KLACKON},
706 { "Rilin the Quiet", 25000, 120, 110, 7, 19, RACE_DWARF},
707 { "Isung the Lord", 30000, 140, 105, 6, 12, RACE_HIGH_ELF},
708 { "Dolaf the Greedy", 10000, 175, 108, 4, 12, RACE_HUMAN},
709 { "Odnar the Sage", 15000, 120, 105, 6, 16, RACE_HIGH_ELF},
710 { "Gandar the Neutral", 25000, 120, 110, 7, 19, RACE_DARK_ELF},
711 { "Ro-sha the Patient", 30000, 140, 105, 6, 12, RACE_ELF},
712 { "Randolph Carter", 15000, 175, 108, 4, 12, RACE_HUMAN},
713 { "Sarai the Swift", 15000, 175, 108, 4, 12, RACE_HUMAN},
714 { "Bodril the Seer", 20000, 120, 105, 6, 16, RACE_HIGH_ELF},
715 { "Veloin the Quiet", 25000, 120, 110, 7, 19, RACE_ZOMBIE},
716 { "Vanthylas the Learned", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER},
717 { "Ossein the Literate", 15000, 175, 108, 4, 12, RACE_SKELETON},
718 { "Olvar Bookworm", 20000, 120, 105, 6, 16, RACE_VAMPIRE},
725 { "博物館", 0, 100, 100, 0, 99, 99},
726 { "博物館", 0, 100, 100, 0, 99, 99},
727 { "博物館", 0, 100, 100, 0, 99, 99},
728 { "博物館", 0, 100, 100, 0, 99, 99},
729 { "博物館", 0, 100, 100, 0, 99, 99},
730 { "博物館", 0, 100, 100, 0, 99, 99},
731 { "博物館", 0, 100, 100, 0, 99, 99},
732 { "博物館", 0, 100, 100, 0, 99, 99},
733 { "博物館", 0, 100, 100, 0, 99, 99},
734 { "博物館", 0, 100, 100, 0, 99, 99},
735 { "博物館", 0, 100, 100, 0, 99, 99},
736 { "博物館", 0, 100, 100, 0, 99, 99},
737 { "博物館", 0, 100, 100, 0, 99, 99},
738 { "博物館", 0, 100, 100, 0, 99, 99},
739 { "博物館", 0, 100, 100, 0, 99, 99},
740 { "博物館", 0, 100, 100, 0, 99, 99},
741 { "博物館", 0, 100, 100, 0, 99, 99},
742 { "博物館", 0, 100, 100, 0, 99, 99},
743 { "博物館", 0, 100, 100, 0, 99, 99},
744 { "博物館", 0, 100, 100, 0, 99, 99},
745 { "博物館", 0, 100, 100, 0, 99, 99},
746 { "博物館", 0, 100, 100, 0, 99, 99},
747 { "博物館", 0, 100, 100, 0, 99, 99},
748 { "博物館", 0, 100, 100, 0, 99, 99},
749 { "博物館", 0, 100, 100, 0, 99, 99},
750 { "博物館", 0, 100, 100, 0, 99, 99},
751 { "博物館", 0, 100, 100, 0, 99, 99},
752 { "博物館", 0, 100, 100, 0, 99, 99},
753 { "博物館", 0, 100, 100, 0, 99, 99},
754 { "博物館", 0, 100, 100, 0, 99, 99},
755 { "博物館", 0, 100, 100, 0, 99, 99},
756 { "博物館", 0, 100, 100, 0, 99, 99},
758 { "Museum", 0, 100, 100, 0, 99, 99},
759 { "Museum", 0, 100, 100, 0, 99, 99},
760 { "Museum", 0, 100, 100, 0, 99, 99},
761 { "Museum", 0, 100, 100, 0, 99, 99},
762 { "Museum", 0, 100, 100, 0, 99, 99},
763 { "Museum", 0, 100, 100, 0, 99, 99},
764 { "Museum", 0, 100, 100, 0, 99, 99},
765 { "Museum", 0, 100, 100, 0, 99, 99},
766 { "Museum", 0, 100, 100, 0, 99, 99},
767 { "Museum", 0, 100, 100, 0, 99, 99},
768 { "Museum", 0, 100, 100, 0, 99, 99},
769 { "Museum", 0, 100, 100, 0, 99, 99},
770 { "Museum", 0, 100, 100, 0, 99, 99},
771 { "Museum", 0, 100, 100, 0, 99, 99},
772 { "Museum", 0, 100, 100, 0, 99, 99},
773 { "Museum", 0, 100, 100, 0, 99, 99},
774 { "Museum", 0, 100, 100, 0, 99, 99},
775 { "Museum", 0, 100, 100, 0, 99, 99},
776 { "Museum", 0, 100, 100, 0, 99, 99},
777 { "Museum", 0, 100, 100, 0, 99, 99},
778 { "Museum", 0, 100, 100, 0, 99, 99},
779 { "Museum", 0, 100, 100, 0, 99, 99},
780 { "Museum", 0, 100, 100, 0, 99, 99},
781 { "Museum", 0, 100, 100, 0, 99, 99},
782 { "Museum", 0, 100, 100, 0, 99, 99},
783 { "Museum", 0, 100, 100, 0, 99, 99},
784 { "Museum", 0, 100, 100, 0, 99, 99},
785 { "Museum", 0, 100, 100, 0, 99, 99},
786 { "Museum", 0, 100, 100, 0, 99, 99},
787 { "Museum", 0, 100, 100, 0, 99, 99},
788 { "Museum", 0, 100, 100, 0, 99, 99},
789 { "Museum", 0, 100, 100, 0, 99, 99},
796 static int cur_store_num = 0;
797 static int store_top = 0;
798 static int store_bottom = 0;
799 static int xtra_stock = 0;
800 static store_type *st_ptr = NULL;
801 static const owner_type *ot_ptr = NULL;
802 static s16b old_town_num = 0;
803 static s16b inner_town_num = 0;
804 #define RUMOR_CHANCE 8
806 #define MAX_COMMENT_1 6
808 static concptr comment_1[MAX_COMMENT_1] =
829 /*! ブラックマーケット追加メッセージ(承諾) */
830 static concptr comment_1_B[MAX_COMMENT_1] = {
839 #define MAX_COMMENT_2A 2
841 static concptr comment_2a[MAX_COMMENT_2A] =
844 "私の忍耐力を試しているのかい? $%s が最後だ。",
845 "我慢にも限度があるぞ。 $%s が最後だ。"
847 "You try my patience. %s is final.",
848 "My patience grows thin. %s is final."
853 #define MAX_COMMENT_2B 12
855 static concptr comment_2b[MAX_COMMENT_2B] =
858 " $%s ぐらいは出さなきゃダメだよ。",
861 "何て奴だ! $%s 以下はあり得ないぞ。",
862 "それじゃ少なすぎる! $%s は欲しいところだ。",
863 "バカにしている! $%s はもらわないと。",
865 "おいおい! $%s を考えてくれないか?",
866 "1000匹のオークのノミに苦しめられるがいい! $%s だ。",
867 "お前の大切なものに災いあれ! $%s でどうだ。",
868 "モルゴスに賞味されるがいい!本当は $%s なんだろう?",
869 "お前の母親はオーガか! $%s は出すつもりなんだろ?"
871 "I can take no less than %s gold pieces.",
872 "I will accept no less than %s gold pieces.",
873 "Ha! No less than %s gold pieces.",
874 "You knave! No less than %s gold pieces.",
875 "That's a pittance! I want %s gold pieces.",
876 "That's an insult! I want %s gold pieces.",
877 "As if! How about %s gold pieces?",
878 "My arse! How about %s gold pieces?",
879 "May the fleas of 1000 orcs molest you! Try %s gold pieces.",
880 "May your most favourite parts go moldy! Try %s gold pieces.",
881 "May Morgoth find you tasty! Perhaps %s gold pieces?",
882 "Your mother was an Ogre! Perhaps %s gold pieces?"
888 /*! ブラックマーケット用追加メッセージ(売るとき) */
889 static concptr comment_2b_B[MAX_COMMENT_2B] = {
890 "いくら俺様がお人好しとはいえ $%s が限界だね。嫌なら帰りな。",
891 "金がないのかい、あんた?まずは家に帰って $%s 揃えてきな。",
892 "物の価値が分からん奴だな。これは $%s が普通なんだよ。",
893 "俺の付けた値段に文句があるのか? $%s が限界だ。",
894 "ひょっとして新手の冗談かい? $%s 持ってないなら帰りな。",
895 "うちは他の店とは違うんだよ。$%s ぐらいは出しな。",
896 "買う気がないなら帰りな。 $%s だと言っているんだ。",
897 "話にならないね。 $%s くらい持っているんだろ?",
898 "は?なんだそりゃ? $%s の間違いか、ひょっとして?",
899 "出口はあっちだよ。それとも $%s 出せるのかい、あんたに。",
900 "命知らずな奴だな。 $%s 出せば今日の所は勘弁してやるよ。",
901 "うちの店は貧乏人お断りだ。 $%s ぐらい出せないのかい?"
904 #define MAX_COMMENT_3A 2
906 static concptr comment_3a[MAX_COMMENT_3A] =
909 "私の忍耐力を試しているのかい? $%s が最後だ。",
910 "我慢にも限度があるぞ。 $%s が最後だ。"
912 "You try my patience. %s is final.",
913 "My patience grows thin. %s is final."
918 #define MAX_COMMENT_3B 12
920 static concptr comment_3b[MAX_COMMENT_3B] =
923 "本音を言うと $%s でいいんだろ?",
925 " $%s ぐらいなら出してもいいが。",
926 " $%s 以上払うなんて考えられないね。",
927 "まあ落ちついて。 $%s でどうだい?",
928 "そのガラクタなら $%s で引き取るよ。",
929 "それじゃ高すぎる! $%s がいいとこだろ。",
930 "どうせいらないんだろ! $%s でいいだろ?",
931 "だめだめ! $%s がずっとお似合いだよ。",
932 "バカにしている! $%s がせいぜいだ。",
933 " $%s なら嬉しいところだがなあ。",
934 " $%s 、それ以上はビタ一文出さないよ!"
936 "Perhaps %s gold pieces?",
937 "How about %s gold pieces?",
938 "I will pay no more than %s gold pieces.",
939 "I can afford no more than %s gold pieces.",
940 "Be reasonable. How about %s gold pieces?",
941 "I'll buy it as scrap for %s gold pieces.",
942 "That is too much! How about %s gold pieces?",
943 "That looks war surplus! Say %s gold pieces?",
944 "Never! %s is more like it.",
945 "That's an insult! %s is more like it.",
946 "%s gold pieces and be thankful for it!",
947 "%s gold pieces and not a copper more!"
953 /*! ブラックマーケット用追加メッセージ(買い取り) */
954 static concptr comment_3b_B[MAX_COMMENT_3B] = {
955 " $%s ってところだね。そのどうしようもないガラクタは。",
956 "この俺が $%s って言っているんだから、その通りにした方が身のためだぞ。",
957 "俺の優しさに甘えるのもいい加減にしておけ。 $%s だ。",
958 "その品なら $%s で売ってくれているがね、常識ある紳士はみんな。",
959 "こりゃまた、がめつい奴だな。いくら俺が温厚とはいえ $%s が限界だ。",
960 " $%s だ。別に俺はそんなガラクタ欲しくはないんだから。",
961 "俺の鑑定額が気に入らないのか? $%s 、嫌なら帰りな。",
962 " $%s で引き取ってやるよ。喜んで受け取りな、貧乏人。",
963 "物の価値が分からん奴は始末におえんな。それは $%s なんだよ。",
964 "そんなに金が欲しいのか、あんた? $%s で満足できんのか?",
965 "入る店間違えてんじゃないのか? $%s で嫌なら他をあたってくれ。",
966 "俺の言い値にケチをつける奴がいるとは! その度胸に免じて $%s だ。"
969 #define MAX_COMMENT_4A 4
971 static concptr comment_4a[MAX_COMMENT_4A] =
974 "もうたくさんだ!何度も私をわずらわせないでくれ!",
975 "うがー!一日の我慢の限度を超えている!",
976 "もういい!時間の無駄以外のなにものでもない!",
977 "もうやってられないよ!顔も見たくない!"
979 "Enough! You have abused me once too often!",
980 "Arghhh! I have had enough abuse for one day!",
981 "That does it! You shall waste my time no more!",
982 "This is getting nowhere! I'm going to Londis!"
988 /*! ブラックマーケット用追加メッセージ(怒りの頂点) */
989 static concptr comment_4a_B[MAX_COMMENT_4A] = {
990 "なめやがって!温厚な俺様でも限界があるってことを知れ!",
991 "俺をここまで怒らせて...命があるだけでもありがたいと思え!",
992 "ふざけてるのか!冷やかしなら相手を見てからにしろ!",
993 "いいかげんにしろ!今度こんなまねしたらただじゃおかねえぞ!"
996 #define MAX_COMMENT_4B 4
998 static concptr comment_4b[MAX_COMMENT_4B] =
1007 "Get out of my sight!",
1008 "Begone, you scoundrel!",
1015 /*! ブラックマーケット用追加メッセージ(追い出し) */
1016 static concptr comment_4b_B[MAX_COMMENT_4B] = {
1023 #define MAX_COMMENT_5 8
1025 static concptr comment_5[MAX_COMMENT_5] =
1039 "You will have to do better than that!",
1040 "Do you wish to do business or not?",
1041 "You've got to be kidding!",
1042 "You'd better be kidding!",
1043 "You try my patience.",
1044 "Hmmm, nice weather we're having."
1050 /*! ブラックマーケット用追加メッセージ(怒り) */
1051 static concptr comment_5_B[MAX_COMMENT_5] = {
1062 #define MAX_COMMENT_6 4
1064 static concptr comment_6[MAX_COMMENT_6] =
1072 "I must have heard you wrong.",
1073 "I'm sorry, I missed that.",
1074 "I'm sorry, what was that?",
1075 "Sorry, what was that again?"
1080 /*** Initialize others ***/
1083 * 店舗で販売するオブジェクトを定義する / Hack -- Objects sold in the stores -- by tval/sval pair.
1085 byte store_table[MAX_STORES][STORE_CHOICES][2] =
1090 { TV_FOOD, SV_FOOD_RATION },
1091 { TV_FOOD, SV_FOOD_RATION },
1092 { TV_FOOD, SV_FOOD_RATION },
1093 { TV_FOOD, SV_FOOD_RATION },
1095 { TV_FOOD, SV_FOOD_RATION },
1096 { TV_FOOD, SV_FOOD_BISCUIT },
1097 { TV_FOOD, SV_FOOD_JERKY },
1098 { TV_FOOD, SV_FOOD_JERKY },
1100 { TV_FOOD, SV_FOOD_PINT_OF_WINE },
1101 { TV_FOOD, SV_FOOD_PINT_OF_ALE },
1102 { TV_LITE, SV_LITE_TORCH },
1103 { TV_LITE, SV_LITE_TORCH },
1105 { TV_LITE, SV_LITE_TORCH },
1106 { TV_LITE, SV_LITE_TORCH },
1107 { TV_LITE, SV_LITE_LANTERN },
1108 { TV_LITE, SV_LITE_LANTERN },
1120 { TV_SHOT, SV_AMMO_NORMAL },
1121 { TV_ARROW, SV_AMMO_NORMAL },
1122 { TV_BOLT, SV_AMMO_NORMAL },
1123 { TV_DIGGING, SV_SHOVEL },
1125 { TV_DIGGING, SV_PICK },
1126 { TV_CLOAK, SV_CLOAK },
1127 { TV_CLOAK, SV_CLOAK },
1128 { TV_CLOAK, SV_FUR_CLOAK },
1130 { TV_FOOD, SV_FOOD_RATION },
1131 { TV_FOOD, SV_FOOD_RATION },
1132 { TV_FOOD, SV_FOOD_RATION },
1133 { TV_FOOD, SV_FOOD_RATION },
1135 { TV_POTION, SV_POTION_WATER },
1136 { TV_POTION, SV_POTION_WATER },
1137 { TV_LITE, SV_LITE_LANTERN },
1138 { TV_LITE, SV_LITE_LANTERN },
1140 { TV_FOOD, SV_FOOD_WAYBREAD },
1141 { TV_FOOD, SV_FOOD_WAYBREAD },
1145 { TV_SHOT, SV_AMMO_NORMAL },
1146 { TV_ARROW, SV_AMMO_NORMAL },
1147 { TV_BOLT, SV_AMMO_NORMAL },
1148 { TV_DIGGING, SV_SHOVEL }
1154 { TV_BOOTS, SV_PAIR_OF_SOFT_LEATHER_BOOTS },
1155 { TV_BOOTS, SV_PAIR_OF_SOFT_LEATHER_BOOTS },
1156 { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS },
1157 { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS },
1159 { TV_HELM, SV_HARD_LEATHER_CAP },
1160 { TV_HELM, SV_HARD_LEATHER_CAP },
1161 { TV_HELM, SV_METAL_CAP },
1162 { TV_HELM, SV_IRON_HELM },
1164 { TV_SOFT_ARMOR, SV_ROBE },
1165 { TV_SOFT_ARMOR, SV_ROBE },
1166 { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
1167 { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
1169 { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR },
1170 { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR },
1171 { TV_SOFT_ARMOR, SV_HARD_STUDDED_LEATHER },
1172 { TV_SOFT_ARMOR, SV_HARD_STUDDED_LEATHER },
1174 { TV_SOFT_ARMOR, SV_RHINO_HIDE_ARMOR },
1175 { TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL },
1176 { TV_HARD_ARMOR, SV_METAL_SCALE_MAIL },
1177 { TV_HARD_ARMOR, SV_CHAIN_MAIL },
1179 { TV_HARD_ARMOR, SV_DOUBLE_RING_MAIL },
1180 { TV_HARD_ARMOR, SV_AUGMENTED_CHAIN_MAIL },
1181 { TV_HARD_ARMOR, SV_BAR_CHAIN_MAIL },
1182 { TV_HARD_ARMOR, SV_DOUBLE_CHAIN_MAIL },
1184 { TV_HARD_ARMOR, SV_METAL_BRIGANDINE_ARMOUR },
1185 { TV_HARD_ARMOR, SV_SPLINT_MAIL },
1186 { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES },
1187 { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES },
1189 { TV_GLOVES, SV_SET_OF_GAUNTLETS },
1190 { TV_SHIELD, SV_SMALL_LEATHER_SHIELD },
1191 { TV_SHIELD, SV_LARGE_LEATHER_SHIELD },
1192 { TV_SHIELD, SV_SMALL_METAL_SHIELD },
1194 { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS },
1195 { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS },
1196 { TV_HELM, SV_HARD_LEATHER_CAP },
1197 { TV_HELM, SV_HARD_LEATHER_CAP },
1199 { TV_SOFT_ARMOR, SV_ROBE },
1200 { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
1201 { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
1202 { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR },
1204 { TV_SOFT_ARMOR, SV_LEATHER_JACK },
1205 { TV_HARD_ARMOR, SV_METAL_SCALE_MAIL },
1206 { TV_HARD_ARMOR, SV_CHAIN_MAIL },
1207 { TV_HARD_ARMOR, SV_CHAIN_MAIL },
1209 { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES },
1210 { TV_GLOVES, SV_SET_OF_GAUNTLETS },
1211 { TV_SHIELD, SV_SMALL_LEATHER_SHIELD },
1212 { TV_SHIELD, SV_SMALL_LEATHER_SHIELD }
1218 { TV_SWORD, SV_DAGGER },
1219 { TV_SWORD, SV_MAIN_GAUCHE },
1220 { TV_SWORD, SV_RAPIER },
1221 { TV_SWORD, SV_SMALL_SWORD },
1223 { TV_SWORD, SV_SHORT_SWORD },
1224 { TV_SWORD, SV_SABRE },
1225 { TV_SWORD, SV_CUTLASS },
1226 { TV_SWORD, SV_TULWAR },
1228 { TV_SWORD, SV_BROAD_SWORD },
1229 { TV_SWORD, SV_LONG_SWORD },
1230 { TV_SWORD, SV_SCIMITAR },
1231 { TV_SWORD, SV_KATANA },
1233 { TV_SWORD, SV_BASTARD_SWORD },
1234 { TV_POLEARM, SV_SPEAR },
1235 { TV_POLEARM, SV_AWL_PIKE },
1236 { TV_POLEARM, SV_TRIDENT },
1238 { TV_POLEARM, SV_PIKE },
1239 { TV_POLEARM, SV_BEAKED_AXE },
1240 { TV_POLEARM, SV_BROAD_AXE },
1241 { TV_POLEARM, SV_LANCE },
1243 { TV_POLEARM, SV_BATTLE_AXE },
1244 { TV_POLEARM, SV_HATCHET },
1245 { TV_BOW, SV_SLING },
1246 { TV_BOW, SV_SHORT_BOW },
1248 { TV_BOW, SV_LIGHT_XBOW },
1249 { TV_SHOT, SV_AMMO_NORMAL },
1250 { TV_SHOT, SV_AMMO_NORMAL },
1251 { TV_ARROW, SV_AMMO_NORMAL },
1253 { TV_ARROW, SV_AMMO_NORMAL },
1254 { TV_BOLT, SV_AMMO_NORMAL },
1255 { TV_BOLT, SV_AMMO_NORMAL },
1256 { TV_BOW, SV_LIGHT_XBOW },
1258 { TV_ARROW, SV_AMMO_NORMAL },
1259 { TV_BOLT, SV_AMMO_NORMAL },
1260 { TV_BOW, SV_SHORT_BOW },
1261 { TV_BOW, SV_LIGHT_XBOW },
1263 { TV_SWORD, SV_DAGGER },
1264 { TV_SWORD, SV_TANTO },
1265 { TV_SWORD, SV_RAPIER },
1266 { TV_SWORD, SV_SMALL_SWORD },
1268 { TV_SWORD, SV_SHORT_SWORD },
1269 { TV_SWORD, SV_LONG_SWORD },
1270 { TV_SWORD, SV_SCIMITAR },
1271 { TV_SWORD, SV_BROAD_SWORD },
1273 { TV_HISSATSU_BOOK, 0 },
1274 { TV_HISSATSU_BOOK, 0 },
1275 { TV_HISSATSU_BOOK, 1 },
1276 { TV_HISSATSU_BOOK, 1 },
1282 { TV_HAFTED, SV_NUNCHAKU },
1283 { TV_HAFTED, SV_QUARTERSTAFF },
1284 { TV_HAFTED, SV_MACE },
1285 { TV_HAFTED, SV_BO_STAFF },
1287 { TV_HAFTED, SV_WAR_HAMMER },
1288 { TV_HAFTED, SV_WAR_HAMMER },
1289 { TV_HAFTED, SV_MORNING_STAR },
1290 { TV_HAFTED, SV_FLAIL },
1292 { TV_HAFTED, SV_LEAD_FILLED_MACE },
1293 { TV_SCROLL, SV_SCROLL_REMOVE_CURSE },
1294 { TV_SCROLL, SV_SCROLL_BLESSING },
1295 { TV_SCROLL, SV_SCROLL_HOLY_CHANT },
1297 { TV_POTION, SV_POTION_HEROISM },
1298 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1299 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1300 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1302 { TV_POTION, SV_POTION_CURE_LIGHT },
1303 { TV_POTION, SV_POTION_CURE_SERIOUS },
1304 { TV_POTION, SV_POTION_CURE_SERIOUS },
1305 { TV_POTION, SV_POTION_CURE_CRITICAL },
1307 { TV_POTION, SV_POTION_CURE_CRITICAL },
1308 { TV_POTION, SV_POTION_RESTORE_EXP },
1309 { TV_POTION, SV_POTION_RESTORE_EXP },
1310 { TV_POTION, SV_POTION_RESTORE_EXP },
1312 { TV_LIFE_BOOK, 0 },
1313 { TV_LIFE_BOOK, 0 },
1314 { TV_LIFE_BOOK, 1 },
1315 { TV_LIFE_BOOK, 1 },
1317 { TV_CRUSADE_BOOK, 0 },
1318 { TV_CRUSADE_BOOK, 0 },
1319 { TV_CRUSADE_BOOK, 1 },
1320 { TV_CRUSADE_BOOK, 1 },
1322 { TV_HAFTED, SV_WHIP },
1323 { TV_HAFTED, SV_MACE },
1324 { TV_HAFTED, SV_BALL_AND_CHAIN },
1325 { TV_HAFTED, SV_WAR_HAMMER },
1327 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1328 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1329 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1330 { TV_POTION, SV_POTION_CURE_CRITICAL },
1332 { TV_POTION, SV_POTION_CURE_CRITICAL },
1333 { TV_POTION, SV_POTION_RESTORE_EXP },
1336 { TV_STATUE, SV_ANY },
1338 { TV_SCROLL, SV_SCROLL_REMOVE_CURSE },
1339 { TV_SCROLL, SV_SCROLL_REMOVE_CURSE },
1340 { TV_SCROLL, SV_SCROLL_STAR_REMOVE_CURSE },
1341 { TV_SCROLL, SV_SCROLL_STAR_REMOVE_CURSE }
1347 { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_HIT },
1348 { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_DAM },
1349 { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR },
1350 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1352 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1353 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1354 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1355 { TV_SCROLL, SV_SCROLL_LIGHT },
1357 { TV_SCROLL, SV_SCROLL_PHASE_DOOR },
1358 { TV_SCROLL, SV_SCROLL_PHASE_DOOR },
1359 { TV_SCROLL, SV_SCROLL_TELEPORT },
1360 { TV_SCROLL, SV_SCROLL_MONSTER_CONFUSION },
1362 { TV_SCROLL, SV_SCROLL_MAPPING },
1363 { TV_SCROLL, SV_SCROLL_DETECT_GOLD },
1364 { TV_SCROLL, SV_SCROLL_DETECT_ITEM },
1365 { TV_SCROLL, SV_SCROLL_DETECT_TRAP },
1367 { TV_SCROLL, SV_SCROLL_DETECT_INVIS },
1368 { TV_SCROLL, SV_SCROLL_RECHARGING },
1369 { TV_SCROLL, SV_SCROLL_TELEPORT },
1370 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1372 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1373 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1374 { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL },
1375 { TV_SCROLL, SV_SCROLL_TELEPORT },
1377 { TV_SCROLL, SV_SCROLL_TELEPORT },
1378 { TV_POTION, SV_POTION_RES_STR },
1379 { TV_POTION, SV_POTION_RES_INT },
1380 { TV_POTION, SV_POTION_RES_WIS },
1382 { TV_POTION, SV_POTION_RES_DEX },
1383 { TV_POTION, SV_POTION_RES_CON },
1384 { TV_POTION, SV_POTION_RES_CHR },
1385 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1387 { TV_SCROLL, SV_SCROLL_IDENTIFY },
1388 { TV_SCROLL, SV_SCROLL_STAR_IDENTIFY }, /* Yep, occasionally! */
1389 { TV_SCROLL, SV_SCROLL_STAR_IDENTIFY },
1390 { TV_SCROLL, SV_SCROLL_LIGHT },
1392 { TV_POTION, SV_POTION_RES_STR },
1393 { TV_POTION, SV_POTION_RES_INT },
1394 { TV_POTION, SV_POTION_RES_WIS },
1395 { TV_POTION, SV_POTION_RES_DEX },
1397 { TV_POTION, SV_POTION_RES_CON },
1398 { TV_POTION, SV_POTION_RES_CHR },
1399 { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR },
1400 { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR },
1402 { TV_SCROLL, SV_SCROLL_RECHARGING },
1403 { TV_SCROLL, SV_SCROLL_PHASE_DOOR },
1404 { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_HIT },
1405 { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_DAM },
1410 /* Magic-User store */
1412 { TV_RING, SV_RING_PROTECTION },
1413 { TV_RING, SV_RING_LEVITATION_FALL },
1414 { TV_RING, SV_RING_PROTECTION },
1415 { TV_RING, SV_RING_RESIST_FIRE },
1417 { TV_RING, SV_RING_RESIST_COLD },
1418 { TV_AMULET, SV_AMULET_CHARISMA },
1419 { TV_RING, SV_RING_WARNING },
1420 { TV_AMULET, SV_AMULET_RESIST_ACID },
1422 { TV_AMULET, SV_AMULET_SEARCHING },
1423 { TV_WAND, SV_WAND_SLOW_MONSTER },
1424 { TV_WAND, SV_WAND_CONFUSE_MONSTER },
1425 { TV_WAND, SV_WAND_SLEEP_MONSTER },
1427 { TV_WAND, SV_WAND_MAGIC_MISSILE },
1428 { TV_WAND, SV_WAND_STINKING_CLOUD },
1429 { TV_WAND, SV_WAND_WONDER },
1430 { TV_WAND, SV_WAND_DISARMING },
1432 { TV_STAFF, SV_STAFF_LITE },
1433 { TV_STAFF, SV_STAFF_MAPPING },
1434 { TV_STAFF, SV_STAFF_DETECT_TRAP },
1435 { TV_STAFF, SV_STAFF_DETECT_DOOR },
1437 { TV_STAFF, SV_STAFF_DETECT_GOLD },
1438 { TV_STAFF, SV_STAFF_DETECT_ITEM },
1439 { TV_STAFF, SV_STAFF_DETECT_INVIS },
1440 { TV_STAFF, SV_STAFF_DETECT_EVIL },
1442 { TV_STAFF, SV_STAFF_TELEPORTATION },
1443 { TV_STAFF, SV_STAFF_TELEPORTATION },
1444 { TV_STAFF, SV_STAFF_TELEPORTATION },
1445 { TV_STAFF, SV_STAFF_TELEPORTATION },
1447 { TV_STAFF, SV_STAFF_IDENTIFY },
1448 { TV_STAFF, SV_STAFF_IDENTIFY },
1449 { TV_STAFF, SV_STAFF_IDENTIFY },
1451 { TV_STAFF, SV_STAFF_IDENTIFY },
1452 { TV_STAFF, SV_STAFF_REMOVE_CURSE },
1453 { TV_STAFF, SV_STAFF_CURE_LIGHT },
1454 { TV_STAFF, SV_STAFF_PROBING },
1458 { TV_SORCERY_BOOK, 0 },
1459 { TV_SORCERY_BOOK, 0 },
1460 { TV_SORCERY_BOOK, 1 },
1461 { TV_SORCERY_BOOK, 1 },
1463 { TV_ARCANE_BOOK, 0 },
1464 { TV_ARCANE_BOOK, 0 },
1465 { TV_ARCANE_BOOK, 1 },
1466 { TV_ARCANE_BOOK, 1 },
1468 { TV_ARCANE_BOOK, 2 },
1469 { TV_ARCANE_BOOK, 2 },
1470 { TV_ARCANE_BOOK, 3 },
1471 { TV_ARCANE_BOOK, 3 },
1476 /* Black Market (unused) */
1549 { TV_SORCERY_BOOK, 0 },
1550 { TV_SORCERY_BOOK, 0 },
1551 { TV_SORCERY_BOOK, 1 },
1552 { TV_SORCERY_BOOK, 1 },
1554 { TV_NATURE_BOOK, 0 },
1555 { TV_NATURE_BOOK, 0 },
1556 { TV_NATURE_BOOK, 1 },
1557 { TV_NATURE_BOOK, 1 },
1559 { TV_CHAOS_BOOK, 0 },
1560 { TV_CHAOS_BOOK, 0 },
1561 { TV_CHAOS_BOOK, 1 },
1562 { TV_CHAOS_BOOK, 1 },
1564 { TV_DEATH_BOOK, 0 },
1565 { TV_DEATH_BOOK, 0 },
1566 { TV_DEATH_BOOK, 1 },
1567 { TV_DEATH_BOOK, 1 },
1569 { TV_TRUMP_BOOK, 0 }, /* +16 */
1570 { TV_TRUMP_BOOK, 0 },
1571 { TV_TRUMP_BOOK, 1 },
1572 { TV_TRUMP_BOOK, 1 },
1574 { TV_ARCANE_BOOK, 0 },
1575 { TV_ARCANE_BOOK, 1 },
1576 { TV_ARCANE_BOOK, 2 },
1577 { TV_ARCANE_BOOK, 3 },
1579 { TV_CRAFT_BOOK, 0 },
1580 { TV_CRAFT_BOOK, 0 },
1581 { TV_CRAFT_BOOK, 1 },
1582 { TV_CRAFT_BOOK, 1 },
1584 { TV_DAEMON_BOOK, 0 },
1585 { TV_DAEMON_BOOK, 0 },
1586 { TV_DAEMON_BOOK, 1 },
1587 { TV_DAEMON_BOOK, 1 },
1589 { TV_MUSIC_BOOK, 0 },
1590 { TV_MUSIC_BOOK, 0 },
1591 { TV_MUSIC_BOOK, 1 },
1592 { TV_MUSIC_BOOK, 1 },
1601 /* Museum (unused) */
1639 * @brief 取引成功時の店主のメッセージ処理 /
1640 * ブラックマーケットのときは別のメッセージを出す
1641 * Successful haggle.
1642 * @param player_ptr プレーヤーへの参照ポインタ
1645 static void say_comment_1(player_type *player_ptr)
1648 if (cur_store_num == STORE_BLACK)
1650 msg_print(comment_1_B[randint0(MAX_COMMENT_1)]);
1654 msg_print(comment_1[randint0(MAX_COMMENT_1)]);
1657 msg_print(comment_1[randint0(MAX_COMMENT_1)]);
1660 if (one_in_(RUMOR_CHANCE))
1663 msg_print("店主は耳うちした:");
1665 msg_print("The shopkeeper whispers something into your ear:");
1667 display_rumor(player_ptr, TRUE);
1673 * @brief プレイヤーがアイテムを買う時の価格代案メッセージ処理 /
1674 * Continue haggling (player is buying)
1675 * @param value 店主の提示価格
1676 * @param annoyed 店主のいらつき度
1679 static void say_comment_2(PRICE value, int annoyed)
1681 /* Prepare a string to insert */
1683 sprintf(tmp_val, "%ld", (long)value);
1687 msg_format(comment_2a[randint0(MAX_COMMENT_2A)], tmp_val);
1692 if (cur_store_num == STORE_BLACK)
1694 msg_format(comment_2b_B[randint0(MAX_COMMENT_2B)], tmp_val);
1698 msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val);
1701 msg_format(comment_2b[randint0(MAX_COMMENT_2B)], tmp_val);
1707 * @brief プレイヤーがアイテムを売る時の価格代案メッセージ処理 /
1708 * ブラックマーケットのときは別のメッセージを出す
1709 * Continue haggling (player is selling)
1710 * @param value 店主の提示価格
1711 * @param annoyed 店主のいらつき度
1714 static void say_comment_3(PRICE value, int annoyed)
1717 sprintf(tmp_val, "%ld", (long)value);
1720 msg_format(comment_3a[randint0(MAX_COMMENT_3A)], tmp_val);
1725 /* ブラックマーケットの時は別のメッセージを出す */
1726 if (cur_store_num == STORE_BLACK)
1728 msg_format(comment_3b_B[randint0(MAX_COMMENT_3B)], tmp_val);
1732 msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val);
1735 msg_format(comment_3b[randint0(MAX_COMMENT_3B)], tmp_val);
1742 * @brief 店主がプレイヤーを追い出す時のメッセージ処理 /
1743 * ブラックマーケットの時は別のメッセージを出す
1744 * Kick 'da bum out. -RAK-
1747 static void say_comment_4(void)
1750 if (cur_store_num == STORE_BLACK)
1752 msg_print(comment_4a_B[randint0(MAX_COMMENT_4A)]);
1753 msg_print(comment_4b_B[randint0(MAX_COMMENT_4B)]);
1757 msg_print(comment_4a[randint0(MAX_COMMENT_4A)]);
1758 msg_print(comment_4b[randint0(MAX_COMMENT_4B)]);
1761 msg_print(comment_4a[randint0(MAX_COMMENT_4A)]);
1762 msg_print(comment_4b[randint0(MAX_COMMENT_4B)]);
1769 * @brief 店主がプレイヤーに取り合わない時のメッセージ処理 /
1770 * ブラックマーケットの時は別のメッセージを出す
1771 * You are insulting me
1774 static void say_comment_5(void)
1777 if (cur_store_num == STORE_BLACK)
1779 msg_print(comment_5_B[randint0(MAX_COMMENT_5)]);
1783 msg_print(comment_5[randint0(MAX_COMMENT_5)]);
1786 msg_print(comment_5[randint0(MAX_COMMENT_5)]);
1793 * @brief 店主がプレイヤーの提示を理解できなかった時のメッセージ処理 /
1794 * That makes no sense.
1797 static void say_comment_6(void)
1799 msg_print(comment_6[randint0(MAX_COMMENT_6)]);
1802 #define MAX_COMMENT_7A 4
1804 static concptr comment_7a[MAX_COMMENT_7A] =
1809 "誰かがむせび泣く声が聞こえる...。",
1814 "You hear someone sobbing...",
1815 "The shopkeeper howls in agony!"
1820 #define MAX_COMMENT_7B 4
1822 static concptr comment_7b[MAX_COMMENT_7B] =
1832 "The shopkeeper curses at you.",
1833 "The shopkeeper glares at you."
1838 #define MAX_COMMENT_7C 4
1840 static concptr comment_7c[MAX_COMMENT_7C] =
1849 "You've made my day!",
1850 "The shopkeeper giggles.",
1851 "The shopkeeper laughs loudly."
1856 #define MAX_COMMENT_7D 4
1858 static concptr comment_7d[MAX_COMMENT_7D] =
1862 "こんなおいしい思いをしたら、真面目に働けなくなるなぁ。",
1867 "I think I'll retire!",
1868 "The shopkeeper jumps for joy.",
1869 "The shopkeeper smiles gleefully."
1876 * @brief 店主が交渉を終えた際の反応を返す処理 /
1877 * Let a shop-keeper React to a purchase
1878 * @param price アイテムの取引額
1879 * @param value アイテムの実際価値
1880 * @param guess 店主が当初予想していた価値
1883 * We paid "price", it was worth "value", and we thought it was worth "guess"
1885 static void purchase_analyze(player_type *player_ptr, PRICE price, PRICE value, PRICE guess)
1887 /* Item was worthless, but we bought it */
1888 if ((value <= 0) && (price > value))
1890 msg_print(comment_7a[randint0(MAX_COMMENT_7A)]);
1891 chg_virtue(player_ptr, V_HONOUR, -1);
1892 chg_virtue(player_ptr, V_JUSTICE, -1);
1893 sound(SOUND_STORE1);
1897 /* Item was cheaper than we thought, and we paid more than necessary */
1898 if ((value < guess) && (price > value))
1900 msg_print(comment_7b[randint0(MAX_COMMENT_7B)]);
1901 chg_virtue(player_ptr, V_JUSTICE, -1);
1902 if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, -1);
1903 sound(SOUND_STORE2);
1907 /* Item was a good bargain, and we got away with it */
1908 if ((value > guess) && (value < (4 * guess)) && (price < value))
1910 msg_print(comment_7c[randint0(MAX_COMMENT_7C)]);
1911 if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, -1);
1912 else if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, 1);
1913 sound(SOUND_STORE3);
1917 /* Item was a great bargain, and we got away with it */
1918 if ((value > guess) && (price < value))
1920 msg_print(comment_7d[randint0(MAX_COMMENT_7D)]);
1921 if (one_in_(2)) chg_virtue(player_ptr, V_HONOUR, -1);
1922 if (one_in_(4)) chg_virtue(player_ptr, V_HONOUR, 1);
1923 if (10 * price < value) chg_virtue(player_ptr, V_SACRIFICE, 1);
1924 sound(SOUND_STORE4);
1930 * We store the current "store feat" here so everyone can access it
1932 static int cur_store_feat;
1935 * Buying and selling adjustments for race combinations.
1936 * Entry[owner][player] gives the basic "cost inflation".
1938 static byte rgold_adj[MAX_RACES][MAX_RACES] =
1940 /*Hum, HfE, Elf, Hal, Gno, Dwa, HfO, HfT, Dun, HiE, Barbarian,
1941 HfOg, HGn, HTn, Cyc, Yek, Klc, Kbd, Nbl, DkE, Drc, Mind Flayer,
1942 Imp, Glm, Skl, Zombie, Vampire, Spectre, Fairy, Beastman, Ent,
1943 Angel, Demon, Kutar, Android, Merfolk */
1946 { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
1947 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
1948 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140,
1949 100, 120, 110, 105, 110 },
1952 { 110, 100, 100, 105, 110, 120, 125, 130, 110, 100, 110,
1953 120, 115, 108, 115, 110, 110, 120, 120, 115, 115, 110,
1954 120, 110, 110, 110, 120, 110, 100, 125, 100, 95, 140,
1955 110, 115, 110, 110, 110 },
1958 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
1959 120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108,
1960 120, 115, 110, 110, 120, 110, 100, 125, 100, 95, 140,
1961 110, 110, 105, 110, 110 },
1964 { 115, 110, 105, 95, 105, 110, 115, 130, 115, 105, 115,
1965 125, 120, 120, 125, 115, 110, 120, 120, 120, 115, 115,
1966 120, 110, 120, 120, 130, 110, 110, 130, 110, 95, 140,
1967 115, 120, 105, 115, 105 },
1970 { 115, 115, 110, 105, 95, 110, 115, 130, 115, 110, 115,
1971 120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110,
1972 120, 101, 110, 110, 120, 120, 115, 130, 115, 95, 140,
1973 115, 110, 110, 115, 110 },
1976 { 115, 120, 120, 110, 110, 95, 125, 135, 115, 120, 115,
1977 125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120,
1978 120, 105, 115, 115, 115, 115, 120, 130, 120, 95, 140,
1979 115, 110, 115, 115, 120 },
1982 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
1983 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
1984 115, 125, 120, 120, 115, 120, 125, 115, 125, 95, 140,
1985 115, 110, 115, 115, 125 },
1988 { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
1989 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
1990 110, 115, 112, 112, 115, 112, 120, 110, 120, 95, 140,
1991 110, 110, 115, 110, 130 },
1994 { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
1995 120, 120, 105, 120, 115, 105, 115, 120, 110, 105, 105,
1996 120, 105, 120, 120, 125, 120, 105, 135, 105, 95, 140,
1997 100, 110, 110, 100, 110 },
2000 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2001 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2002 125, 115, 120, 120, 125, 120, 100, 125, 100, 95, 140,
2003 110, 110, 105, 110, 110 },
2005 /* Human / Barbarian (copied from human) */
2006 { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
2007 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
2008 115, 105, 125, 125, 130, 125, 115, 120, 115, 95, 140,
2009 100, 120, 110, 100, 110 },
2011 /* Half-Ogre: theoretical, copied from half-troll */
2012 { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
2013 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
2014 110, 115, 112, 112, 115, 112, 120, 110, 120, 95, 140,
2015 110, 110, 115, 110, 120 },
2017 /* Half-Giant: theoretical, copied from half-troll */
2018 { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
2019 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
2020 110, 115, 112, 112, 115, 112, 130, 120, 130, 95, 140,
2021 110, 110, 115, 110, 115 },
2023 /* Half-Titan: theoretical, copied from High_Elf */
2024 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2025 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2026 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140,
2027 110, 110, 115, 110, 108 },
2029 /* Cyclops: theoretical, copied from half-troll */
2030 { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110,
2031 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110,
2032 110, 115, 112, 112, 115, 112, 130, 130, 130, 95, 140,
2033 110, 110, 115, 110, 115 },
2035 /* Yeek: theoretical, copied from Half-Orc */
2036 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2037 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2038 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140,
2039 115, 110, 115, 115, 110 },
2041 /* Klackon: theoretical, copied from Gnome */
2042 { 115, 115, 110, 105, 95, 110, 115, 130, 115, 110, 115,
2043 120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110,
2044 120, 101, 110, 110, 120, 120, 130, 130, 130, 95, 140,
2045 115, 110, 115, 115, 110 },
2047 /* Kobold: theoretical, copied from Half-Orc */
2048 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2049 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2050 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140,
2051 115, 110, 115, 115, 120 },
2053 /* Nibelung: theoretical, copied from Dwarf */
2054 { 115, 120, 120, 110, 110, 95, 125, 135, 115, 120, 115,
2055 125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120,
2056 120, 105, 115, 115, 120, 120, 130, 130, 130, 95, 140,
2057 115, 135, 115, 115, 120 },
2060 { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115,
2061 115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110,
2062 110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120,
2063 110, 101, 115, 110, 115 },
2065 /* Draconian: theoretical, copied from High_Elf */
2066 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2067 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2068 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140,
2069 110, 110, 115, 110, 115 },
2071 /* Mind Flayer: theoretical, copied from High_Elf */
2072 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2073 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2074 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140,
2075 110, 110, 115, 110, 110 },
2077 /* Imp: theoretical, copied from High_Elf */
2078 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2079 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2080 125, 115, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2081 110, 110, 115, 110, 120 },
2083 /* Golem: theoretical, copied from High_Elf */
2084 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2085 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110,
2086 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140,
2087 110, 110, 115, 110, 110 },
2089 /* Skeleton: theoretical, copied from half-orc */
2090 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2091 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2092 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2093 115, 110, 125, 115, 110 },
2095 /* Zombie: Theoretical, copied from half-orc */
2096 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2097 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2098 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2099 115, 110, 125, 115, 110 },
2101 /* Vampire: Theoretical, copied from half-orc */
2102 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2103 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2104 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2105 115, 110, 125, 115, 120 },
2107 /* Spectre: Theoretical, copied from half-orc */
2108 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2109 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2110 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120,
2111 115, 110, 125, 115, 110 },
2113 /* Sprite: Theoretical, copied from half-orc */
2114 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2115 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2116 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140,
2117 115, 110, 105, 115, 110 },
2119 /* Beastman: Theoretical, copied from half-orc */
2120 { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115,
2121 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110,
2122 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140,
2123 115, 110, 115, 115, 125 },
2126 { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110,
2127 120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108,
2128 120, 115, 110, 110, 120, 110, 100, 125, 100, 95, 140,
2129 110, 110, 105, 110, 110 },
2132 { 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
2133 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95,
2134 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 160,
2135 95, 95, 95, 95, 95 },
2138 { 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
2139 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140,
2140 140, 140, 140, 140, 140, 140, 140, 140, 140, 160, 120,
2141 140, 140, 140, 140, 140 },
2144 { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
2145 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
2146 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140,
2147 100, 120, 110, 100, 110 },
2150 { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115,
2151 115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110,
2152 110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120,
2153 110, 101, 115, 110, 115 },
2156 { 110, 110, 105, 105, 110, 115, 115, 115, 110, 105, 110,
2157 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115,
2158 115, 115, 125, 125, 125, 125, 105, 115, 105, 95, 140,
2159 110, 115, 100, 110, 110 },
2162 { 105, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100,
2163 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120,
2164 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140,
2165 100, 120, 110, 100, 110 },
2168 { 110, 110, 110, 105, 110, 120, 125, 130, 110, 110, 110,
2169 120, 115, 108, 115, 110, 110, 120, 120, 115, 115, 110,
2170 120, 110, 110, 110, 120, 110, 110, 125, 110, 95, 140,
2171 110, 115, 110, 110, 100 },
2176 * @brief 店舗価格を決定する. 無料にはならない /
2177 * Determine the price of an item (qty one) in a store.
2178 * @param o_ptr 店舗に並べるオブジェクト構造体の参照ポインタ
2179 * @param greed 店主の強欲度
2180 * @param flip TRUEならば店主にとっての買取価格、FALSEなら売出価格を計算
2184 * This function takes into account the player's charisma, and the
2185 * shop-keepers friendliness, and the shop-keeper's base greed, but
2186 * never lets a shop-keeper lose money in a transaction.
2187 * The "greed" value should exceed 100 when the player is "buying" the
2188 * item, and should be less than 100 when the player is "selling" it.
2189 * Hack -- the black market always charges twice as much as it should.
2190 * Charisma adjustment runs from 80 to 130
2191 * Racial adjustment runs from 95 to 130
2192 * Since greed/charisma/racial adjustments are centered at 100, we need
2193 * to adjust (by 200) to extract a usable multiplier. Note that the
2194 * "greed" value is always something (?).
2197 static PRICE price_item(player_type *player_ptr, object_type *o_ptr, int greed, bool flip)
2199 PRICE price = object_value(o_ptr);
2200 if (price <= 0) return (0L);
2202 int factor = rgold_adj[ot_ptr->owner_race][player_ptr->prace];
2203 factor += adj_chr_gold[player_ptr->stat_ind[A_CHR]];
2207 adjust = 100 + (300 - (greed + factor));
2208 if (adjust > 100) adjust = 100;
2209 if (cur_store_num == STORE_BLACK)
2212 price = (price * adjust + 50L) / 100L;
2216 adjust = 100 + ((greed + factor) - 300);
2217 if (adjust < 100) adjust = 100;
2218 if (cur_store_num == STORE_BLACK)
2221 price = (s32b)(((u32b)price * (u32b)adjust + 50UL) / 100UL);
2224 if (price <= 0L) return (1L);
2230 * @brief 安価な消耗品の販売数を増やし、低確率で割引にする /
2231 * Certain "cheap" objects should be created in "piles"
2232 * @param o_ptr 店舗に並べるオブジェクト構造体の参照ポインタ
2236 * Some objects can be sold at a "discount" (in small piles)
2239 static void mass_produce(object_type *o_ptr)
2242 PRICE cost = object_value(o_ptr);
2243 switch (o_ptr->tval)
2249 if (cost <= 5L) size += damroll(3, 5);
2250 if (cost <= 20L) size += damroll(3, 5);
2251 if (cost <= 50L) size += damroll(2, 2);
2257 if (cost <= 60L) size += damroll(3, 5);
2258 if (cost <= 240L) size += damroll(1, 5);
2259 if (o_ptr->sval == SV_SCROLL_STAR_IDENTIFY) size += damroll(3, 5);
2260 if (o_ptr->sval == SV_SCROLL_STAR_REMOVE_CURSE) size += damroll(1, 4);
2264 case TV_SORCERY_BOOK:
2265 case TV_NATURE_BOOK:
2269 case TV_ARCANE_BOOK:
2271 case TV_DAEMON_BOOK:
2272 case TV_CRUSADE_BOOK:
2274 case TV_HISSATSU_BOOK:
2277 if (cost <= 50L) size += damroll(2, 3);
2278 if (cost <= 500L) size += damroll(1, 3);
2295 if (object_is_artifact(o_ptr)) break;
2296 if (object_is_ego(o_ptr)) break;
2297 if (cost <= 10L) size += damroll(3, 5);
2298 if (cost <= 100L) size += damroll(3, 5);
2306 if (cost <= 5L) size += damroll(5, 5);
2307 if (cost <= 50L) size += damroll(5, 5);
2308 if (cost <= 500L) size += damroll(5, 5);
2313 if (cost <= 100L) size += damroll(2, 2);
2314 if (cost <= 1000L) size += damroll(2, 2);
2326 * Because many rods (and a few wands and staffs) are useful mainly
2327 * in quantity, the Black Market will occasionally have a bunch of
2334 if ((cur_store_num == STORE_BLACK) && one_in_(3))
2336 if (cost < 1601L) size += damroll(1, 5);
2337 else if (cost < 3201L) size += damroll(1, 3);
2343 DISCOUNT_RATE discount = 0;
2348 else if (one_in_(25))
2352 else if (one_in_(150))
2356 else if (one_in_(300))
2360 else if (one_in_(500))
2365 if (o_ptr->art_name)
2370 o_ptr->discount = discount;
2371 o_ptr->number = size - (size * discount / 100);
2372 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
2374 o_ptr->pval *= (PARAMETER_VALUE)o_ptr->number;
2380 * @brief 店舗に並べた品を同一品であるかどうか判定する /
2381 * Determine if a store item can "absorb" another item
2382 * @param o_ptr 判定するオブジェクト構造体の参照ポインタ1
2383 * @param j_ptr 判定するオブジェクト構造体の参照ポインタ2
2384 * @return 同一扱いできるならTRUEを返す
2387 * See "object_similar()" for the same function for the "player"
2390 static bool store_object_similar(object_type *o_ptr, object_type *j_ptr)
2392 if (o_ptr == j_ptr) return 0;
2393 if (o_ptr->k_idx != j_ptr->k_idx) return 0;
2394 if ((o_ptr->pval != j_ptr->pval) && (o_ptr->tval != TV_WAND) && (o_ptr->tval != TV_ROD)) return 0;
2395 if (o_ptr->to_h != j_ptr->to_h) return 0;
2396 if (o_ptr->to_d != j_ptr->to_d) return 0;
2397 if (o_ptr->to_a != j_ptr->to_a) return 0;
2398 if (o_ptr->name2 != j_ptr->name2) return 0;
2399 if (object_is_artifact(o_ptr) || object_is_artifact(j_ptr)) return 0;
2400 for (int i = 0; i < TR_FLAG_SIZE; i++)
2401 if (o_ptr->art_flags[i] != j_ptr->art_flags[i]) return 0;
2402 if (o_ptr->xtra1 || j_ptr->xtra1) return 0;
2403 if (o_ptr->timeout || j_ptr->timeout) return 0;
2404 if (o_ptr->ac != j_ptr->ac) return 0;
2405 if (o_ptr->dd != j_ptr->dd) return 0;
2406 if (o_ptr->ds != j_ptr->ds) return 0;
2407 if (o_ptr->tval == TV_CHEST) return 0;
2408 if (o_ptr->tval == TV_STATUE) return 0;
2409 if (o_ptr->tval == TV_CAPTURE) return 0;
2410 if (o_ptr->discount != j_ptr->discount) return 0;
2416 * @brief 店舗に並べた品を重ね合わせできるかどうか判定する /
2417 * Allow a store item to absorb another item
2418 * @param o_ptr 判定するオブジェクト構造体の参照ポインタ1
2419 * @param j_ptr 判定するオブジェクト構造体の参照ポインタ2
2420 * @return 重ね合わせできるならTRUEを返す
2423 * See "object_similar()" for the same function for the "player"
2426 static void store_object_absorb(object_type *o_ptr, object_type *j_ptr)
2428 int max_num = (o_ptr->tval == TV_ROD) ?
2429 MIN(99, MAX_SHORT / k_info[o_ptr->k_idx].pval) : 99;
2430 int total = o_ptr->number + j_ptr->number;
2431 int diff = (total > max_num) ? total - max_num : 0;
2432 o_ptr->number = (total > max_num) ? max_num : total;
2433 if (o_ptr->tval == TV_ROD)
2435 o_ptr->pval += j_ptr->pval * (j_ptr->number - diff) / j_ptr->number;
2438 if (o_ptr->tval == TV_WAND)
2440 o_ptr->pval += j_ptr->pval * (j_ptr->number - diff) / j_ptr->number;
2446 * @brief 店舗に品を置くスペースがあるかどうかの判定を返す /
2447 * Check to see if the shop will be carrying too many objects -RAK-
2448 * @param o_ptr 店舗に置きたいオブジェクト構造体の参照ポインタ
2449 * @return 置き場がないなら0、重ね合わせできるアイテムがあるなら-1、スペースがあるなら1を返す。
2452 * Note that the shop, just like a player, will not accept things
2453 * it cannot hold. Before, one could "nuke" potions this way.
2454 * Return value is now int:
2456 * -1 : Can be combined to existing slot.
2457 * 1 : Cannot be combined but there are empty spaces.
2460 static int store_check_num(object_type *o_ptr)
2463 if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
2465 bool old_stack_force_notes = stack_force_notes;
2466 bool old_stack_force_costs = stack_force_costs;
2468 if (cur_store_num != STORE_HOME)
2470 stack_force_notes = FALSE;
2471 stack_force_costs = FALSE;
2474 for (int i = 0; i < st_ptr->stock_num; i++)
2476 j_ptr = &st_ptr->stock[i];
2477 if (object_similar(j_ptr, o_ptr))
2479 if (cur_store_num != STORE_HOME)
2481 stack_force_notes = old_stack_force_notes;
2482 stack_force_costs = old_stack_force_costs;
2489 if (cur_store_num != STORE_HOME)
2491 stack_force_notes = old_stack_force_notes;
2492 stack_force_costs = old_stack_force_costs;
2497 for (int i = 0; i < st_ptr->stock_num; i++)
2499 j_ptr = &st_ptr->stock[i];
2500 if (store_object_similar(j_ptr, o_ptr)) return -1;
2504 /* Free space is always usable */
2506 * オプション powerup_home が設定されていると
2509 if ((cur_store_num == STORE_HOME) && (powerup_home == FALSE))
2511 if (st_ptr->stock_num < ((st_ptr->stock_size) / 10))
2518 if (st_ptr->stock_num < st_ptr->stock_size)
2529 * @brief オブジェクトが祝福されているかの判定を返す /
2530 * @param o_ptr 判定したいオブジェクト構造体の参照ポインタ
2531 * @return アイテムが祝福されたアイテムならばTRUEを返す
2533 static bool is_blessed_item(object_type *o_ptr)
2535 BIT_FLAGS flgs[TR_FLAG_SIZE];
2536 object_flags(o_ptr, flgs);
2537 if (have_flag(flgs, TR_BLESSED)) return TRUE;
2543 * @brief オブジェクトが所定の店舗で引き取れるかどうかを返す /
2544 * Determine if the current store will purchase the given item
2545 * @param o_ptr 判定したいオブジェクト構造体の参照ポインタ
2546 * @return アイテムが買い取れるならばTRUEを返す
2548 * Note that a shop-keeper must refuse to buy "worthless" items
2550 static bool store_will_buy(object_type *o_ptr)
2552 if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) return TRUE;
2553 switch (cur_store_num)
2557 switch (o_ptr->tval)
2560 if (o_ptr->sval != SV_POTION_WATER) return FALSE;
2586 switch (o_ptr->tval)
2606 switch (o_ptr->tval)
2615 case TV_HISSATSU_BOOK:
2619 if (o_ptr->sval == SV_WIZSTAFF) return FALSE;
2630 switch (o_ptr->tval)
2633 case TV_CRUSADE_BOOK:
2643 monster_race *r_ptr = &r_info[o_ptr->pval];
2644 if (!(r_ptr->flags3 & RF3_EVIL))
2646 if (r_ptr->flags3 & RF3_GOOD) break;
2647 if (r_ptr->flags3 & RF3_ANIMAL) break;
2648 if (my_strchr("?!", r_ptr->d_char)) break;
2654 if (is_blessed_item(o_ptr)) break;
2662 case STORE_ALCHEMIST:
2664 switch (o_ptr->tval)
2677 switch (o_ptr->tval)
2679 case TV_SORCERY_BOOK:
2680 case TV_NATURE_BOOK:
2684 case TV_ARCANE_BOOK:
2686 case TV_DAEMON_BOOK:
2700 if (o_ptr->sval == SV_WIZSTAFF) break;
2711 switch (o_ptr->tval)
2713 case TV_SORCERY_BOOK:
2714 case TV_NATURE_BOOK:
2719 case TV_ARCANE_BOOK:
2721 case TV_DAEMON_BOOK:
2722 case TV_CRUSADE_BOOK:
2734 if (object_value(o_ptr) <= 0) return FALSE;
2740 * @brief 現在の町の指定された店舗のアイテムを整理する /
2741 * Combine and reorder items in store.
2742 * @param store_num 店舗ID
2743 * @return 実際に整理が行われたならばTRUEを返す。
2745 bool combine_and_reorder_home(int store_num)
2747 store_type *old_st_ptr = st_ptr;
2748 st_ptr = &town_info[1].store[store_num];
2750 if (store_num != STORE_HOME)
2752 stack_force_notes = FALSE;
2753 stack_force_costs = FALSE;
2756 bool combined = TRUE;
2760 for (int i = st_ptr->stock_num - 1; i > 0; i--)
2763 o_ptr = &st_ptr->stock[i];
2764 if (!o_ptr->k_idx) continue;
2765 for (int j = 0; j < i; j++)
2768 j_ptr = &st_ptr->stock[j];
2769 if (!j_ptr->k_idx) continue;
2772 * Get maximum number of the stack if these
2773 * are similar, get zero otherwise.
2775 int max_num = object_similar_part(j_ptr, o_ptr);
2776 if (max_num == 0 || j_ptr->number >= max_num) continue;
2778 if (o_ptr->number + j_ptr->number <= max_num)
2780 object_absorb(j_ptr, o_ptr);
2781 st_ptr->stock_num--;
2783 for (k = i; k < st_ptr->stock_num; k++)
2785 st_ptr->stock[k] = st_ptr->stock[k + 1];
2788 object_wipe(&st_ptr->stock[k]);
2793 ITEM_NUMBER old_num = o_ptr->number;
2794 ITEM_NUMBER remain = j_ptr->number + o_ptr->number - max_num;
2795 object_absorb(j_ptr, o_ptr);
2796 o_ptr->number = remain;
2797 if (o_ptr->tval == TV_ROD)
2799 o_ptr->pval = o_ptr->pval * remain / old_num;
2800 o_ptr->timeout = o_ptr->timeout * remain / old_num;
2802 else if (o_ptr->tval == TV_WAND)
2804 o_ptr->pval = o_ptr->pval * remain / old_num;
2815 for (int i = 0; i < st_ptr->stock_num; i++)
2818 o_ptr = &st_ptr->stock[i];
2819 if (!o_ptr->k_idx) continue;
2821 s32b o_value = object_value(o_ptr);
2823 for (j = 0; j < st_ptr->stock_num; j++)
2825 if (object_sort_comp(o_ptr, o_value, &st_ptr->stock[j])) break;
2828 if (j >= i) continue;
2834 object_copy(j_ptr, &st_ptr->stock[i]);
2835 for (int k = i; k > j; k--)
2837 object_copy(&st_ptr->stock[k], &st_ptr->stock[k - 1]);
2840 object_copy(&st_ptr->stock[j], j_ptr);
2843 st_ptr = old_st_ptr;
2844 bool old_stack_force_notes = stack_force_notes;
2845 bool old_stack_force_costs = stack_force_costs;
2846 if (store_num != STORE_HOME)
2848 stack_force_notes = old_stack_force_notes;
2849 stack_force_costs = old_stack_force_costs;
2857 * @brief 我が家にオブジェクトを加える /
2858 * Add the item "o_ptr" to the inventory of the "Home"
2859 * @param o_ptr 加えたいオブジェクトの構造体参照ポインタ
2863 * In all cases, return the slot (or -1) where the object was placed
2864 * Note that this is a hacked up version of "inven_carry()".
2865 * Also note that it may not correctly "adapt" to "knowledge" bacoming
2866 * known, the player may have to pick stuff up and drop it again.
2869 static int home_carry(player_type *player_ptr, object_type *o_ptr)
2871 if (cur_store_num != STORE_HOME)
2873 stack_force_notes = FALSE;
2874 stack_force_costs = FALSE;
2877 bool old_stack_force_notes = stack_force_notes;
2878 bool old_stack_force_costs = stack_force_costs;
2879 for (int slot = 0; slot < st_ptr->stock_num; slot++)
2882 j_ptr = &st_ptr->stock[slot];
2883 if (object_similar(j_ptr, o_ptr))
2885 object_absorb(j_ptr, o_ptr);
2886 if (cur_store_num != STORE_HOME)
2888 stack_force_notes = old_stack_force_notes;
2889 stack_force_costs = old_stack_force_costs;
2896 if (cur_store_num != STORE_HOME)
2898 stack_force_notes = old_stack_force_notes;
2899 stack_force_costs = old_stack_force_costs;
2904 * 隠し機能: オプション powerup_home が設定されていると
2907 if ((cur_store_num != STORE_HOME) || (powerup_home == TRUE))
2909 if (st_ptr->stock_num >= st_ptr->stock_size)
2916 if (st_ptr->stock_num >= ((st_ptr->stock_size) / 10))
2922 PRICE value = object_value(o_ptr);
2924 for (slot = 0; slot < st_ptr->stock_num; slot++)
2926 if (object_sort_comp(o_ptr, value, &st_ptr->stock[slot])) break;
2929 for (int i = st_ptr->stock_num; i > slot; i--)
2931 st_ptr->stock[i] = st_ptr->stock[i - 1];
2934 st_ptr->stock_num++;
2935 st_ptr->stock[slot] = *o_ptr;
2936 chg_virtue(player_ptr, V_SACRIFICE, -1);
2937 (void)combine_and_reorder_home(cur_store_num);
2943 * @brief 店舗にオブジェクトを加える /
2944 * Add the item "o_ptr" to a real stores inventory.
2945 * @param o_ptr 加えたいオブジェクトの構造体参照ポインタ
2949 * In all cases, return the slot (or -1) where the object was placed
2950 * Note that this is a hacked up version of "inven_carry()".
2951 * Also note that it may not correctly "adapt" to "knowledge" bacoming
2952 * known, the player may have to pick stuff up and drop it again.
2955 static int store_carry(object_type *o_ptr)
2957 PRICE value = object_value(o_ptr);
2958 if (value <= 0) return -1;
2959 o_ptr->ident |= IDENT_FULL_KNOWN;
2960 o_ptr->inscription = 0;
2961 o_ptr->feeling = FEEL_NONE;
2963 for (slot = 0; slot < st_ptr->stock_num; slot++)
2966 j_ptr = &st_ptr->stock[slot];
2967 if (store_object_similar(j_ptr, o_ptr))
2969 store_object_absorb(j_ptr, o_ptr);
2974 if (st_ptr->stock_num >= st_ptr->stock_size) return -1;
2976 for (slot = 0; slot < st_ptr->stock_num; slot++)
2979 j_ptr = &st_ptr->stock[slot];
2980 if (o_ptr->tval > j_ptr->tval) break;
2981 if (o_ptr->tval < j_ptr->tval) continue;
2982 if (o_ptr->sval < j_ptr->sval) break;
2983 if (o_ptr->sval > j_ptr->sval) continue;
2984 if (o_ptr->tval == TV_ROD)
2986 if (o_ptr->pval < j_ptr->pval) break;
2987 if (o_ptr->pval > j_ptr->pval) continue;
2990 PRICE j_value = object_value(j_ptr);
2991 if (value > j_value) break;
2992 if (value < j_value) continue;
2995 for (int i = st_ptr->stock_num; i > slot; i--)
2997 st_ptr->stock[i] = st_ptr->stock[i - 1];
3000 st_ptr->stock_num++;
3001 st_ptr->stock[slot] = *o_ptr;
3007 * @brief 店舗のオブジェクト数を増やす /
3008 * Add the item "o_ptr" to a real stores inventory.
3009 * @param item 増やしたいアイテムのID
3014 * Increase, by a given amount, the number of a certain item
3015 * in a certain store. This can result in zero items.
3017 * @todo numは本来ITEM_NUMBER型にしたい。
3019 static void store_item_increase(INVENTORY_IDX item, int num)
3022 o_ptr = &st_ptr->stock[item];
3023 int cnt = o_ptr->number + num;
3024 if (cnt > 255) cnt = 255;
3025 else if (cnt < 0) cnt = 0;
3027 num = cnt - o_ptr->number;
3028 o_ptr->number += (ITEM_NUMBER)num;
3033 * @brief 店舗のオブジェクト数を削除する /
3034 * Remove a slot if it is empty
3035 * @param item 削除したいアイテムのID
3038 static void store_item_optimize(INVENTORY_IDX item)
3041 o_ptr = &st_ptr->stock[item];
3042 if (!o_ptr->k_idx) return;
3043 if (o_ptr->number) return;
3045 st_ptr->stock_num--;
3046 for (int j = item; j < st_ptr->stock_num; j++)
3048 st_ptr->stock[j] = st_ptr->stock[j + 1];
3051 object_wipe(&st_ptr->stock[st_ptr->stock_num]);
3056 * @brief ブラックマーケット用の無価値品の排除判定 /
3057 * This function will keep 'crap' out of the black market.
3058 * @param player_ptr プレーヤーへの参照ポインタ
3059 * @param o_ptr 判定したいオブジェクトの構造体参照ポインタ
3060 * @return ブラックマーケットにとって無価値な品ならばTRUEを返す
3063 * Crap is defined as any item that is "available" elsewhere
3064 * Based on a suggestion by "Lee Vogt" <lvogt@cig.mcel.mot.com>
3067 static bool black_market_crap(player_type *player_ptr, object_type *o_ptr)
3069 if (object_is_ego(o_ptr)) return FALSE;
3071 if (o_ptr->to_a > 0) return FALSE;
3072 if (o_ptr->to_h > 0) return FALSE;
3073 if (o_ptr->to_d > 0) return FALSE;
3075 for (int i = 0; i < MAX_STORES; i++)
3077 if (i == STORE_HOME) continue;
3078 if (i == STORE_MUSEUM) continue;
3080 for (int j = 0; j < town_info[player_ptr->town_num].store[i].stock_num; j++)
3082 object_type *j_ptr = &town_info[player_ptr->town_num].store[i].stock[j];
3083 if (o_ptr->k_idx == j_ptr->k_idx) return TRUE;
3092 * @brief 店舗の品揃え変化のためにアイテムを削除する /
3093 * Attempt to delete (some of) a random item from the store
3097 * Hack -- we attempt to "maintain" piles of items when possible.
3100 static void store_delete(void)
3102 INVENTORY_IDX what = (INVENTORY_IDX)randint0(st_ptr->stock_num);
3103 int num = st_ptr->stock[what].number;
3104 if (randint0(100) < 50) num = (num + 1) / 2;
3105 if (randint0(100) < 50) num = 1;
3106 if ((st_ptr->stock[what].tval == TV_ROD) || (st_ptr->stock[what].tval == TV_WAND))
3108 st_ptr->stock[what].pval -= num * st_ptr->stock[what].pval / st_ptr->stock[what].number;
3111 store_item_increase(what, -num);
3112 store_item_optimize(what);
3117 * @brief 店舗の品揃え変化のためにアイテムを追加する /
3118 * Creates a random item and gives it to a store
3119 * @param player_ptr プレーヤーへの参照ポインタ
3123 * This algorithm needs to be rethought. A lot.
3124 * Currently, "normal" stores use a pre-built array.
3125 * Note -- the "level" given to "obj_get_num()" is a "favored"
3126 * level, that is, there is a much higher chance of getting
3127 * items with a level approaching that of the given level...
3128 * Should we check for "permission" to have the given item?
3131 static void store_create(player_type *player_ptr)
3133 if (st_ptr->stock_num >= st_ptr->stock_size) return;
3135 for (int tries = 0; tries < 4; tries++)
3139 if (cur_store_num == STORE_BLACK)
3141 /* Pick a level for object/magic */
3142 level = 25 + randint0(25);
3144 /* Random item (usually of given level) */
3145 i = get_obj_num(player_ptr, level, 0x00000000);
3147 /* Handle failure */
3148 if (i == 0) continue;
3152 i = st_ptr->table[randint0(st_ptr->table_num)];
3153 level = rand_range(1, STORE_OBJ_LEVEL);
3159 object_prep(q_ptr, i);
3160 apply_magic(player_ptr, q_ptr, level, AM_NO_FIXED_ART);
3161 if (!store_will_buy(q_ptr)) continue;
3163 if (q_ptr->tval == TV_LITE)
3165 if (q_ptr->sval == SV_LITE_TORCH) q_ptr->xtra4 = FUEL_TORCH / 2;
3166 if (q_ptr->sval == SV_LITE_LANTERN) q_ptr->xtra4 = FUEL_LAMP / 2;
3169 object_known(q_ptr);
3170 q_ptr->ident |= IDENT_STORE;
3171 if (q_ptr->tval == TV_CHEST) continue;
3173 if (cur_store_num == STORE_BLACK)
3175 if (black_market_crap(player_ptr, q_ptr)) continue;
3176 if (object_value(q_ptr) < 10) continue;
3180 if (object_value(q_ptr) <= 0) continue;
3183 mass_produce(q_ptr);
3184 (void)store_carry(q_ptr);
3191 * @brief 店舗の割引対象外にするかどうかを判定 /
3192 * Eliminate need to bargain if player has haggled well in the past
3193 * @param minprice アイテムの最低販売価格
3194 * @return 割引を禁止するならTRUEを返す。
3196 static bool noneedtobargain(PRICE minprice)
3198 PRICE good = st_ptr->good_buy;
3199 PRICE bad = st_ptr->bad_buy;
3200 if (minprice < 10L) return TRUE;
3201 if (good == MAX_SHORT) return TRUE;
3202 if (good > ((3 * bad) + (5 + (minprice / 50)))) return TRUE;
3209 * @brief 店主の持つプレイヤーに対する売買の良し悪し経験を記憶する /
3210 * Update the bargain info
3211 * @param price 実際の取引価格
3212 * @param minprice 店主の提示した価格
3216 static void updatebargain(PRICE price, PRICE minprice, int num)
3218 if (!manual_haggle) return;
3219 if ((minprice / num) < 10L) return;
3220 if (price == minprice)
3222 if (st_ptr->good_buy < MAX_SHORT)
3229 if (st_ptr->bad_buy < MAX_SHORT)
3238 * @brief 店の商品リストを再表示する /
3239 * Re-displays a single store entry
3240 * @param player_ptr プレーヤーへの参照ポインタ
3244 static void display_entry(player_type *player_ptr, int pos)
3247 o_ptr = &st_ptr->stock[pos];
3248 int i = (pos % store_bottom);
3250 /* Label it, clear the line --(-- */
3252 (void)sprintf(out_val, "%c) ", ((i > 25) ? toupper(I2A(i - 26)) : I2A(i)));
3253 prt(out_val, i + 6, 0);
3256 if (show_item_graph)
3258 TERM_COLOR a = object_attr(o_ptr);
3259 SYMBOL_CODE c = object_char(o_ptr);
3261 Term_queue_bigchar(cur_col, i + 6, a, c, 0, 0);
3262 if (use_bigtile) cur_col++;
3267 /* Describe an item in the home */
3269 if ((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM))
3272 if (show_weights) maxwid -= 10;
3274 GAME_TEXT o_name[MAX_NLEN];
3275 object_desc(player_ptr, o_name, o_ptr, 0);
3276 o_name[maxwid] = '\0';
3277 c_put_str(tval_to_attr[o_ptr->tval], o_name, i + 6, cur_col);
3280 WEIGHT wgt = o_ptr->weight;
3282 sprintf(out_val, "%3d.%1d kg", lbtokg1(wgt), lbtokg2(wgt));
3283 put_str(out_val, i + 6, 67);
3285 (void)sprintf(out_val, "%3d.%d lb", wgt / 10, wgt % 10);
3286 put_str(out_val, i + 6, 68);
3295 if (show_weights) maxwid -= 7;
3297 GAME_TEXT o_name[MAX_NLEN];
3298 object_desc(player_ptr, o_name, o_ptr, 0);
3299 o_name[maxwid] = '\0';
3300 c_put_str(tval_to_attr[o_ptr->tval], o_name, i + 6, cur_col);
3304 int wgt = o_ptr->weight;
3306 sprintf(out_val, "%3d.%1d", lbtokg1(wgt), lbtokg2(wgt));
3307 put_str(out_val, i + 6, 60);
3309 (void)sprintf(out_val, "%3d.%d", wgt / 10, wgt % 10);
3310 put_str(out_val, i + 6, 61);
3316 if (o_ptr->ident & (IDENT_FIXED))
3318 x = price_item(player_ptr, o_ptr, ot_ptr->min_inflate, FALSE);
3320 (void)sprintf(out_val, "%9ld固", (long)x);
3322 (void)sprintf(out_val, "%9ld F", (long)x);
3324 put_str(out_val, i + 6, 68);
3330 x = price_item(player_ptr, o_ptr, ot_ptr->min_inflate, FALSE);
3331 if (!noneedtobargain(x)) x += x / 10;
3333 (void)sprintf(out_val, "%9ld ", (long)x);
3334 put_str(out_val, i + 6, 68);
3338 x = price_item(player_ptr, o_ptr, ot_ptr->max_inflate, FALSE);
3339 (void)sprintf(out_val, "%9ld ", (long)x);
3340 put_str(out_val, i + 6, 68);
3345 * @brief 店の商品リストを表示する /
3346 * Displays a store's inventory -RAK-
3347 * @param player_ptr プレーヤーへの参照ポインタ
3350 * All prices are listed as "per individual object". -BEN-
3352 static void display_store_inventory(player_type *player_ptr)
3355 for (k = 0; k < store_bottom; k++)
3357 if (store_top + k >= st_ptr->stock_num) break;
3359 display_entry(player_ptr, store_top + k);
3362 for (int i = k; i < store_bottom + 1; i++)
3366 put_str(" ", 5, 20);
3368 put_str(" ", 5, 22);
3371 if (st_ptr->stock_num > store_bottom)
3373 prt(_("-続く-", "-more-"), k + 6, 3);
3374 put_str(format(_("(%dページ) ", "(Page %d) "), store_top / store_bottom + 1), 5, _(20, 22));
3377 if (cur_store_num == STORE_HOME || cur_store_num == STORE_MUSEUM)
3379 k = st_ptr->stock_size;
3380 if (cur_store_num == STORE_HOME && !powerup_home) k /= 10;
3382 put_str(format("アイテム数: %4d/%4d", st_ptr->stock_num, k), 19 + xtra_stock, 27);
3384 put_str(format("Objects: %4d/%4d", st_ptr->stock_num, k), 19 + xtra_stock, 30);
3391 * @brief プレイヤーの所持金を表示する /
3392 * Displays players gold -RAK-
3393 * @param player_ptr プレーヤーへの参照ポインタ
3397 static void store_prt_gold(player_type *player_ptr)
3399 prt(_("手持ちのお金: ", "Gold Remaining: "), 19 + xtra_stock, 53);
3401 sprintf(out_val, "%9ld", (long)player_ptr->au);
3402 prt(out_val, 19 + xtra_stock, 68);
3407 * @brief 店舗情報全体を表示するメインルーチン /
3408 * Displays store (after clearing screen) -RAK-
3409 * @param player_ptr プレーヤーへの参照ポインタ
3413 static void display_store(player_type *player_ptr)
3416 if (cur_store_num == STORE_HOME)
3418 put_str(_("我が家", "Your Home"), 3, 31);
3419 put_str(_("アイテムの一覧", "Item Description"), 5, 4);
3422 put_str(_(" 重さ", "Weight"), 5, 70);
3425 store_prt_gold(player_ptr);
3426 display_store_inventory(player_ptr);
3430 if (cur_store_num == STORE_MUSEUM)
3432 put_str(_("博物館", "Museum"), 3, 31);
3433 put_str(_("アイテムの一覧", "Item Description"), 5, 4);
3436 put_str(_(" 重さ", "Weight"), 5, 70);
3439 store_prt_gold(player_ptr);
3440 display_store_inventory(player_ptr);
3444 concptr store_name = (f_name + f_info[cur_store_feat].name);
3445 concptr owner_name = (ot_ptr->owner_name);
3446 concptr race_name = race_info[ot_ptr->owner_race].title;
3448 sprintf(buf, "%s (%s)", owner_name, race_name);
3449 put_str(buf, 3, 10);
3451 sprintf(buf, "%s (%ld)", store_name, (long)(ot_ptr->max_cost));
3454 put_str(_("商品の一覧", "Item Description"), 5, 5);
3457 put_str(_(" 重さ", "Weight"), 5, 60);
3460 put_str(_(" 価格", "Price"), 5, 72);
3461 store_prt_gold(player_ptr);
3462 display_store_inventory(player_ptr);
3467 * @brief 店舗からアイテムを選択する /
3468 * Get the ID of a store item and return its value -RAK-
3469 * @param com_val 選択IDを返す参照ポインタ
3470 * @param pmt メッセージキャプション
3473 * @return 実際に選択したらTRUE、キャンセルしたらFALSE
3475 static int get_stock(COMMAND_CODE *com_val, concptr pmt, int i, int j)
3477 if (repeat_pull(com_val) && (*com_val >= i) && (*com_val <= j))
3485 char hi = (j > 25) ? toupper(I2A(j - 26)) : I2A(j);
3488 (void)sprintf(out_val, "(%s:%c-%c, ESCで中断) %s",
3489 (((cur_store_num == STORE_HOME) || (cur_store_num == STORE_MUSEUM)) ? "アイテム" : "商品"),
3492 (void)sprintf(out_val, "(Items %c-%c, ESC to exit) %s",
3499 if (!get_com(out_val, &command, FALSE)) break;
3502 if (islower(command))
3504 else if (isupper(command))
3505 k = A2I(tolower(command)) + 26;
3509 if ((k >= i) && (k <= j))
3519 if (command == ESCAPE) return FALSE;
3521 repeat_push(*com_val);
3527 * @brief 店主の不満度を増やし、プレイヤーを締め出す判定と処理を行う /
3528 * Increase the insult counter and get angry if too many -RAK-
3529 * @return プレイヤーを締め出す場合TRUEを返す
3531 static int increase_insults(void)
3533 st_ptr->insult_cur++;
3534 if (st_ptr->insult_cur <= ot_ptr->insult_max) return FALSE;
3538 st_ptr->insult_cur = 0;
3539 st_ptr->good_buy = 0;
3540 st_ptr->bad_buy = 0;
3541 st_ptr->store_open = current_world_ptr->game_turn + TURNS_PER_TICK * TOWN_DAWN / 8 + randint1(TURNS_PER_TICK*TOWN_DAWN / 8);
3548 * @brief 店主の不満度を減らす /
3549 * Decrease insults -RAK-
3550 * @return プレイヤーを締め出す場合TRUEを返す
3552 static void decrease_insults(void)
3554 if (st_ptr->insult_cur) st_ptr->insult_cur--;
3559 * @brief 店主の不満度が増えた場合のみのメッセージを表示する /
3560 * Have insulted while haggling -RAK-
3561 * @return プレイヤーを締め出す場合TRUEを返す
3563 static int haggle_insults(void)
3565 if (increase_insults()) return TRUE;
3572 * Mega-Hack -- Enable "increments"
3574 static bool allow_inc = FALSE;
3577 * Mega-Hack -- Last "increment" during haggling
3579 static s32b last_inc = 0L;
3582 * @brief 交渉価格を確認と認証の是非を行う /
3585 * @param poffer 別途価格提示をした場合の値を返す参照ポインタ
3586 * @param price 現在の交渉価格
3587 * @param final 最終確定価格ならばTRUE
3588 * @return プレイヤーを締め出す場合TRUEを返す
3590 static int get_haggle(concptr pmt, s32b *poffer, PRICE price, int final)
3593 if (!allow_inc) last_inc = 0L;
3597 sprintf(buf, _("%s [承諾] ", "%s [accept] "), pmt);
3599 else if (last_inc < 0)
3601 sprintf(buf, _("%s [-$%ld] ", "%s [-%ld] "), pmt, (long)(ABS(last_inc)));
3603 else if (last_inc > 0)
3605 sprintf(buf, _("%s [+$%ld] ", "%s [+%ld] "), pmt, (long)(ABS(last_inc)));
3609 sprintf(buf, "%s ", pmt);
3613 GAME_TEXT out_val[160];
3618 strcpy(out_val, "");
3621 * Ask the user for a response.
3622 * Don't allow to use numpad as cursor key.
3624 res = askfor_aux(out_val, 32, FALSE);
3626 if (!res) return FALSE;
3629 for (p = out_val; *p == ' '; p++) /* loop */;
3640 if (allow_inc && last_inc)
3642 *poffer += last_inc;
3646 msg_print(_("値がおかしいです。", "Invalid response."));
3651 if ((*p == '+' || *p == '-'))
3673 * @brief 店主がプレイヤーからの交渉価格を判断する /
3674 * Receive an offer (from the player)
3676 * @param poffer 店主からの交渉価格を返す参照ポインタ
3677 * @param last_offer 現在の交渉価格
3678 * @param factor 店主の価格基準倍率
3679 * @param price アイテムの実価値
3680 * @param final 最終価格確定ならばTRUE
3681 * @return プレイヤーの価格に対して不服ならばTRUEを返す /
3682 * Return TRUE if offer is NOT okay
3684 static bool receive_offer(concptr pmt, s32b *poffer, s32b last_offer, int factor, PRICE price, int final)
3688 if (!get_haggle(pmt, poffer, price, final)) return TRUE;
3689 if (((*poffer) * factor) >= (last_offer * factor)) break;
3690 if (haggle_insults()) return TRUE;
3692 (*poffer) = last_offer;
3700 * @brief プレイヤーが購入する時の値切り処理メインルーチン /
3701 * Haggling routine -RAK-
3702 * @param player_ptr プレーヤーへの参照ポインタ
3703 * @param o_ptr オブジェクトの構造体参照ポインタ
3704 * @param price 最終価格を返す参照ポインタ
3705 * @return プレイヤーの価格に対して店主が不服ならばTRUEを返す /
3706 * Return TRUE if purchase is NOT successful
3708 static bool purchase_haggle(player_type *player_ptr, object_type *o_ptr, s32b *price)
3710 s32b cur_ask = price_item(player_ptr, o_ptr, ot_ptr->max_inflate, FALSE);
3711 s32b final_ask = price_item(player_ptr, o_ptr, ot_ptr->min_inflate, FALSE);
3712 int noneed = noneedtobargain(final_ask);
3714 concptr pmt = _("提示価格", "Asking");
3715 if (noneed || !manual_haggle)
3719 msg_print(_("結局この金額にまとまった。", "You eventually agree upon the price."));
3724 msg_print(_("すんなりとこの金額にまとまった。", "You quickly agree upon the price."));
3726 final_ask += final_ask / 10;
3729 cur_ask = final_ask;
3730 pmt = _("最終提示価格", "Final Offer");
3734 cur_ask *= o_ptr->number;
3735 final_ask *= o_ptr->number;
3736 s32b min_per = ot_ptr->haggle_per;
3737 s32b max_per = min_per * 3;
3738 s32b last_offer = object_value(o_ptr) * o_ptr->number;
3739 last_offer = last_offer * (200 - (int)(ot_ptr->max_inflate)) / 100L;
3740 if (last_offer <= 0) last_offer = 1;
3746 bool cancel = FALSE;
3750 bool loop_flag = TRUE;
3752 while (!flag && loop_flag)
3755 (void)sprintf(out_val, "%s : %ld", pmt, (long)cur_ask);
3756 put_str(out_val, 1, 0);
3757 cancel = receive_offer(_("提示する金額? ", "What do you offer? "), &offer, last_offer, 1, cur_ask, final);
3762 else if (offer > cur_ask)
3767 else if (offer == cur_ask)
3780 s32b x1 = 100 * (offer - last_offer) / (cur_ask - last_offer);
3783 if (haggle_insults())
3789 else if (x1 > max_per)
3792 if (x1 < max_per) x1 = max_per;
3795 s32b x2 = rand_range(x1 - 2, x1 + 2);
3796 s32b x3 = ((cur_ask - offer) * x2 / 100L) + 1;
3800 if (cur_ask < final_ask)
3803 cur_ask = final_ask;
3804 pmt = _("最終提示価格", "What do you offer? ");
3808 (void)(increase_insults());
3813 else if (offer >= cur_ask)
3823 (void)sprintf(out_val, _("前回の提示金額: $%ld", "Your last offer: %ld"), (long)last_offer);
3824 put_str(out_val, 1, 39);
3825 say_comment_2(cur_ask, annoyed);
3828 if (cancel) return TRUE;
3830 updatebargain(*price, final_ask, o_ptr->number);
3836 * @brief プレイヤーが売却する時の値切り処理メインルーチン /
3837 * Haggling routine -RAK-
3838 * @param player_ptr プレーヤーへの参照ポインタ
3839 * @param o_ptr オブジェクトの構造体参照ポインタ
3840 * @param price 最終価格を返す参照ポインタ
3841 * @return プレイヤーの価格に対して店主が不服ならばTRUEを返す /
3842 * Return TRUE if purchase is NOT successful
3844 static bool sell_haggle(player_type *player_ptr, object_type *o_ptr, s32b *price)
3846 s32b cur_ask = price_item(player_ptr, o_ptr, ot_ptr->max_inflate, TRUE);
3847 s32b final_ask = price_item(player_ptr, o_ptr, ot_ptr->min_inflate, TRUE);
3848 int noneed = noneedtobargain(final_ask);
3849 s32b purse = (s32b)(ot_ptr->max_cost);
3851 concptr pmt = _("提示金額", "Offer");
3852 if (noneed || !manual_haggle || (final_ask >= purse))
3854 if (!manual_haggle && !noneed)
3856 final_ask -= final_ask / 10;
3859 if (final_ask >= purse)
3861 msg_print(_("即座にこの金額にまとまった。", "You instantly agree upon the price."));
3867 msg_print(_("結局この金額にまとまった。", "You eventually agree upon the price."));
3872 msg_print(_("すんなりとこの金額にまとまった。", "You quickly agree upon the price."));
3876 cur_ask = final_ask;
3878 pmt = _("最終提示金額", "Final Offer");
3881 cur_ask *= o_ptr->number;
3882 final_ask *= o_ptr->number;
3884 s32b min_per = ot_ptr->haggle_per;
3885 s32b max_per = min_per * 3;
3886 s32b last_offer = object_value(o_ptr) * o_ptr->number;
3887 last_offer = last_offer * ot_ptr->max_inflate / 100L;
3893 bool cancel = FALSE;
3902 (void)sprintf(out_val, "%s : %ld", pmt, (long)cur_ask);
3903 put_str(out_val, 1, 0);
3904 cancel = receive_offer(_("提示する価格? ", "What price do you ask? "),
3905 &offer, last_offer, -1, cur_ask, final);
3911 else if (offer < cur_ask)
3916 else if (offer == cur_ask)
3926 if (flag || !loop_flag) break;
3931 s32b x1 = 100 * (last_offer - offer) / (last_offer - cur_ask);
3934 if (haggle_insults())
3940 else if (x1 > max_per)
3943 if (x1 < max_per) x1 = max_per;
3946 s32b x2 = rand_range(x1 - 2, x1 + 2);
3947 s32b x3 = ((offer - cur_ask) * x2 / 100L) + 1;
3951 if (cur_ask > final_ask)
3953 cur_ask = final_ask;
3955 pmt = _("最終提示金額", "Final Offer");
3962 /* 追加 $0 で買い取られてしまうのを防止 By FIRST*/
3965 (void)(increase_insults());
3968 else if (offer <= cur_ask)
3978 (void)sprintf(out_val, _("前回の提示価格 $%ld", "Your last bid %ld"), (long)last_offer);
3979 put_str(out_val, 1, 39);
3980 say_comment_3(cur_ask, annoyed);
3983 if (cancel) return TRUE;
3985 updatebargain(*price, final_ask, o_ptr->number);
3991 * @brief 店からの購入処理のメインルーチン /
3992 * Buy an item from a store -RAK-
3993 * @param player_ptr プレーヤーへの参照ポインタ
3996 static void store_purchase(player_type *player_ptr)
3998 if (cur_store_num == STORE_MUSEUM)
4000 msg_print(_("博物館から取り出すことはできません。", "Museum."));
4004 if (st_ptr->stock_num <= 0)
4006 if (cur_store_num == STORE_HOME)
4007 msg_print(_("我が家には何も置いてありません。", "Your home is empty."));
4009 msg_print(_("現在商品の在庫を切らしています。", "I am currently out of stock."));
4013 int i = (st_ptr->stock_num - store_top);
4014 if (i > store_bottom) i = store_bottom;
4018 /* ブラックマーケットの時は別のメッセージ */
4019 switch (cur_store_num) {
4021 sprintf(out_val, "どのアイテムを取りますか? ");
4024 sprintf(out_val, "どれ? ");
4027 sprintf(out_val, "どの品物が欲しいんだい? ");
4031 if (cur_store_num == STORE_HOME)
4033 sprintf(out_val, "Which item do you want to take? ");
4037 sprintf(out_val, "Which item are you interested in? ");
4042 if (!get_stock(&item, out_val, 0, i - 1)) return;
4044 item = item + store_top;
4046 o_ptr = &st_ptr->stock[item];
4047 ITEM_NUMBER amt = 1;
4051 object_copy(j_ptr, o_ptr);
4054 * If a rod or wand, allocate total maximum timeouts or charges
4055 * between those purchased and left on the shelf.
4057 reduce_charges(j_ptr, o_ptr->number - amt);
4058 j_ptr->number = amt;
4059 if (!inven_carry_okay(j_ptr))
4061 msg_print(_("そんなにアイテムを持てない。", "You cannot carry that many different items."));
4065 PRICE best = price_item(player_ptr, j_ptr, ot_ptr->min_inflate, FALSE);
4066 if (o_ptr->number > 1)
4068 if ((cur_store_num != STORE_HOME) &&
4069 (o_ptr->ident & IDENT_FIXED))
4071 msg_format(_("一つにつき $%ldです。", "That costs %ld gold per item."), (long)(best));
4074 amt = get_quantity(NULL, o_ptr->number);
4075 if (amt <= 0) return;
4079 object_copy(j_ptr, o_ptr);
4082 * If a rod or wand, allocate total maximum timeouts or charges
4083 * between those purchased and left on the shelf.
4085 reduce_charges(j_ptr, o_ptr->number - amt);
4086 j_ptr->number = amt;
4087 if (!inven_carry_okay(j_ptr))
4089 msg_print(_("ザックにそのアイテムを入れる隙間がない。", "You cannot carry that many items."));
4094 COMMAND_CODE item_new;
4096 if (cur_store_num == STORE_HOME)
4098 bool combined_or_reordered;
4099 distribute_charges(o_ptr, j_ptr, amt);
4100 item_new = inven_carry(player_ptr, j_ptr);
4101 GAME_TEXT o_name[MAX_NLEN];
4102 object_desc(player_ptr, o_name, &player_ptr->inventory_list[item_new], 0);
4104 msg_format(_("%s(%c)を取った。", "You have %s (%c)."), o_name, index_to_label(item_new));
4105 handle_stuff(player_ptr);
4107 i = st_ptr->stock_num;
4108 store_item_increase(item, -amt);
4109 store_item_optimize(item);
4110 combined_or_reordered = combine_and_reorder_home(STORE_HOME);
4111 if (i == st_ptr->stock_num)
4113 if (combined_or_reordered) display_store_inventory(player_ptr);
4114 else display_entry(player_ptr, item);
4118 if (st_ptr->stock_num == 0) store_top = 0;
4119 else if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
4120 display_store_inventory(player_ptr);
4122 chg_virtue(player_ptr, V_SACRIFICE, 1);
4128 if (o_ptr->ident & (IDENT_FIXED))
4131 price = (best * j_ptr->number);
4135 GAME_TEXT o_name[MAX_NLEN];
4136 object_desc(player_ptr, o_name, j_ptr, 0);
4137 msg_format(_("%s(%c)を購入する。", "Buying %s (%c)."), o_name, I2A(item));
4139 choice = purchase_haggle(player_ptr, j_ptr, &price);
4140 if (st_ptr->store_open >= current_world_ptr->game_turn) return;
4143 if (choice != 0) return;
4144 if (price == (best * j_ptr->number)) o_ptr->ident |= (IDENT_FIXED);
4145 if (player_ptr->au < price)
4147 msg_print(_("お金が足りません。", "You do not have enough gold."));
4151 say_comment_1(player_ptr);
4152 if (cur_store_num == STORE_BLACK)
4153 chg_virtue(player_ptr, V_JUSTICE, -1);
4154 if ((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
4155 chg_virtue(player_ptr, V_NATURE, -1);
4159 player_ptr->au -= price;
4160 store_prt_gold(player_ptr);
4161 object_aware(player_ptr, j_ptr);
4162 j_ptr->ident &= ~(IDENT_FIXED);
4163 GAME_TEXT o_name[MAX_NLEN];
4164 object_desc(player_ptr, o_name, j_ptr, 0);
4166 msg_format(_("%sを $%ldで購入しました。", "You bought %s for %ld gold."), o_name, (long)price);
4168 strcpy(record_o_name, o_name);
4169 record_turn = current_world_ptr->game_turn;
4171 if (record_buy) exe_write_diary(player_ptr, DIARY_BUY, 0, o_name);
4172 object_desc(player_ptr, o_name, o_ptr, OD_NAME_ONLY);
4173 if (record_rand_art && o_ptr->art_name)
4174 exe_write_diary(player_ptr, DIARY_ART, 0, o_name);
4176 j_ptr->inscription = 0;
4177 j_ptr->feeling = FEEL_NONE;
4178 j_ptr->ident &= ~(IDENT_STORE);
4179 item_new = inven_carry(player_ptr, j_ptr);
4181 object_desc(player_ptr, o_name, &player_ptr->inventory_list[item_new], 0);
4182 msg_format(_("%s(%c)を手に入れた。", "You have %s (%c)."), o_name, index_to_label(item_new));
4183 autopick_alter_item(player_ptr, item_new, FALSE);
4184 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4186 o_ptr->pval -= j_ptr->pval;
4189 handle_stuff(player_ptr);
4190 i = st_ptr->stock_num;
4191 store_item_increase(item, -amt);
4192 store_item_optimize(item);
4193 if (st_ptr->stock_num == 0)
4195 if (one_in_(STORE_SHUFFLE))
4198 msg_print(_("店主は引退した。", "The shopkeeper retires."));
4199 store_shuffle(player_ptr, cur_store_num);
4202 sprintf(buf, "%s (%s)",
4203 ot_ptr->owner_name, race_info[ot_ptr->owner_race].title);
4204 put_str(buf, 3, 10);
4205 sprintf(buf, "%s (%ld)",
4206 (f_name + f_info[cur_store_feat].name), (long)(ot_ptr->max_cost));
4211 msg_print(_("店主は新たな在庫を取り出した。", "The shopkeeper brings out some new stock."));
4214 for (i = 0; i < 10; i++)
4216 store_maint(player_ptr, player_ptr->town_num, cur_store_num);
4220 display_store_inventory(player_ptr);
4222 else if (st_ptr->stock_num != i)
4224 if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
4225 display_store_inventory(player_ptr);
4229 display_entry(player_ptr, item);
4235 * @brief 店からの売却処理のメインルーチン /
4236 * Sell an item to the store (or home)
4237 * @param owner_ptr プレーヤーへの参照ポインタ
4240 static void store_sell(player_type *owner_ptr)
4243 if (cur_store_num == STORE_HOME)
4244 q = _("どのアイテムを置きますか? ", "Drop which item? ");
4245 else if (cur_store_num == STORE_MUSEUM)
4246 q = _("どのアイテムを寄贈しますか? ", "Give which item? ");
4248 q = _("どのアイテムを売りますか? ", "Sell which item? ");
4250 item_tester_hook = store_will_buy;
4252 /* 我が家でおかしなメッセージが出るオリジナルのバグを修正 */
4254 if (cur_store_num == STORE_HOME)
4256 s = _("置けるアイテムを持っていません。", "You don't have any item to drop.");
4258 else if (cur_store_num == STORE_MUSEUM)
4260 s = _("寄贈できるアイテムを持っていません。", "You don't have any item to give.");
4264 s = _("欲しい物がないですねえ。", "You have nothing that I want.");
4269 o_ptr = choose_object(owner_ptr, &item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT), 0);
4272 if ((item >= INVEN_RARM) && object_is_cursed(o_ptr))
4274 msg_print(_("ふーむ、どうやらそれは呪われているようだね。", "Hmmm, it seems to be cursed."));
4279 if (o_ptr->number > 1)
4281 amt = get_quantity(NULL, o_ptr->number);
4282 if (amt <= 0) return;
4288 object_copy(q_ptr, o_ptr);
4289 q_ptr->number = amt;
4292 * Hack -- If a rod or wand, allocate total maximum
4293 * timeouts or charges to those being sold. -LM-
4295 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4297 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
4300 GAME_TEXT o_name[MAX_NLEN];
4301 object_desc(owner_ptr, o_name, q_ptr, 0);
4303 /* Remove any inscription, feeling for stores */
4304 if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
4306 q_ptr->inscription = 0;
4307 q_ptr->feeling = FEEL_NONE;
4310 /* Is there room in the store (or the home?) */
4311 if (!store_check_num(q_ptr))
4313 if (cur_store_num == STORE_HOME)
4314 msg_print(_("我が家にはもう置く場所がない。", "Your home is full."));
4316 else if (cur_store_num == STORE_MUSEUM)
4317 msg_print(_("博物館はもう満杯だ。", "Museum is full."));
4320 msg_print(_("すいませんが、店にはもう置く場所がありません。", "I have not the room in my store to keep it."));
4326 PRICE price, value, dummy;
4327 if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM))
4329 msg_format(_("%s(%c)を売却する。", "Selling %s (%c)."), o_name, index_to_label(item));
4332 choice = sell_haggle(owner_ptr, q_ptr, &price);
4333 if (st_ptr->store_open >= current_world_ptr->game_turn) return;
4337 say_comment_1(owner_ptr);
4339 if (cur_store_num == STORE_BLACK)
4340 chg_virtue(owner_ptr, V_JUSTICE, -1);
4342 if ((o_ptr->tval == TV_BOTTLE) && (cur_store_num != STORE_HOME))
4343 chg_virtue(owner_ptr, V_NATURE, 1);
4346 owner_ptr->au += price;
4347 store_prt_gold(owner_ptr);
4348 dummy = object_value(q_ptr) * q_ptr->number;
4350 identify_item(owner_ptr, o_ptr);
4352 object_copy(q_ptr, o_ptr);
4353 q_ptr->number = amt;
4354 q_ptr->ident |= IDENT_STORE;
4357 * Hack -- If a rod or wand, let the shopkeeper know just
4358 * how many charges he really paid for. -LM-
4360 if ((o_ptr->tval == TV_ROD) || (o_ptr->tval == TV_WAND))
4362 q_ptr->pval = o_ptr->pval * amt / o_ptr->number;
4365 value = object_value(q_ptr) * q_ptr->number;
4366 object_desc(owner_ptr, o_name, q_ptr, 0);
4367 msg_format(_("%sを $%ldで売却しました。", "You sold %s for %ld gold."), o_name, (long)price);
4369 if (record_sell) exe_write_diary(owner_ptr, DIARY_SELL, 0, o_name);
4371 if (!((o_ptr->tval == TV_FIGURINE) && (value > 0)))
4373 purchase_analyze(owner_ptr, price, value, dummy);
4377 * Hack -- Allocate charges between those wands or rods sold
4378 * and retained, unless all are being sold. -LM-
4380 distribute_charges(o_ptr, q_ptr, amt);
4382 inven_item_increase(owner_ptr, item, -amt);
4383 inven_item_describe(owner_ptr, item);
4384 if (o_ptr->number > 0)
4385 autopick_alter_item(owner_ptr, item, FALSE);
4387 inven_item_optimize(owner_ptr, item);
4388 handle_stuff(owner_ptr);
4389 int item_pos = store_carry(q_ptr);
4392 store_top = (item_pos / store_bottom) * store_bottom;
4393 display_store_inventory(owner_ptr);
4397 else if (cur_store_num == STORE_MUSEUM)
4399 char o2_name[MAX_NLEN];
4400 object_desc(owner_ptr, o2_name, q_ptr, OD_NAME_ONLY);
4402 if (-1 == store_check_num(q_ptr))
4404 msg_print(_("それと同じ品物は既に博物館にあるようです。", "The Museum already has one of those items."));
4408 msg_print(_("博物館に寄贈したものは取り出すことができません!!", "You cannot take back items which have been donated to the Museum!!"));
4411 if (!get_check(format(_("本当に%sを寄贈しますか?", "Really give %s to the Museum? "), o2_name))) return;
4413 identify_item(owner_ptr, q_ptr);
4414 q_ptr->ident |= IDENT_FULL_KNOWN;
4416 distribute_charges(o_ptr, q_ptr, amt);
4417 msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
4420 vary_item(owner_ptr, item, -amt);
4421 handle_stuff(owner_ptr);
4423 int item_pos = home_carry(owner_ptr, q_ptr);
4426 store_top = (item_pos / store_bottom) * store_bottom;
4427 display_store_inventory(owner_ptr);
4432 distribute_charges(o_ptr, q_ptr, amt);
4433 msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
4435 vary_item(owner_ptr, item, -amt);
4436 handle_stuff(owner_ptr);
4437 int item_pos = home_carry(owner_ptr, q_ptr);
4440 store_top = (item_pos / store_bottom) * store_bottom;
4441 display_store_inventory(owner_ptr);
4445 if ((choice == 0) && (item >= INVEN_RARM))
4447 calc_android_exp(owner_ptr);
4448 verify_equip_slot(owner_ptr, item);
4454 * @brief 店のアイテムを調べるコマンドのメインルーチン /
4455 * Examine an item in a store -JDL-
4458 static void store_examine(player_type *player_ptr)
4460 if (st_ptr->stock_num <= 0)
4462 if (cur_store_num == STORE_HOME)
4463 msg_print(_("我が家には何も置いてありません。", "Your home is empty."));
4464 else if (cur_store_num == STORE_MUSEUM)
4465 msg_print(_("博物館には何も置いてありません。", "Museum is empty."));
4467 msg_print(_("現在商品の在庫を切らしています。", "I am currently out of stock."));
4471 int i = (st_ptr->stock_num - store_top);
4472 if (i > store_bottom) i = store_bottom;
4475 sprintf(out_val, _("どれを調べますか?", "Which item do you want to examine? "));
4478 if (!get_stock(&item, out_val, 0, i - 1)) return;
4479 item = item + store_top;
4481 o_ptr = &st_ptr->stock[item];
4482 if (!OBJECT_IS_FULL_KNOWN(o_ptr))
4484 msg_print(_("このアイテムについて特に知っていることはない。", "You have no special knowledge about that item."));
4488 GAME_TEXT o_name[MAX_NLEN];
4489 object_desc(player_ptr, o_name, o_ptr, 0);
4490 msg_format(_("%sを調べている...", "Examining %s..."), o_name);
4492 if (!screen_object(player_ptr, o_ptr, SCROBJ_FORCE_DETAIL))
4493 msg_print(_("特に変わったところはないようだ。", "You see nothing special."));
4500 * @brief 博物館のアイテムを除去するコマンドのメインルーチン /
4501 * Remove an item from museum (Originally from TOband)
4502 * @param player_ptr プレーヤーへの参照ポインタ
4505 static void museum_remove_object(player_type *player_ptr)
4507 if (st_ptr->stock_num <= 0)
4509 msg_print(_("博物館には何も置いてありません。", "Museum is empty."));
4513 int i = st_ptr->stock_num - store_top;
4514 if (i > store_bottom) i = store_bottom;
4517 sprintf(out_val, _("どのアイテムの展示をやめさせますか?", "Which item do you want to order to remove? "));
4520 if (!get_stock(&item, out_val, 0, i - 1)) return;
4522 item = item + store_top;
4524 o_ptr = &st_ptr->stock[item];
4526 GAME_TEXT o_name[MAX_NLEN];
4527 object_desc(player_ptr, o_name, o_ptr, 0);
4529 msg_print(_("展示をやめさせたアイテムは二度と見ることはできません!", "Once removed from the Museum, an item will be gone forever!"));
4530 if (!get_check(format(_("本当に%sの展示をやめさせますか?", "Really order to remove %s from the Museum? "), o_name))) return;
4532 msg_format(_("%sの展示をやめさせた。", "You ordered to remove %s."), o_name);
4534 store_item_increase(item, -o_ptr->number);
4535 store_item_optimize(item);
4537 (void)combine_and_reorder_home(STORE_MUSEUM);
4538 if (st_ptr->stock_num == 0) store_top = 0;
4540 else if (store_top >= st_ptr->stock_num) store_top -= store_bottom;
4541 display_store_inventory(player_ptr);
4546 * Hack -- set this to leave the store
4548 static bool leave_store = FALSE;
4552 * @brief 店舗処理コマンド選択のメインルーチン /
4553 * Process a command in a store
4554 * @param client_ptr 顧客となるクリーチャーの参照ポインタ
4558 * Note that we must allow the use of a few "special" commands
4559 * in the stores which are not allowed in the dungeon, and we
4560 * must disable some commands which are allowed in the dungeon
4561 * but not in the stores, to prevent chaos.
4564 static void store_process_command(player_type *client_ptr)
4567 if (rogue_like_commands && command_cmd == 'l')
4572 switch (command_cmd)
4582 /* 1 ページ戻るコマンド: 我が家のページ数が多いので重宝するはず By BUG */
4583 if (st_ptr->stock_num <= store_bottom) {
4584 msg_print(_("これで全部です。", "Entire inventory is shown."));
4587 store_top -= store_bottom;
4589 store_top = ((st_ptr->stock_num - 1) / store_bottom) * store_bottom;
4590 if ((cur_store_num == STORE_HOME) && (powerup_home == FALSE))
4591 if (store_top >= store_bottom) store_top = store_bottom;
4592 display_store_inventory(client_ptr);
4599 if (st_ptr->stock_num <= store_bottom)
4601 msg_print(_("これで全部です。", "Entire inventory is shown."));
4605 store_top += store_bottom;
4607 * 隠しオプション(powerup_home)がセットされていないときは
4608 * 我が家では 2 ページまでしか表示しない
4610 if ((cur_store_num == STORE_HOME) &&
4611 (powerup_home == FALSE) &&
4612 (st_ptr->stock_num >= STORE_INVEN_MAX))
4614 if (store_top >= (STORE_INVEN_MAX - 1))
4621 if (store_top >= st_ptr->stock_num) store_top = 0;
4624 display_store_inventory(client_ptr);
4631 do_cmd_redraw(client_ptr);
4632 display_store(client_ptr);
4637 store_purchase(client_ptr);
4642 store_sell(client_ptr);
4647 store_examine(client_ptr);
4656 do_cmd_wield(client_ptr);
4661 do_cmd_takeoff(client_ptr);
4666 do_cmd_destroy(client_ptr);
4671 do_cmd_equip(client_ptr);
4676 do_cmd_inven(client_ptr);
4681 do_cmd_observe(client_ptr);
4686 toggle_inventory_equipment(client_ptr);
4691 if ((client_ptr->pclass == CLASS_MINDCRAFTER) ||
4692 (client_ptr->pclass == CLASS_BERSERKER) ||
4693 (client_ptr->pclass == CLASS_NINJA) ||
4694 (client_ptr->pclass == CLASS_MIRROR_MASTER)
4695 ) do_cmd_mind_browse(client_ptr);
4696 else if (client_ptr->pclass == CLASS_SMITH)
4697 do_cmd_kaji(client_ptr, TRUE);
4698 else if (client_ptr->pclass == CLASS_MAGIC_EATER)
4699 do_cmd_magic_eater(client_ptr, TRUE, FALSE);
4700 else if (client_ptr->pclass == CLASS_SNIPER)
4701 do_cmd_snipe_browse(client_ptr);
4702 else do_cmd_browse(client_ptr);
4707 do_cmd_inscribe(client_ptr);
4712 do_cmd_uninscribe(client_ptr);
4717 do_cmd_help(client_ptr);
4722 do_cmd_query_symbol(client_ptr);
4727 client_ptr->town_num = old_town_num;
4728 do_cmd_player_status(client_ptr);
4729 client_ptr->town_num = inner_town_num;
4730 display_store(client_ptr);
4740 client_ptr->town_num = old_town_num;
4741 do_cmd_pref(client_ptr);
4742 client_ptr->town_num = inner_town_num;
4747 client_ptr->town_num = old_town_num;
4748 do_cmd_macros(client_ptr);
4749 client_ptr->town_num = inner_town_num;
4754 client_ptr->town_num = old_town_num;
4755 do_cmd_visuals(client_ptr);
4756 client_ptr->town_num = inner_town_num;
4761 client_ptr->town_num = old_town_num;
4762 do_cmd_colors(client_ptr);
4763 client_ptr->town_num = inner_town_num;
4769 (void)combine_and_reorder_home(STORE_HOME);
4770 do_cmd_redraw(client_ptr);
4771 display_store(client_ptr);
4786 do_cmd_feeling(client_ptr);
4791 do_cmd_message_one();
4801 do_cmd_diary(client_ptr);
4806 do_cmd_knowledge(client_ptr);
4811 do_cmd_load_screen();
4816 do_cmd_save_screen(client_ptr);
4821 if ((cur_store_num == STORE_MUSEUM) && (command_cmd == 'r'))
4823 museum_remove_object(client_ptr);
4827 msg_print(_("そのコマンドは店の中では使えません。", "That command does not work in stores."));
4837 * @brief 店舗処理全体のメインルーチン /
4838 * Enter a store, and interact with it. *
4839 * @param player_ptr プレーヤーへの参照ポインタ
4843 * Note that we use the standard "request_command()" function
4844 * to get a command, allowing us to use "command_arg" and all
4845 * command macros and other nifty stuff, but we use the special
4846 * "shopping" argument, to force certain commands to be converted
4847 * into other commands, normally, we convert "p" (pray) and "m"
4848 * (cast magic) into "g" (get), and "s" (search) into "d" (drop).
4851 void do_cmd_store(player_type *player_ptr)
4853 if (player_ptr->wild_mode) return;
4855 Term_get_size(&w, &h);
4857 xtra_stock = MIN(14 + 26, ((h > 24) ? (h - 24) : 0));
4858 store_bottom = MIN_STOCK + xtra_stock;
4861 g_ptr = &player_ptr->current_floor_ptr->grid_array[player_ptr->y][player_ptr->x];
4863 if (!cave_have_flag_grid(g_ptr, FF_STORE))
4865 msg_print(_("ここには店がありません。", "You see no store here."));
4869 int which = f_info[g_ptr->feat].subtype;
4870 old_town_num = player_ptr->town_num;
4871 if ((which == STORE_HOME) || (which == STORE_MUSEUM)) player_ptr->town_num = 1;
4872 if (player_ptr->current_floor_ptr->dun_level) player_ptr->town_num = NO_TOWN;
4873 inner_town_num = player_ptr->town_num;
4875 if ((town_info[player_ptr->town_num].store[which].store_open >= current_world_ptr->game_turn) ||
4878 msg_print(_("ドアに鍵がかかっている。", "The doors are locked."));
4879 player_ptr->town_num = old_town_num;
4883 int maintain_num = (current_world_ptr->game_turn - town_info[player_ptr->town_num].store[which].last_visit) / (TURNS_PER_TICK * STORE_TICKS);
4884 if (maintain_num > 10)
4888 for (int i = 0; i < maintain_num; i++)
4889 store_maint(player_ptr, player_ptr->town_num, which);
4891 town_info[player_ptr->town_num].store[which].last_visit = current_world_ptr->game_turn;
4894 forget_lite(player_ptr->current_floor_ptr);
4895 forget_view(player_ptr->current_floor_ptr);
4896 current_world_ptr->character_icky = TRUE;
4900 get_com_no_macros = TRUE;
4901 cur_store_num = which;
4902 cur_store_feat = g_ptr->feat;
4903 st_ptr = &town_info[player_ptr->town_num].store[cur_store_num];
4904 ot_ptr = &owners[cur_store_num][st_ptr->owner];
4906 play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BUILD);
4907 display_store(player_ptr);
4908 leave_store = FALSE;
4910 while (!leave_store)
4913 clear_from(20 + xtra_stock);
4914 prt(_(" ESC) 建物から出る", " ESC) Exit from Building."), 21 + xtra_stock, 0);
4915 if (st_ptr->stock_num > store_bottom)
4917 prt(_(" -)前ページ", " -) Previous page"), 22 + xtra_stock, 0);
4918 prt(_(" スペース) 次ページ", " SPACE) Next page"), 23 + xtra_stock, 0);
4921 if (cur_store_num == STORE_HOME)
4923 prt(_("g) アイテムを取る", "g) Get an item."), 21 + xtra_stock, 27);
4924 prt(_("d) アイテムを置く", "d) Drop an item."), 22 + xtra_stock, 27);
4925 prt(_("x) 家のアイテムを調べる", "x) eXamine an item in the home."), 23 + xtra_stock, 27);
4927 else if (cur_store_num == STORE_MUSEUM)
4929 prt(_("d) アイテムを置く", "d) Drop an item."), 21 + xtra_stock, 27);
4930 prt(_("r) アイテムの展示をやめる", "r) order to Remove an item."), 22 + xtra_stock, 27);
4931 prt(_("x) 博物館のアイテムを調べる", "x) eXamine an item in the museum."), 23 + xtra_stock, 27);
4935 prt(_("p) 商品を買う", "p) Purchase an item."), 21 + xtra_stock, 30);
4936 prt(_("s) アイテムを売る", "s) Sell an item."), 22 + xtra_stock, 30);
4937 prt(_("x) 商品を調べる", "x) eXamine an item in the shop"), 23 + xtra_stock, 30);
4940 prt(_("i/e) 持ち物/装備の一覧", "i/e) Inventry/Equipment list"), 21 + xtra_stock, 56);
4941 if (rogue_like_commands)
4943 prt(_("w/T) 装備する/はずす", "w/T) Wear/Take off equipment"), 22 + xtra_stock, 56);
4947 prt(_("w/t) 装備する/はずす", "w/t) Wear/Take off equipment"), 22 + xtra_stock, 56);
4950 prt(_("コマンド:", "You may: "), 20 + xtra_stock, 0);
4951 request_command(player_ptr, TRUE);
4952 store_process_command(player_ptr);
4955 * Hack -- To redraw missiles damage and prices in store
4956 * If player's charisma changes, or if player changes a bow, PU_BONUS is set
4958 bool need_redraw_store_inv = (player_ptr->update & PU_BONUS) ? TRUE : FALSE;
4959 current_world_ptr->character_icky = TRUE;
4960 handle_stuff(player_ptr);
4961 if (player_ptr->inventory_list[INVEN_PACK].k_idx)
4963 INVENTORY_IDX item = INVEN_PACK;
4964 object_type *o_ptr = &player_ptr->inventory_list[item];
4965 if (cur_store_num != STORE_HOME)
4967 if (cur_store_num == STORE_MUSEUM)
4968 msg_print(_("ザックからアイテムがあふれそうなので、あわてて博物館から出た...", "Your pack is so full that you flee the Museum..."));
4970 msg_print(_("ザックからアイテムがあふれそうなので、あわてて店から出た...", "Your pack is so full that you flee the store..."));
4974 else if (!store_check_num(o_ptr))
4976 msg_print(_("ザックからアイテムがあふれそうなので、あわてて家から出た...", "Your pack is so full that you flee your home..."));
4984 GAME_TEXT o_name[MAX_NLEN];
4985 msg_print(_("ザックからアイテムがあふれてしまった!", "Your pack overflows!"));
4987 object_copy(q_ptr, o_ptr);
4988 object_desc(player_ptr, o_name, q_ptr, 0);
4989 msg_format(_("%sが落ちた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item));
4990 vary_item(player_ptr, item, -255);
4991 handle_stuff(player_ptr);
4993 item_pos = home_carry(player_ptr, q_ptr);
4996 store_top = (item_pos / store_bottom) * store_bottom;
4997 display_store_inventory(player_ptr);
5002 if (need_redraw_store_inv) display_store_inventory(player_ptr);
5004 if (st_ptr->store_open >= current_world_ptr->game_turn) leave_store = TRUE;
5007 select_floor_music(player_ptr);
5008 player_ptr->town_num = old_town_num;
5009 take_turn(player_ptr, 100);
5010 current_world_ptr->character_icky = FALSE;
5012 command_see = FALSE;
5013 get_com_no_macros = FALSE;
5018 player_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE);
5019 player_ptr->update |= (PU_MONSTERS);
5020 player_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY);
5021 player_ptr->redraw |= (PR_MAP);
5022 player_ptr->window |= (PW_OVERHEAD | PW_DUNGEON);
5027 * @brief 現在の町の店主を交代させる /
5028 * Shuffle one of the stores.
5029 * @param which 店舗種類のID
5032 void store_shuffle(player_type *player_ptr, int which)
5034 if (which == STORE_HOME) return;
5035 if (which == STORE_MUSEUM) return;
5037 cur_store_num = which;
5038 st_ptr = &town_info[player_ptr->town_num].store[cur_store_num];
5039 int j = st_ptr->owner;
5042 st_ptr->owner = (byte)randint0(MAX_OWNERS);
5043 if (j == st_ptr->owner) continue;
5045 for (i = 1; i < max_towns; i++)
5047 if (i == player_ptr->town_num) continue;
5048 if (st_ptr->owner == town_info[i].store[cur_store_num].owner) break;
5051 if (i == max_towns) break;
5054 ot_ptr = &owners[cur_store_num][st_ptr->owner];
5055 st_ptr->insult_cur = 0;
5056 st_ptr->store_open = 0;
5057 st_ptr->good_buy = 0;
5058 st_ptr->bad_buy = 0;
5059 for (int i = 0; i < st_ptr->stock_num; i++)
5062 o_ptr = &st_ptr->stock[i];
5063 if (object_is_artifact(o_ptr)) continue;
5065 o_ptr->discount = 50;
5066 o_ptr->ident &= ~(IDENT_FIXED);
5067 o_ptr->inscription = quark_add(_("売出中", "on sale"));
5073 * @brief 店の品揃えを変化させる /
5074 * Maintain the inventory at the stores.
5075 * @param player_ptr プレーヤーへの参照ポインタ
5076 * @param town_num 町のID
5077 * @param store_num 店舗種類のID
5080 void store_maint(player_type *player_ptr, int town_num, int store_num)
5082 cur_store_num = store_num;
5083 if (store_num == STORE_HOME) return;
5084 if (store_num == STORE_MUSEUM) return;
5086 st_ptr = &town_info[town_num].store[store_num];
5087 ot_ptr = &owners[store_num][st_ptr->owner];
5088 st_ptr->insult_cur = 0;
5089 if (store_num == STORE_BLACK)
5091 for (INVENTORY_IDX j = st_ptr->stock_num - 1; j >= 0; j--)
5093 object_type *o_ptr = &st_ptr->stock[j];
5094 if (black_market_crap(player_ptr, o_ptr))
5096 store_item_increase(j, 0 - o_ptr->number);
5097 store_item_optimize(j);
5102 INVENTORY_IDX j = st_ptr->stock_num;
5103 j = j - randint1(STORE_TURNOVER);
5104 if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
5105 if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
5108 while (st_ptr->stock_num > j)
5111 j = st_ptr->stock_num;
5112 j = j + randint1(STORE_TURNOVER);
5113 if (j > STORE_MAX_KEEP) j = STORE_MAX_KEEP;
5114 if (j < STORE_MIN_KEEP) j = STORE_MIN_KEEP;
5115 if (j >= st_ptr->stock_size) j = st_ptr->stock_size - 1;
5117 while (st_ptr->stock_num < j) store_create(player_ptr);
5122 * @brief 店舗情報を初期化する /
5123 * Initialize the stores
5124 * @param town_num 町のID
5125 * @param store_num 店舗種類のID
5128 void store_init(int town_num, int store_num)
5130 cur_store_num = store_num;
5131 st_ptr = &town_info[town_num].store[store_num];
5134 st_ptr->owner = (byte)randint0(MAX_OWNERS);
5136 for (i = 1; i < max_towns; i++)
5138 if (i == town_num) continue;
5139 if (st_ptr->owner == town_info[i].store[store_num].owner) break;
5142 if (i == max_towns) break;
5145 ot_ptr = &owners[store_num][st_ptr->owner];
5147 st_ptr->store_open = 0;
5148 st_ptr->insult_cur = 0;
5149 st_ptr->good_buy = 0;
5150 st_ptr->bad_buy = 0;
5151 st_ptr->stock_num = 0;
5154 * MEGA-HACK - Last visit to store is
5155 * BEFORE player birth to enable store restocking
5157 st_ptr->last_visit = -10L * TURNS_PER_TICK * STORE_TICKS;
5158 for (int k = 0; k < st_ptr->stock_size; k++)
5160 object_wipe(&st_ptr->stock[k]);