X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fstore.c;h=b6268b674f02ba39742ff9d0d929034b91c759ea;hb=5da531c9e8ff2b02990774efc0cfa487c1545121;hp=c49a60d89f06b612daa4a0bbdf813180466895a8;hpb=81898eff96d5e8dd8dc79d092d9420aacff6ef68;p=hengband%2Fhengband.git diff --git a/src/store.c b/src/store.c index c49a60d89..b6268b674 100644 --- a/src/store.c +++ b/src/store.c @@ -11,9 +11,754 @@ */ #include "angband.h" +#include "cmd-item.h" +#include "cmd-zapwand.h" +#include "cmd-magiceat.h" +#include "store.h" +#include "avatar.h" #define MIN_STOCK 12 + /*! + * @brief 闘技場のモンスターID及び報酬アイテムテーブル / + * Store owners (exactly four "possible" owners per store, chosen randomly) + * @details + *
+  * { name, purse, max greed, min greed, haggle_per, tolerance, race, unused }
+  *
+  * Lifted extra shopkeepers from CthAngband (don't you just love open source
+  * development? ;-)). Since this gave less than 32 unique names for some
+  * shops, those have their first x names copied to reach 32.
+  *
+  * For the weapon and armour shops, several owners have a limit of 5k.
+  *
+  * I want to do 50k owners, but the purse is currently s16b. Perhaps
+  * we should just store 1/10th of the purse?
+  * 
+ */ +const owner_type owners[MAX_STORES][MAX_OWNERS] = +{ + { + /* General store - 32 unique names */ + /* + Raistlin は dragonlance の powerful wizard 。 + Rincewind the Chicken は Terry Pratchett の Discworld の登場人物 上記のパロディ?、 + { "憶病者ラストリン", 200, 175, 108, 4, 12, RACE_HUMAN}, + { "Raistlin the Chicken", 200, 175, 108, 4, 12, RACE_HUMAN}, + */ + +#ifdef JP + { "フレンドリーなビルボ", 200, 170, 108, 5, 15, RACE_HOBBIT}, + { "憶病者リンスウィンド", 200, 175, 108, 4, 12, RACE_HUMAN}, + { "背の低いサルタン", 300, 170, 107, 5, 15, RACE_GNOME}, + { "ハンサムなライア=エル", 300, 165, 107, 6, 18, RACE_ELF}, + { "親切なファリルマウエン", 250, 170, 108, 5, 15, RACE_HOBBIT}, + { "臆病者ヴォワラン", 500, 175, 108, 4, 12, RACE_HUMAN}, + { "チビのエラシュナク", 750, 170, 107, 5, 15, RACE_BEASTMAN}, + { "ハンサムなグラッグ", 1000, 165, 107, 6, 18, RACE_HALF_TITAN}, + { "ケチなフォロビア", 250, 170, 108, 5, 15, RACE_HUMAN}, + { "馬鹿のエリス", 500, 175, 108, 4, 12, RACE_HUMAN}, + { "腹ペコのフィルバート", 750, 170, 107, 5, 15, RACE_VAMPIRE}, + { "スナーグル・サシグア", 1000, 165, 107, 6, 18, RACE_MIND_FLAYER}, + { "長死きエロワーズ", 250, 170, 108, 5, 15, RACE_SPECTRE}, + { "ノロマのフンディ", 500, 175, 108, 4, 12, RACE_ZOMBIE}, + { "グランサス", 750, 170, 107, 5, 15, RACE_SKELETON}, + { "丁寧なロラックス", 1000, 165, 107, 6, 18, RACE_VAMPIRE}, + { "ブッチ", 250, 170, 108, 5, 15, RACE_HALF_ORC}, + { "美しきエルベレス", 500, 175, 108, 4, 12, RACE_HIGH_ELF}, + { "こそこそサーレス", 750, 170, 107, 5, 15, RACE_GNOME}, + { "ナーロック", 1000, 165, 107, 6, 18, RACE_DWARF}, + { "チビのヘイネッカ", 250, 170, 108, 5, 15, RACE_GNOME}, + { "きちがいロワラン", 500, 175, 108, 4, 12, RACE_HALF_GIANT}, + { "毒息のウート", 750, 170, 107, 5, 15, RACE_DRACONIAN}, + { "でぶっちょアラァカ", 1000, 165, 107, 6, 18, RACE_DRACONIAN}, + { "低能なプーゴー", 250, 170, 108, 5, 15, RACE_BEASTMAN}, + { "フェロールフィリアン", 500, 175, 108, 4, 12, RACE_ELF}, + { "年寄りマロカ", 750, 170, 107, 5, 15, RACE_GNOME}, + { "勇敢なサシン", 1000, 165, 107, 6, 18, RACE_HALF_GIANT}, + { "田舎者アビエマール", 250, 170, 108, 5, 15, RACE_HUMAN}, + { "貧乏なハーク", 500, 175, 108, 4, 12, RACE_HALF_ORC}, + { "みじめなソアリン", 750, 170, 107, 5, 15, RACE_ZOMBIE}, + { "質素なメルラ", 1000, 165, 107, 6, 18, RACE_ELF}, +#else + { "Bilbo the Friendly", 200, 170, 108, 5, 15, RACE_HOBBIT}, + { "Rincewind the Chicken", 200, 175, 108, 4, 12, RACE_HUMAN}, + { "Sultan the Midget", 300, 170, 107, 5, 15, RACE_GNOME}, + { "Lyar-el the Comely", 300, 165, 107, 6, 18, RACE_ELF}, + { "Falilmawen the Friendly", 250, 170, 108, 5, 15, RACE_HOBBIT}, + { "Voirin the Cowardly", 500, 175, 108, 4, 12, RACE_HUMAN}, + { "Erashnak the Midget", 750, 170, 107, 5, 15, RACE_BEASTMAN}, + { "Grug the Comely", 1000, 165, 107, 6, 18, RACE_HALF_TITAN}, + { "Forovir the Cheap", 250, 170, 108, 5, 15, RACE_HUMAN}, + { "Ellis the Fool", 500, 175, 108, 4, 12, RACE_HUMAN}, + { "Filbert the Hungry", 750, 170, 107, 5, 15, RACE_VAMPIRE}, + { "Fthnargl Psathiggua", 1000, 165, 107, 6, 18, RACE_MIND_FLAYER}, + { "Eloise Long-Dead", 250, 170, 108, 5, 15, RACE_SPECTRE}, + { "Fundi the Slow", 500, 175, 108, 4, 12, RACE_ZOMBIE}, + { "Granthus", 750, 170, 107, 5, 15, RACE_SKELETON}, + { "Lorax the Suave", 1000, 165, 107, 6, 18, RACE_VAMPIRE}, + { "Butch", 250, 170, 108, 5, 15, RACE_HALF_ORC}, + { "Elbereth the Beautiful", 500, 175, 108, 4, 12, RACE_HIGH_ELF}, + { "Sarleth the Sneaky", 750, 170, 107, 5, 15, RACE_GNOME}, + { "Narlock", 1000, 165, 107, 6, 18, RACE_DWARF}, + { "Haneka the Small", 250, 170, 108, 5, 15, RACE_GNOME}, + { "Loirin the Mad", 500, 175, 108, 4, 12, RACE_HALF_GIANT}, + { "Wuto Poisonbreath", 750, 170, 107, 5, 15, RACE_DRACONIAN}, + { "Araaka the Rotund", 1000, 165, 107, 6, 18, RACE_DRACONIAN}, + { "Poogor the Dumb", 250, 170, 108, 5, 15, RACE_BEASTMAN}, + { "Felorfiliand", 500, 175, 108, 4, 12, RACE_ELF}, + { "Maroka the Aged", 750, 170, 107, 5, 15, RACE_GNOME}, + { "Sasin the Bold", 1000, 165, 107, 6, 18, RACE_HALF_GIANT}, + { "Abiemar the Peasant", 250, 170, 108, 5, 15, RACE_HUMAN}, + { "Hurk the Poor", 500, 175, 108, 4, 12, RACE_HALF_ORC}, + { "Soalin the Wretched", 750, 170, 107, 5, 15, RACE_ZOMBIE}, + { "Merulla the Humble", 1000, 165, 107, 6, 18, RACE_ELF}, +#endif + }, + { + /* Armoury - 28 unique names */ +#ifdef JP + { "醜悪コン=ダー", 5000, 210, 115, 5, 7, RACE_HALF_ORC}, + { "頑固者ダーグ=ロウ", 10000, 190, 111, 4, 9, RACE_HUMAN}, + { "賢者デカド", 25000, 200, 112, 4, 10, RACE_DUNADAN}, + { "鍛冶屋のウィーランド", 30000, 200, 112, 4, 5, RACE_DWARF}, + { "醜悪コン=ダー", 10000, 210, 115, 5, 7, RACE_HALF_ORC}, + { "頑固者ダーグ=ロウ", 15000, 190, 111, 4, 9, RACE_HUMAN}, + { "ハンサムなデカド", 25000, 200, 112, 4, 10, RACE_AMBERITE}, + { "エロー・ドラゴンスケイル", 30000, 200, 112, 4, 5, RACE_ELF}, + { "デリカトス", 10000, 210, 115, 5, 7, RACE_SPRITE}, + { "巨大なグルース", 15000, 190, 111, 4, 9, RACE_HALF_GIANT}, + { "アニムス", 25000, 200, 112, 4, 10, RACE_GOLEM}, + { "マルヴァス", 30000, 200, 112, 4, 5, RACE_HALF_TITAN}, + { "セラクシス", 10000, 210, 115, 5, 7, RACE_ZOMBIE}, + { "デス・チル", 5000, 190, 111, 4, 9, RACE_SPECTRE}, + { "微かなドリオス", 25000, 200, 112, 4, 10, RACE_SPECTRE}, + { "冷たいバスリック", 30000, 200, 112, 4, 5, RACE_VAMPIRE}, + { "冷酷ヴェンジェラ", 10000, 210, 115, 5, 7, RACE_HALF_TROLL}, + { "強者ウィラナ", 15000, 190, 111, 4, 9, RACE_HUMAN}, + { "ヨジョ二世", 25000, 200, 112, 4, 10, RACE_DWARF}, + { "優しいラナラー", 30000, 200, 112, 4, 5, RACE_AMBERITE}, + { "不浄のホルバグ", 5000, 210, 115, 5, 7, RACE_HALF_ORC}, + { "テレパスのエレレン", 15000, 190, 111, 4, 9, RACE_DARK_ELF}, + { "イスドリリアス", 25000, 200, 112, 4, 10, RACE_SPRITE}, + { "一つ目ヴェグナー", 5000, 200, 112, 4, 5, RACE_CYCLOPS}, + { "混沌のロディッシュ", 10000, 210, 115, 5, 7, RACE_BEASTMAN}, + { "剣豪ヘジン", 15000, 190, 111, 4, 9, RACE_NIBELUNG}, + { "ずる屋のエルベレリス", 10000, 200, 112, 4, 10, RACE_DARK_ELF}, + { "インプのザサス", 30000, 200, 112, 4, 5, RACE_IMP}, + { "醜悪コン=ダー", 5000, 210, 115, 5, 7, RACE_HALF_ORC}, + { "頑固者ダーグ=ロウ", 10000, 190, 111, 4, 9, RACE_HUMAN}, + { "ハンサムなデカド", 25000, 200, 112, 4, 10, RACE_AMBERITE}, + { "鍛冶屋のウィーランド", 30000, 200, 112, 4, 5, RACE_DWARF}, +#else + { "Kon-Dar the Ugly", 5000, 210, 115, 5, 7, RACE_HALF_ORC}, + { "Darg-Low the Grim", 10000, 190, 111, 4, 9, RACE_HUMAN}, + { "Decado the Handsome", 25000, 200, 112, 4, 10, RACE_DUNADAN}, + { "Wieland the Smith", 30000, 200, 112, 4, 5, RACE_DWARF}, + { "Kon-Dar the Ugly", 10000, 210, 115, 5, 7, RACE_HALF_ORC}, + { "Darg-Low the Grim", 15000, 190, 111, 4, 9, RACE_HUMAN}, + { "Decado the Handsome", 25000, 200, 112, 4, 10, RACE_AMBERITE}, + { "Elo Dragonscale", 30000, 200, 112, 4, 5, RACE_ELF}, + { "Delicatus", 10000, 210, 115, 5, 7, RACE_SPRITE}, + { "Gruce the Huge", 15000, 190, 111, 4, 9, RACE_HALF_GIANT}, + { "Animus", 25000, 200, 112, 4, 10, RACE_GOLEM}, + { "Malvus", 30000, 200, 112, 4, 5, RACE_HALF_TITAN}, + { "Selaxis", 10000, 210, 115, 5, 7, RACE_ZOMBIE}, + { "Deathchill", 5000, 190, 111, 4, 9, RACE_SPECTRE}, + { "Drios the Faint", 25000, 200, 112, 4, 10, RACE_SPECTRE}, + { "Bathric the Cold", 30000, 200, 112, 4, 5, RACE_VAMPIRE}, + { "Vengella the Cruel", 10000, 210, 115, 5, 7, RACE_HALF_TROLL}, + { "Wyrana the Mighty", 15000, 190, 111, 4, 9, RACE_HUMAN}, + { "Yojo II", 25000, 200, 112, 4, 10, RACE_DWARF}, + { "Ranalar the Sweet", 30000, 200, 112, 4, 5, RACE_AMBERITE}, + { "Horbag the Unclean", 5000, 210, 115, 5, 7, RACE_HALF_ORC}, + { "Elelen the Telepath", 15000, 190, 111, 4, 9, RACE_DARK_ELF}, + { "Isedrelias", 25000, 200, 112, 4, 10, RACE_SPRITE}, + { "Vegnar One-eye", 5000, 200, 112, 4, 5, RACE_CYCLOPS}, + { "Rodish the Chaotic", 10000, 210, 115, 5, 7, RACE_BEASTMAN}, + { "Hesin Swordmaster", 15000, 190, 111, 4, 9, RACE_NIBELUNG}, + { "Elvererith the Cheat", 10000, 200, 112, 4, 10, RACE_DARK_ELF}, + { "Zzathath the Imp", 30000, 200, 112, 4, 5, RACE_IMP}, + { "Kon-Dar the Ugly", 5000, 210, 115, 5, 7, RACE_HALF_ORC}, + { "Darg-Low the Grim", 10000, 190, 111, 4, 9, RACE_HUMAN}, + { "Decado the Handsome", 25000, 200, 112, 4, 10, RACE_AMBERITE}, + { "Wieland the Smith", 30000, 200, 112, 4, 5, RACE_DWARF}, +#endif + }, + + { + /* Weapon Smith - 28 unique names */ +#ifdef JP + { "残忍なるアーノルド", 5000, 210, 115, 6, 6, RACE_HALF_TROLL}, + { "獣殺しのアーンダル", 10000, 185, 110, 5, 9, RACE_HALF_ELF}, + { "獣マスターのエディー", 25000, 190, 115, 5, 7, RACE_HOBBIT}, + { "竜殺しのオグライン", 30000, 195, 112, 4, 8, RACE_DWARF}, + { "熟練者ドリュー", 10000, 210, 115, 6, 6, RACE_HUMAN}, + { "龍の子オラックス", 15000, 185, 110, 5, 9, RACE_DRACONIAN}, + { "病気持ちのアンスラックス", 25000, 190, 115, 5, 7, RACE_BEASTMAN}, + { "頑丈者アルコス", 30000, 195, 112, 4, 8, RACE_DWARF}, + { "腐れ者のサリアス", 5000, 210, 115, 6, 6, RACE_ZOMBIE}, + { "晒し骨のトゥエシク", 15000, 185, 110, 5, 9, RACE_SKELETON}, + { "ビリオス", 25000, 190, 115, 5, 7, RACE_BEASTMAN}, + { "ファスガル", 30000, 195, 112, 4, 8, RACE_ZOMBIE}, + { "パラディンのエレフリス", 10000, 210, 115, 6, 6, RACE_BARBARIAN}, + { "キ'トリッ'ク", 15000, 185, 110, 5, 9, RACE_KLACKON}, + { "蜘蛛の友ドゥロカス", 25000, 190, 115, 5, 7, RACE_DARK_ELF}, + { "巨人殺しのフングス", 30000, 195, 112, 4, 8, RACE_DWARF}, + { "デランサ", 10000, 210, 115, 6, 6, RACE_ELF}, + { "レンジャーのソルビスタニ", 15000, 185, 110, 5, 9, RACE_HALF_ELF}, + { "ノロマのゾリル", 25000, 190, 115, 5, 7, RACE_GOLEM}, + { "イーオン・フラックス", 20000, 195, 112, 4, 8, RACE_HALF_ELF}, + { "強者ナドック", 10000, 210, 115, 6, 6, RACE_HOBBIT}, + { "弱虫エラモグ", 15000, 185, 110, 5, 9, RACE_KOBOLD}, + { "公正なエオウィリス", 25000, 190, 115, 5, 7, RACE_VAMPIRE}, + { "バルログ殺しのヒュイモグ", 30000, 195, 112, 4, 8, RACE_HALF_ORC}, + { "冷酷ピーダス", 5000, 210, 115, 6, 6, RACE_HUMAN}, + { "ヴァモグ スレイヤー", 15000, 185, 110, 5, 9, RACE_HALF_OGRE}, + { "性悪フーシュナク", 25000, 190, 115, 5, 7, RACE_BEASTMAN}, + { "舞闘バレン", 30000, 195, 112, 4, 8, RACE_BARBARIAN}, + { "残忍なるアーノルド", 5000, 210, 115, 6, 6, RACE_BARBARIAN}, + { "獣殺しのアーンダル", 10000, 185, 110, 5, 9, RACE_HALF_ELF}, + { "ビーストマスター・エディー", 25000, 190, 115, 5, 7, RACE_HALF_ORC}, + { "竜殺しのオグライン", 30000, 195, 112, 4, 8, RACE_DWARF}, +#else + { "Arnold the Beastly", 5000, 210, 115, 6, 6, RACE_BARBARIAN}, + { "Arndal Beast-Slayer", 10000, 185, 110, 5, 9, RACE_HALF_ELF}, + { "Eddie Beast-Master", 25000, 190, 115, 5, 7, RACE_HALF_ORC}, + { "Oglign Dragon-Slayer", 30000, 195, 112, 4, 8, RACE_DWARF}, + { "Drew the Skilled", 10000, 210, 115, 6, 6, RACE_HUMAN}, + { "Orrax Dragonson", 15000, 185, 110, 5, 9, RACE_DRACONIAN}, + { "Anthrax Disease-Carrier", 25000, 190, 115, 5, 7, RACE_BEASTMAN}, + { "Arkhoth the Stout", 30000, 195, 112, 4, 8, RACE_DWARF}, + { "Sarlyas the Rotten", 5000, 210, 115, 6, 6, RACE_ZOMBIE}, + { "Tuethic Bare-Bones", 15000, 185, 110, 5, 9, RACE_SKELETON}, + { "Bilious", 25000, 190, 115, 5, 7, RACE_BEASTMAN}, + { "Fasgul", 30000, 195, 112, 4, 8, RACE_ZOMBIE}, + { "Ellefris the Paladin", 10000, 210, 115, 6, 6, RACE_BARBARIAN}, + { "K'trrik'k", 15000, 185, 110, 5, 9, RACE_KLACKON}, + { "Drocus Spiderfriend", 25000, 190, 115, 5, 7, RACE_DARK_ELF}, + { "Fungus Giant-Slayer", 30000, 195, 112, 4, 8, RACE_DWARF}, + { "Delantha", 10000, 210, 115, 6, 6, RACE_ELF}, + { "Solvistani the Ranger", 15000, 185, 110, 5, 9, RACE_HALF_ELF}, + { "Xoril the Slow", 25000, 190, 115, 5, 7, RACE_GOLEM}, + { "Aeon Flux", 20000, 195, 112, 4, 8, RACE_HALF_ELF}, + { "Nadoc the Strong", 10000, 210, 115, 6, 6, RACE_HOBBIT}, + { "Eramog the Weak", 15000, 185, 110, 5, 9, RACE_KOBOLD}, + { "Eowilith the Fair", 25000, 190, 115, 5, 7, RACE_VAMPIRE}, + { "Huimog Balrog-Slayer", 30000, 195, 112, 4, 8, RACE_HALF_ORC}, + { "Peadus the Cruel", 5000, 210, 115, 6, 6, RACE_HUMAN}, + { "Vamog Slayer", 15000, 185, 110, 5, 9, RACE_HALF_OGRE}, + { "Hooshnak the Vicious", 25000, 190, 115, 5, 7, RACE_BEASTMAN}, + { "Balenn War-Dancer", 30000, 195, 112, 4, 8, RACE_BARBARIAN}, + { "Arnold the Beastly", 5000, 210, 115, 6, 6, RACE_BARBARIAN}, + { "Arndal Beast-Slayer", 10000, 185, 110, 5, 9, RACE_HALF_ELF}, + { "Eddie Beast-Master", 25000, 190, 115, 5, 7, RACE_HALF_ORC}, + { "Oglign Dragon-Slayer", 30000, 195, 112, 4, 8, RACE_DWARF}, +#endif + }, + { + /* Temple - 22 unique names */ +#ifdef JP + { "質素なルードヴィヒ", 5000, 175, 109, 6, 15, RACE_HUMAN}, + { "パラディンのガンナー", 10000, 185, 110, 5, 23, RACE_HUMAN}, + { "選ばれしトリン", 25000, 180, 107, 6, 20, RACE_ELF}, + { "賢明なるサラストロ", 30000, 185, 109, 5, 15, RACE_DWARF}, + { "パーシヴァル卿", 25000, 180, 107, 6, 20, RACE_HIGH_ELF}, + { "神聖なるアセナス", 30000, 185, 109, 5, 15, RACE_HUMAN}, + { "マッキノン", 10000, 175, 109, 6, 15, RACE_HUMAN}, + { "謹み婦人", 15000, 185, 110, 5, 23, RACE_HIGH_ELF}, + { "ドルイドのハシュニック", 25000, 180, 107, 6, 20, RACE_HOBBIT}, + { "フィナク", 30000, 185, 109, 5, 15, RACE_YEEK}, + { "クリキック", 10000, 175, 109, 6, 15, RACE_KLACKON}, + { "荒くれ者モリヴァル", 15000, 185, 110, 5, 23, RACE_ELF}, + { "暗きホシャック", 25000, 180, 107, 6, 20, RACE_IMP}, + { "賢者アタール", 30000, 185, 109, 5, 15, RACE_HUMAN}, + { "清きイベニッド", 10000, 175, 109, 6, 15, RACE_HUMAN}, + { "エリディシュ", 15000, 185, 110, 5, 23, RACE_HALF_TROLL}, + { "呪術師ヴルドゥシュ", 25000, 180, 107, 6, 20, RACE_HALF_OGRE}, + { "狂戦士ハオブ", 30000, 185, 109, 5, 15, RACE_BARBARIAN}, + { "若きプルーグディシュ", 10000, 175, 109, 6, 15, RACE_HALF_OGRE}, + { "きちがいラムワイズ", 15000, 185, 110, 5, 23, RACE_YEEK}, + { "有徳者ムワート", 25000, 180, 107, 6, 20, RACE_KOBOLD}, + { "弱虫ダードバード", 30000, 185, 109, 5, 15, RACE_SPECTRE}, + { "質素なルードヴィヒ", 5000, 175, 109, 6, 15, RACE_HUMAN}, + { "パラディンのガンナー", 10000, 185, 110, 5, 23, RACE_HUMAN}, + { "選ばれしトリン", 25000, 180, 107, 6, 20, RACE_ELF}, + { "賢明なるサラストロ", 30000, 185, 109, 5, 15, RACE_DWARF}, + { "パーシヴァル卿", 25000, 180, 107, 6, 20, RACE_HIGH_ELF}, + { "神聖なるアセナス", 30000, 185, 109, 5, 15, RACE_HUMAN}, + { "マッキノン", 10000, 175, 109, 6, 15, RACE_HUMAN}, + { "謹み婦人", 15000, 185, 110, 5, 23, RACE_HIGH_ELF}, + { "ドルイドのハシュニック", 25000, 180, 107, 6, 20, RACE_HOBBIT}, + { "フィナク", 30000, 185, 109, 5, 15, RACE_YEEK}, +#else + { "Ludwig the Humble", 5000, 175, 109, 6, 15, RACE_DWARF}, + { "Gunnar the Paladin", 10000, 185, 110, 5, 23, RACE_HALF_TROLL}, + { "Torin the Chosen", 25000, 180, 107, 6, 20, RACE_HIGH_ELF}, + { "Sarastro the Wise", 30000, 185, 109, 5, 15, RACE_HUMAN}, + { "Sir Parsival the Pure", 25000, 180, 107, 6, 20, RACE_HIGH_ELF}, + { "Asenath the Holy", 30000, 185, 109, 5, 15, RACE_HUMAN}, + { "McKinnon", 10000, 175, 109, 6, 15, RACE_HUMAN}, + { "Mistress Chastity", 15000, 185, 110, 5, 23, RACE_HIGH_ELF}, + { "Hashnik the Druid", 25000, 180, 107, 6, 20, RACE_HOBBIT}, + { "Finak", 30000, 185, 109, 5, 15, RACE_YEEK}, + { "Krikkik", 10000, 175, 109, 6, 15, RACE_KLACKON}, + { "Morival the Wild", 15000, 185, 110, 5, 23, RACE_ELF}, + { "Hoshak the Dark", 25000, 180, 107, 6, 20, RACE_IMP}, + { "Atal the Wise", 30000, 185, 109, 5, 15, RACE_HUMAN}, + { "Ibenidd the Chaste", 10000, 175, 109, 6, 15, RACE_HUMAN}, + { "Eridish", 15000, 185, 110, 5, 23, RACE_HALF_TROLL}, + { "Vrudush the Shaman", 25000, 180, 107, 6, 20, RACE_HALF_OGRE}, + { "Haob the Berserker", 30000, 185, 109, 5, 15, RACE_BARBARIAN}, + { "Proogdish the Youthfull", 10000, 175, 109, 6, 15, RACE_HALF_OGRE}, + { "Lumwise the Mad", 15000, 185, 110, 5, 23, RACE_YEEK}, + { "Muirt the Virtuous", 25000, 180, 107, 6, 20, RACE_KOBOLD}, + { "Dardobard the Weak", 30000, 185, 109, 5, 15, RACE_SPECTRE}, + { "Ludwig the Humble", 5000, 175, 109, 6, 15, RACE_DWARF}, + { "Gunnar the Paladin", 10000, 185, 110, 5, 23, RACE_HALF_TROLL}, + { "Torin the Chosen", 25000, 180, 107, 6, 20, RACE_HIGH_ELF}, + { "Sarastro the Wise", 30000, 185, 109, 5, 15, RACE_HUMAN}, + { "Sir Parsival the Pure", 25000, 180, 107, 6, 20, RACE_HIGH_ELF}, + { "Asenath the Holy", 30000, 185, 109, 5, 15, RACE_HUMAN}, + { "McKinnon", 10000, 175, 109, 6, 15, RACE_HUMAN}, + { "Mistress Chastity", 15000, 185, 110, 5, 23, RACE_HIGH_ELF}, + { "Hashnik the Druid", 25000, 180, 107, 6, 20, RACE_HOBBIT}, + { "Finak", 30000, 185, 109, 5, 15, RACE_YEEK}, +#endif + }, + { + /* Alchemist - 26 unique names */ +#ifdef JP + { "化学者マウザー", 10000, 190, 111, 5, 8, RACE_HALF_ELF}, + { "カオスのウィズル", 10000, 190, 110, 6, 8, RACE_HOBBIT}, + { "強欲ミダス", 15000, 200, 116, 6, 9, RACE_GNOME}, + { "貧弱ジャ=ファー", 15000, 220, 111, 4, 9, RACE_ELF},/*FIRST*/ + { "カカルラカカル", 15000, 200, 116, 6, 9, RACE_KLACKON}, + { "錬金術師ジャル=エス", 15000, 220, 111, 4, 9, RACE_ELF}, + { "用心深いファネラス", 10000, 190, 111, 5, 8, RACE_DWARF}, + { "キチガイのルンシー", 10000, 190, 110, 6, 8, RACE_HUMAN}, + { "グランブルワース", 15000, 200, 116, 6, 9, RACE_GNOME}, + { "フリッター", 15000, 220, 111, 4, 9, RACE_SPRITE}, + { "ザリルス", 10000, 190, 111, 5, 8, RACE_HUMAN}, + { "古きエグバート", 10000, 190, 110, 6, 8, RACE_DWARF}, + { "誇り高きヴァリンドラ", 15000, 200, 116, 6, 9, RACE_HIGH_ELF}, + { "錬金術師タエン", 15000, 220, 111, 4, 9, RACE_HUMAN}, + { "巧言カイド", 10000, 190, 111, 5, 8, RACE_VAMPIRE}, + { "暗きフリア", 10000, 190, 110, 6, 8, RACE_NIBELUNG}, + { "質素なドムリ", 15000, 200, 116, 6, 9, RACE_DWARF}, + { "魔の子ヤァジュッカ", 15000, 220, 111, 4, 9, RACE_IMP}, + { "薬草師ジェララルドール", 10000, 190, 111, 5, 8, RACE_HIGH_ELF}, + { "賢者オレラルダン", 10000, 190, 110, 6, 8, RACE_BARBARIAN}, + { "デモニシストのフゾグロ", 15000, 200, 116, 6, 9, RACE_IMP}, + { "錬金術師ドゥリアシュ", 15000, 220, 111, 4, 9, RACE_HALF_ORC}, + { "強者ネリア", 10000, 190, 111, 5, 8, RACE_CYCLOPS}, + { "辛口リグナス", 10000, 190, 110, 6, 8, RACE_HALF_ORC}, + { "ティルバ", 15000, 200, 116, 6, 9, RACE_HOBBIT}, + { "金持ちミリルドリック", 15000, 220, 111, 4, 9, RACE_HUMAN}, + + { "科学者マウザー", 10000, 190, 111, 5, 8, RACE_HALF_ELF}, + { "カオスのウィズル", 10000, 190, 110, 6, 8, RACE_HOBBIT}, + { "強欲ミダス", 15000, 200, 116, 6, 9, RACE_GNOME}, + { "錬金術師ジャ=ファー", 15000, 220, 111, 4, 9, RACE_ELF}, + { "カカルラカカル", 15000, 200, 116, 6, 9, RACE_KLACKON}, + { "錬金術師ジャル=エス", 15000, 220, 111, 4, 9, RACE_ELF}, +#else + { "Mauser the Chemist", 10000, 190, 111, 5, 8, RACE_HALF_ELF}, + { "Wizzle the Chaotic", 10000, 190, 110, 6, 8, RACE_HOBBIT}, + { "Midas the Greedy", 15000, 200, 116, 6, 9, RACE_GNOME}, + { "Ja-Far the Alchemist", 15000, 220, 111, 4, 9, RACE_ELF}, + { "Kakalrakakal", 15000, 200, 116, 6, 9, RACE_KLACKON}, + { "Jal-Eth the Alchemist", 15000, 220, 111, 4, 9, RACE_ELF}, + { "Fanelath the Cautious", 10000, 190, 111, 5, 8, RACE_DWARF}, + { "Runcie the Insane", 10000, 190, 110, 6, 8, RACE_HUMAN}, + { "Grumbleworth", 15000, 200, 116, 6, 9, RACE_GNOME}, + { "Flitter", 15000, 220, 111, 4, 9, RACE_SPRITE}, + { "Xarillus", 10000, 190, 111, 5, 8, RACE_HUMAN}, + { "Egbert the Old", 10000, 190, 110, 6, 8, RACE_DWARF}, + { "Valindra the Proud", 15000, 200, 116, 6, 9, RACE_HIGH_ELF}, + { "Taen the Alchemist", 15000, 220, 111, 4, 9, RACE_HUMAN}, + { "Cayd the Sweet", 10000, 190, 111, 5, 8, RACE_VAMPIRE}, + { "Fulir the Dark", 10000, 190, 110, 6, 8, RACE_NIBELUNG}, + { "Domli the Humble", 15000, 200, 116, 6, 9, RACE_DWARF}, + { "Yaarjukka Demonspawn", 15000, 220, 111, 4, 9, RACE_IMP}, + { "Gelaraldor the Herbmaster", 10000, 190, 111, 5, 8, RACE_HIGH_ELF}, + { "Olelaldan the Wise", 10000, 190, 110, 6, 8, RACE_BARBARIAN}, + { "Fthoglo the Demonicist", 15000, 200, 116, 6, 9, RACE_IMP}, + { "Dridash the Alchemist", 15000, 220, 111, 4, 9, RACE_HALF_ORC}, + { "Nelir the Strong", 10000, 190, 111, 5, 8, RACE_CYCLOPS}, + { "Lignus the Pungent", 10000, 190, 110, 6, 8, RACE_HALF_ORC}, + { "Tilba", 15000, 200, 116, 6, 9, RACE_HOBBIT}, + { "Myrildric the Wealthy", 15000, 220, 111, 4, 9, RACE_HUMAN}, + + { "Mauser the Chemist", 10000, 190, 111, 5, 8, RACE_HALF_ELF}, + { "Wizzle the Chaotic", 10000, 190, 110, 6, 8, RACE_HOBBIT}, + { "Midas the Greedy", 15000, 200, 116, 6, 9, RACE_GNOME}, + { "Ja-Far the Alchemist", 15000, 220, 111, 4, 9, RACE_ELF}, + { "Kakalrakakal", 15000, 200, 116, 6, 9, RACE_KLACKON}, + { "Jal-Eth the Alchemist", 15000, 220, 111, 4, 9, RACE_ELF}, +#endif + }, + + { + /* Magic Shop - 23 unique names */ +#ifdef JP + { "ソーサラーのロ=パン", 20000, 200, 110, 7, 8, RACE_HALF_ELF}, + { "偉大なるブガービイ", 20000, 215, 113, 6, 10, RACE_GNOME}, + { "イェンダーの魔法使い", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "死霊使いリャク",30000, 175, 110, 5, 11, RACE_HIGH_ELF}, + { "魔術師スキドゥニー", 15000, 200, 110, 7, 8, RACE_HALF_ELF}, + { "幻術師キリア", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "死霊術師ニッキ", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "ソロストラン", 15000, 200, 110, 7, 8, RACE_SPRITE}, + { "烏賊口アチシェ", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER}, + { "貴族のカザ", 30000, 200, 110, 7, 10, RACE_HIGH_ELF}, + { "暗きファジル", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "偉大なるケルドーン", 15000, 200, 110, 7, 8, RACE_DWARF}, + { "フィランスロプス", 20000, 215, 113, 6, 10, RACE_HOBBIT}, + { "魔女のアグナー", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "死霊術師ビュリアンス", 30000, 175, 110, 5, 11, RACE_BEASTMAN}, + { "ハイメイジのヴイラク", 15000, 200, 110, 7, 8, RACE_BEASTMAN}, + { "知恵者マディッシュ", 20000, 215, 113, 6, 10, RACE_BEASTMAN}, + { "ファレブリンボール", 30000, 200, 110, 7, 10, RACE_HIGH_ELF}, + { "陰険フェリル=ガンド", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "呪術師サレゴード", 15000, 200, 110, 7, 8, RACE_BARBARIAN}, + { "神秘家クトゥアロス", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER}, + { "幻術師イベリ", 30000, 200, 110, 7, 10, RACE_SKELETON}, + { "死霊術師ヘトー", 30000, 175, 110, 5, 11, RACE_YEEK}, + { "魔術師ロ=パン", 20000, 200, 110, 7, 8, RACE_HALF_ELF}, + { "偉大なるブガービイ", 20000, 215, 113, 6, 10, RACE_GNOME}, + { "イェンダーの魔法使い", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "死霊術師リャク", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "魔術師スキドゥニー", 15000, 200, 110, 7, 8, RACE_HALF_ELF}, + { "幻術師キリア", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "死霊術師ニッキ", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "ソロストラン", 15000, 200, 110, 7, 8, RACE_SPRITE}, + { "烏賊口アチシェ", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER}, +#else + { "Lo Pan the Sorcerer", 20000, 200, 110, 7, 8, RACE_HALF_ELF}, + { "Buggerby the Great", 20000, 215, 113, 6, 10, RACE_GNOME}, + { "The Wizard of Yendor", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "Rjak the Necromancer", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "Skidney the Sorcerer", 15000, 200, 110, 7, 8, RACE_HALF_ELF}, + { "Kyria the Illusionist", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "Nikki the Necromancer", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "Solostoran", 15000, 200, 110, 7, 8, RACE_SPRITE}, + { "Achshe the Tentacled", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER}, + { "Kaza the Noble", 30000, 200, 110, 7, 10, RACE_HIGH_ELF}, + { "Fazzil the Dark", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "Keldorn the Grand", 15000, 200, 110, 7, 8, RACE_DWARF}, + { "Philanthropus", 20000, 215, 113, 6, 10, RACE_HOBBIT}, + { "Agnar the Enchantress", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "Buliance the Necromancer", 30000, 175, 110, 5, 11, RACE_BEASTMAN}, + { "Vuirak the High-Mage", 15000, 200, 110, 7, 8, RACE_BEASTMAN}, + { "Madish the Smart", 20000, 215, 113, 6, 10, RACE_BEASTMAN}, + { "Falebrimbor", 30000, 200, 110, 7, 10, RACE_HIGH_ELF}, + { "Felil-Gand the Subtle", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "Thalegord the Shaman", 15000, 200, 110, 7, 8, RACE_BARBARIAN}, + { "Cthoaloth the Mystic", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER}, + { "Ibeli the Illusionist", 30000, 200, 110, 7, 10, RACE_SKELETON}, + { "Heto the Necromancer", 30000, 175, 110, 5, 11, RACE_YEEK}, + { "Lo Pan the Sorcerer", 20000, 200, 110, 7, 8, RACE_HALF_ELF}, + { "Buggerby the Great", 20000, 215, 113, 6, 10, RACE_GNOME}, + { "The Wizard of Yendor", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "Rjak the Necromancer", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "Skidney the Sorcerer", 15000, 200, 110, 7, 8, RACE_HALF_ELF}, + { "Kyria the Illusionist", 30000, 200, 110, 7, 10, RACE_HUMAN}, + { "Nikki the Necromancer", 30000, 175, 110, 5, 11, RACE_DARK_ELF}, + { "Solostoran", 15000, 200, 110, 7, 8, RACE_SPRITE}, + { "Achshe the Tentacled", 20000, 215, 113, 6, 10, RACE_MIND_FLAYER}, +#endif + }, + { + /* Black Market - 32 unique names */ +#ifdef JP + { "ガリー=ギガズ", 20000, 250, 150, 10, 5, RACE_HALF_TROLL}, + { "ゴブリンのヒストーア", 20000, 250, 150, 10, 5, RACE_HALF_ORC}, + { "フェレンギ人クアーク", 30000, 250, 150, 10, 5, RACE_HUMAN}, + { "公正なる(?)トッピ", 30000, 250, 150, 10, 5, RACE_ELF}, + { "死人ヴァッサ", 20000, 250, 150, 10, 5, RACE_ZOMBIE}, + { "裏切り者カイン", 20000, 250, 150, 10, 5, RACE_VAMPIRE}, + { "ブボニカス", 30000, 250, 150, 10, 5, RACE_BEASTMAN}, + { "コープスライト", 30000, 250, 150, 10, 5, RACE_SPECTRE}, + { "血に飢えしパリッシュ", 20000, 250, 150, 10, 5, RACE_VAMPIRE}, + { "ヴァイル", 20000, 250, 150, 10, 5, RACE_SKELETON}, + { "信頼のプレンティス", 30000, 250, 150, 10, 5, RACE_SKELETON}, + { "人間殺しのグリエラ", 30000, 250, 150, 10, 5, RACE_IMP}, + { "エンジェル", 20000, 250, 150, 10, 5, RACE_VAMPIRE}, + { "水膨れフロツァム", 20000, 250, 150, 10, 5, RACE_ZOMBIE}, + { "ニーヴァル", 30000, 250, 150, 10, 5, RACE_VAMPIRE}, + { "明るいアナスタシア", 30000, 250, 150, 10, 5, RACE_SPECTRE}, + { "死霊術師チャリティー", 20000, 250, 150, 10, 5, RACE_DARK_ELF}, + { "ボクサーのプグナシオス", 20000, 250, 150, 10, 5, RACE_HALF_ORC}, + { "幸運なフットソア", 30000, 250, 150, 10, 5, RACE_BEASTMAN}, + { "光指のシドリア", 30000, 250, 150, 10, 5, RACE_HUMAN}, + { "手品師リアソー", 20000, 250, 150, 10, 5, RACE_HOBBIT}, + { "やりくり上手のジャナッカ", 20000, 250, 150, 10, 5, RACE_GNOME}, + { "悪党シーナ", 30000, 250, 150, 10, 5, RACE_GNOME}, + { "大爪アルニッキ", 30000, 250, 150, 10, 5, RACE_DRACONIAN}, + { "貧乏チャエアンド", 20000, 250, 150, 10, 5, RACE_HUMAN}, + { "山賊アファードーフ", 20000, 250, 150, 10, 5, RACE_BARBARIAN}, + { "強欲ラザクスル", 30000, 250, 150, 10, 5, RACE_MIND_FLAYER}, + { "ファラレウィン", 30000, 250, 150, 10, 5, RACE_SPRITE}, + { "しわしわヴォスール", 20000, 250, 150, 10, 5, RACE_NIBELUNG}, + { "ハンサムなアラオード", 20000, 250, 150, 10, 5, RACE_AMBERITE}, + { "負け犬セラドフリド", 30000, 250, 150, 10, 5, RACE_HUMAN}, + { "片足のエルーロ", 30000, 250, 150, 10, 5, RACE_HALF_OGRE}, +#else + { "Gary Gygaz", 20000, 250, 150, 10, 5, RACE_HALF_TROLL}, + { "Histor the Goblin", 20000, 250, 150, 10, 5, RACE_HALF_ORC}, + { "Quark the Ferengi", 30000, 250, 150, 10, 5, RACE_DWARF}, + { "Topi the Fair(?)", 30000, 250, 150, 10, 5, RACE_HUMAN}, + { "Vhassa the Dead", 20000, 250, 150, 10, 5, RACE_ZOMBIE}, + { "Kyn the Treacherous", 20000, 250, 150, 10, 5, RACE_VAMPIRE}, + { "Bubonicus", 30000, 250, 150, 10, 5, RACE_BEASTMAN}, + { "Corpselight", 30000, 250, 150, 10, 5, RACE_SPECTRE}, + { "Parrish the Bloodthirsty", 20000, 250, 150, 10, 5, RACE_VAMPIRE}, + { "Vile", 20000, 250, 150, 10, 5, RACE_SKELETON}, + { "Prentice the Trusted", 30000, 250, 150, 10, 5, RACE_SKELETON}, + { "Griella Humanslayer", 30000, 250, 150, 10, 5, RACE_IMP}, + { "Angel", 20000, 250, 150, 10, 5, RACE_VAMPIRE}, + { "Flotsam the Bloated", 20000, 250, 150, 10, 5, RACE_ZOMBIE}, + { "Nieval", 30000, 250, 150, 10, 5, RACE_VAMPIRE}, + { "Anastasia the Luminous", 30000, 250, 150, 10, 5, RACE_SPECTRE}, + { "Charity the Necromancer", 20000, 250, 150, 10, 5, RACE_DARK_ELF}, + { "Pugnacious the Pugilist", 20000, 250, 150, 10, 5, RACE_HALF_ORC}, + { "Footsore the Lucky", 30000, 250, 150, 10, 5, RACE_BEASTMAN}, + { "Sidria Lighfingered", 30000, 250, 150, 10, 5, RACE_HUMAN}, + { "Riatho the Juggler", 20000, 250, 150, 10, 5, RACE_HOBBIT}, + { "Janaaka the Shifty", 20000, 250, 150, 10, 5, RACE_GNOME}, + { "Cina the Rogue", 30000, 250, 150, 10, 5, RACE_GNOME}, + { "Arunikki Greatclaw", 30000, 250, 150, 10, 5, RACE_DRACONIAN}, + { "Chaeand the Poor", 20000, 250, 150, 10, 5, RACE_HUMAN}, + { "Afardorf the Brigand", 20000, 250, 150, 10, 5, RACE_BARBARIAN}, + { "Lathaxl the Greedy", 30000, 250, 150, 10, 5, RACE_MIND_FLAYER}, + { "Falarewyn", 30000, 250, 150, 10, 5, RACE_SPRITE}, + { "Vosur the Wrinkled", 20000, 250, 150, 10, 5, RACE_NIBELUNG}, + { "Araord the Handsome", 20000, 250, 150, 10, 5, RACE_AMBERITE}, + { "Theradfrid the Loser", 30000, 250, 150, 10, 5, RACE_HUMAN}, + { "One-Legged Eroolo", 30000, 250, 150, 10, 5, RACE_HALF_OGRE}, +#endif + }, + { + /* Home */ +#ifdef JP + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, + { "我が家", 0, 100, 100, 0, 99, 99}, +#else + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, + { "Your home", 0, 100, 100, 0, 99, 99}, +#endif + + }, + + { + /* Bookstore - 21 unique names */ +#ifdef JP + { "強欲ドラフ", 10000, 175, 108, 4, 12, RACE_HUMAN}, + { "賢者オドナー", 15000, 120, 105, 6, 16, RACE_HIGH_ELF}, + { "中立のガンダー", 25000, 120, 110, 7, 19, RACE_DARK_ELF}, + { "忍耐の人ロ=シャ", 30000, 140, 105, 6, 12, RACE_ELF}, + { "ランドルフ・カーター", 15000, 175, 108, 4, 12, RACE_HUMAN}, + { "隼のサライ", 15000, 175, 108, 4, 12, RACE_HUMAN}, + { "千里眼ボドリル", 20000, 120, 105, 6, 16, RACE_HIGH_ELF}, + { "沈黙のヴェオロイン", 25000, 120, 110, 7, 19, RACE_ZOMBIE}, + { "学者のヴァンシラス", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER}, + { "物書きオセイン", 15000, 175, 108, 4, 12, RACE_SKELETON}, + { "本の虫オルヴァー", 20000, 120, 105, 6, 16, RACE_VAMPIRE}, + { "浅井墓男", 25000, 120, 110, 7, 19, RACE_ZOMBIE}, + { "デスマスク", 30000, 140, 105, 6, 12, RACE_ZOMBIE}, + { "学者のアスーヌ", 15000, 175, 108, 4, 12, RACE_MIND_FLAYER}, + { "死人のプリランド", 20000, 120, 105, 6, 16, RACE_ZOMBIE}, + { "鉄のロナール", 25000, 120, 110, 7, 19, RACE_GOLEM}, +#else + { "Dolaf the Greedy", 10000, 175, 108, 4, 12, RACE_HUMAN}, + { "Odnar the Sage", 15000, 120, 105, 6, 16, RACE_HIGH_ELF}, + { "Gandar the Neutral", 25000, 120, 110, 7, 19, RACE_DARK_ELF}, + { "Ro-sha the Patient", 30000, 140, 105, 6, 12, RACE_ELF}, + { "Randolph Carter", 15000, 175, 108, 4, 12, RACE_HUMAN}, + { "Sarai the Swift", 15000, 175, 108, 4, 12, RACE_HUMAN}, + { "Bodril the Seer", 20000, 120, 105, 6, 16, RACE_HIGH_ELF}, + { "Veloin the Quiet", 25000, 120, 110, 7, 19, RACE_ZOMBIE}, + { "Vanthylas the Learned", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER}, + { "Ossein the Literate", 15000, 175, 108, 4, 12, RACE_SKELETON}, + { "Olvar Bookworm", 20000, 120, 105, 6, 16, RACE_VAMPIRE}, + { "Shallowgrave", 25000, 120, 110, 7, 19, RACE_ZOMBIE}, + { "Death Mask", 30000, 140, 105, 6, 12, RACE_ZOMBIE}, + { "Asuunu the Learned", 15000, 175, 108, 4, 12, RACE_MIND_FLAYER}, + { "Prirand the Dead", 20000, 120, 105, 6, 16, RACE_ZOMBIE}, + { "Ronar the Iron", 25000, 120, 110, 7, 19, RACE_GOLEM}, +#endif +#ifdef JP + { "ガリル=ガミル", 30000, 140, 105, 6, 12, RACE_ELF}, + { "本食いローバグ", 15000, 175, 108, 4, 12, RACE_KOBOLD}, + { "キリアリキーク", 20000, 120, 105, 6, 16, RACE_KLACKON}, + { "静かなるリリン", 25000, 120, 110, 7, 19, RACE_DWARF}, + { "王者イサング", 30000, 140, 105, 6, 12, RACE_HIGH_ELF}, + { "強欲ドラフ", 10000, 175, 108, 4, 12, RACE_HUMAN}, + { "賢者オドナー", 15000, 120, 105, 6, 16, RACE_HIGH_ELF}, + { "中立のガンダー", 25000, 120, 110, 7, 19, RACE_DARK_ELF}, + { "忍耐の人ロ=シャ", 30000, 140, 105, 6, 12, RACE_ELF}, + { "ランドルフ・カーター", 15000, 175, 108, 4, 12, RACE_HUMAN}, + { "隼サライ", 15000, 175, 108, 4, 12, RACE_HUMAN}, + { "千里眼ボドリル", 20000, 120, 105, 6, 16, RACE_HIGH_ELF}, + { "沈黙のヴェオロイン", 25000, 120, 110, 7, 19, RACE_ZOMBIE}, + { "学者のヴァンシラス", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER}, + { "物書きオセイン", 15000, 175, 108, 4, 12, RACE_SKELETON}, + { "本の虫オルヴァー", 20000, 120, 105, 6, 16, RACE_VAMPIRE}, +#else + { "Galil-Gamir", 30000, 140, 105, 6, 12, RACE_ELF}, + { "Rorbag Book-Eater", 15000, 175, 108, 4, 12, RACE_KOBOLD}, + { "Kiriarikirk", 20000, 120, 105, 6, 16, RACE_KLACKON}, + { "Rilin the Quiet", 25000, 120, 110, 7, 19, RACE_DWARF}, + { "Isung the Lord", 30000, 140, 105, 6, 12, RACE_HIGH_ELF}, + { "Dolaf the Greedy", 10000, 175, 108, 4, 12, RACE_HUMAN}, + { "Odnar the Sage", 15000, 120, 105, 6, 16, RACE_HIGH_ELF}, + { "Gandar the Neutral", 25000, 120, 110, 7, 19, RACE_DARK_ELF}, + { "Ro-sha the Patient", 30000, 140, 105, 6, 12, RACE_ELF}, + { "Randolph Carter", 15000, 175, 108, 4, 12, RACE_HUMAN}, + { "Sarai the Swift", 15000, 175, 108, 4, 12, RACE_HUMAN}, + { "Bodril the Seer", 20000, 120, 105, 6, 16, RACE_HIGH_ELF}, + { "Veloin the Quiet", 25000, 120, 110, 7, 19, RACE_ZOMBIE}, + { "Vanthylas the Learned", 30000, 140, 105, 6, 12, RACE_MIND_FLAYER}, + { "Ossein the Literate", 15000, 175, 108, 4, 12, RACE_SKELETON}, + { "Olvar Bookworm", 20000, 120, 105, 6, 16, RACE_VAMPIRE}, +#endif + }, + + { + /* Museum */ +#ifdef JP + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, + { "博物館", 0, 100, 100, 0, 99, 99}, +#else + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, + { "Museum", 0, 100, 100, 0, 99, 99}, +#endif + + }, + +}; + static int cur_store_num = 0; static int store_top = 0; static int store_bottom = 0; @@ -26,7 +771,7 @@ static s16b inner_town_num = 0; #define MAX_COMMENT_1 6 -static cptr comment_1[MAX_COMMENT_1] = +static concptr comment_1[MAX_COMMENT_1] = { #ifdef JP "オーケーだ。", @@ -48,7 +793,7 @@ static cptr comment_1[MAX_COMMENT_1] = #ifdef JP /*! ブラックマーケット追加メッセージ(承諾) */ -static cptr comment_1_B[MAX_COMMENT_1] = { +static concptr comment_1_B[MAX_COMMENT_1] = { "まあ、それでいいや。", "今日はそれで勘弁してやる。", "分かったよ。", @@ -59,7 +804,7 @@ static cptr comment_1_B[MAX_COMMENT_1] = { #endif #define MAX_COMMENT_2A 2 -static cptr comment_2a[MAX_COMMENT_2A] = +static concptr comment_2a[MAX_COMMENT_2A] = { #ifdef JP "私の忍耐力を試しているのかい? $%s が最後だ。", @@ -73,7 +818,7 @@ static cptr comment_2a[MAX_COMMENT_2A] = #define MAX_COMMENT_2B 12 -static cptr comment_2b[MAX_COMMENT_2B] = +static concptr comment_2b[MAX_COMMENT_2B] = { #ifdef JP " $%s ぐらいは出さなきゃダメだよ。", @@ -107,7 +852,7 @@ static cptr comment_2b[MAX_COMMENT_2B] = #ifdef JP /*! ブラックマーケット用追加メッセージ(売るとき) */ -static cptr comment_2b_B[MAX_COMMENT_2B] = { +static concptr comment_2b_B[MAX_COMMENT_2B] = { "いくら俺様がお人好しとはいえ $%s が限界だね。嫌なら帰りな。", "金がないのかい、あんた?まずは家に帰って $%s 揃えてきな。", "物の価値が分からん奴だな。これは $%s が普通なんだよ。", @@ -124,7 +869,7 @@ static cptr comment_2b_B[MAX_COMMENT_2B] = { #endif #define MAX_COMMENT_3A 2 -static cptr comment_3a[MAX_COMMENT_3A] = +static concptr comment_3a[MAX_COMMENT_3A] = { #ifdef JP "私の忍耐力を試しているのかい? $%s が最後だ。", @@ -139,7 +884,7 @@ static cptr comment_3a[MAX_COMMENT_3A] = #define MAX_COMMENT_3B 12 -static cptr comment_3b[MAX_COMMENT_3B] = +static concptr comment_3b[MAX_COMMENT_3B] = { #ifdef JP "本音を言うと $%s でいいんだろ?", @@ -173,7 +918,7 @@ static cptr comment_3b[MAX_COMMENT_3B] = #ifdef JP /*! ブラックマーケット用追加メッセージ(買い取り) */ -static cptr comment_3b_B[MAX_COMMENT_3B] = { +static concptr comment_3b_B[MAX_COMMENT_3B] = { " $%s ってところだね。そのどうしようもないガラクタは。", "この俺が $%s って言っているんだから、その通りにした方が身のためだぞ。", "俺の優しさに甘えるのもいい加減にしておけ。 $%s だ。", @@ -190,7 +935,7 @@ static cptr comment_3b_B[MAX_COMMENT_3B] = { #endif #define MAX_COMMENT_4A 4 -static cptr comment_4a[MAX_COMMENT_4A] = +static concptr comment_4a[MAX_COMMENT_4A] = { #ifdef JP "もうたくさんだ!何度も私をわずらわせないでくれ!", @@ -208,7 +953,7 @@ static cptr comment_4a[MAX_COMMENT_4A] = #ifdef JP /*! ブラックマーケット用追加メッセージ(怒りの頂点) */ -static cptr comment_4a_B[MAX_COMMENT_4A] = { +static concptr comment_4a_B[MAX_COMMENT_4A] = { "なめやがって!温厚な俺様でも限界があるってことを知れ!", "俺をここまで怒らせて...命があるだけでもありがたいと思え!", "ふざけてるのか!冷やかしなら相手を見てからにしろ!", @@ -217,7 +962,7 @@ static cptr comment_4a_B[MAX_COMMENT_4A] = { #endif #define MAX_COMMENT_4B 4 -static cptr comment_4b[MAX_COMMENT_4B] = +static concptr comment_4b[MAX_COMMENT_4B] = { #ifdef JP "店から出て行け!", @@ -235,7 +980,7 @@ static cptr comment_4b[MAX_COMMENT_4B] = #ifdef JP /*! ブラックマーケット用追加メッセージ(追い出し) */ -static cptr comment_4b_B[MAX_COMMENT_4B] = { +static concptr comment_4b_B[MAX_COMMENT_4B] = { "二度とうちに来るんじゃねえ!!", "とっとと、どっかへ失せろ!!", "今すぐ消え失せろ!!", @@ -244,7 +989,7 @@ static cptr comment_4b_B[MAX_COMMENT_4B] = { #endif #define MAX_COMMENT_5 8 -static cptr comment_5[MAX_COMMENT_5] = +static concptr comment_5[MAX_COMMENT_5] = { #ifdef JP "考え直してくれ。", @@ -270,7 +1015,7 @@ static cptr comment_5[MAX_COMMENT_5] = #ifdef JP /*! ブラックマーケット用追加メッセージ(怒り) */ -static cptr comment_5_B[MAX_COMMENT_5] = { +static concptr comment_5_B[MAX_COMMENT_5] = { "時間の無駄だな、これは。", "厄介なお客様だな!", "話して分かる相手じゃなさそうだ。", @@ -283,7 +1028,7 @@ static cptr comment_5_B[MAX_COMMENT_5] = { #endif #define MAX_COMMENT_6 4 -static cptr comment_6[MAX_COMMENT_6] = +static concptr comment_6[MAX_COMMENT_6] = { #ifdef JP "どうやら聞き間違えたらしい。", @@ -299,6 +1044,563 @@ static cptr comment_6[MAX_COMMENT_6] = }; +/*** Initialize others ***/ + +/*! + * 店舗で販売するオブジェクトを定義する / Hack -- Objects sold in the stores -- by tval/sval pair. + */ +byte store_table[MAX_STORES][STORE_CHOICES][2] = +{ + { + /* General Store */ + + { TV_FOOD, SV_FOOD_RATION }, + { TV_FOOD, SV_FOOD_RATION }, + { TV_FOOD, SV_FOOD_RATION }, + { TV_FOOD, SV_FOOD_RATION }, + + { TV_FOOD, SV_FOOD_RATION }, + { TV_FOOD, SV_FOOD_BISCUIT }, + { TV_FOOD, SV_FOOD_JERKY }, + { TV_FOOD, SV_FOOD_JERKY }, + + { TV_FOOD, SV_FOOD_PINT_OF_WINE }, + { TV_FOOD, SV_FOOD_PINT_OF_ALE }, + { TV_LITE, SV_LITE_TORCH }, + { TV_LITE, SV_LITE_TORCH }, + + { TV_LITE, SV_LITE_TORCH }, + { TV_LITE, SV_LITE_TORCH }, + { TV_LITE, SV_LITE_LANTERN }, + { TV_LITE, SV_LITE_LANTERN }, + + { TV_FLASK, 0 }, + { TV_FLASK, 0 }, + { TV_FLASK, 0 }, + { TV_FLASK, 0 }, + + { TV_FLASK, 0 }, + { TV_FLASK, 0 }, + { TV_SPIKE, 0 }, + { TV_SPIKE, 0 }, + + { TV_SHOT, SV_AMMO_NORMAL }, + { TV_ARROW, SV_AMMO_NORMAL }, + { TV_BOLT, SV_AMMO_NORMAL }, + { TV_DIGGING, SV_SHOVEL }, + + { TV_DIGGING, SV_PICK }, + { TV_CLOAK, SV_CLOAK }, + { TV_CLOAK, SV_CLOAK }, + { TV_CLOAK, SV_FUR_CLOAK }, + + { TV_FOOD, SV_FOOD_RATION }, + { TV_FOOD, SV_FOOD_RATION }, + { TV_FOOD, SV_FOOD_RATION }, + { TV_FOOD, SV_FOOD_RATION }, + + { TV_POTION, SV_POTION_WATER }, + { TV_POTION, SV_POTION_WATER }, + { TV_LITE, SV_LITE_LANTERN }, + { TV_LITE, SV_LITE_LANTERN }, + + { TV_FOOD, SV_FOOD_WAYBREAD }, + { TV_FOOD, SV_FOOD_WAYBREAD }, + { TV_CAPTURE, 0 }, + { TV_FIGURINE, 0 }, + + { TV_SHOT, SV_AMMO_NORMAL }, + { TV_ARROW, SV_AMMO_NORMAL }, + { TV_BOLT, SV_AMMO_NORMAL }, + { TV_DIGGING, SV_SHOVEL } + }, + + { + /* Armoury */ + + { TV_BOOTS, SV_PAIR_OF_SOFT_LEATHER_BOOTS }, + { TV_BOOTS, SV_PAIR_OF_SOFT_LEATHER_BOOTS }, + { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS }, + { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS }, + + { TV_HELM, SV_HARD_LEATHER_CAP }, + { TV_HELM, SV_HARD_LEATHER_CAP }, + { TV_HELM, SV_METAL_CAP }, + { TV_HELM, SV_IRON_HELM }, + + { TV_SOFT_ARMOR, SV_ROBE }, + { TV_SOFT_ARMOR, SV_ROBE }, + { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR }, + { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR }, + + { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR }, + { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR }, + { TV_SOFT_ARMOR, SV_HARD_STUDDED_LEATHER }, + { TV_SOFT_ARMOR, SV_HARD_STUDDED_LEATHER }, + + { TV_SOFT_ARMOR, SV_RHINO_HIDE_ARMOR }, + { TV_SOFT_ARMOR, SV_LEATHER_SCALE_MAIL }, + { TV_HARD_ARMOR, SV_METAL_SCALE_MAIL }, + { TV_HARD_ARMOR, SV_CHAIN_MAIL }, + + { TV_HARD_ARMOR, SV_DOUBLE_RING_MAIL }, + { TV_HARD_ARMOR, SV_AUGMENTED_CHAIN_MAIL }, + { TV_HARD_ARMOR, SV_BAR_CHAIN_MAIL }, + { TV_HARD_ARMOR, SV_DOUBLE_CHAIN_MAIL }, + + { TV_HARD_ARMOR, SV_METAL_BRIGANDINE_ARMOUR }, + { TV_HARD_ARMOR, SV_SPLINT_MAIL }, + { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES }, + { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES }, + + { TV_GLOVES, SV_SET_OF_GAUNTLETS }, + { TV_SHIELD, SV_SMALL_LEATHER_SHIELD }, + { TV_SHIELD, SV_LARGE_LEATHER_SHIELD }, + { TV_SHIELD, SV_SMALL_METAL_SHIELD }, + + { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS }, + { TV_BOOTS, SV_PAIR_OF_HARD_LEATHER_BOOTS }, + { TV_HELM, SV_HARD_LEATHER_CAP }, + { TV_HELM, SV_HARD_LEATHER_CAP }, + + { TV_SOFT_ARMOR, SV_ROBE }, + { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR }, + { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR }, + { TV_SOFT_ARMOR, SV_HARD_LEATHER_ARMOR }, + + { TV_SOFT_ARMOR, SV_LEATHER_JACK }, + { TV_HARD_ARMOR, SV_METAL_SCALE_MAIL }, + { TV_HARD_ARMOR, SV_CHAIN_MAIL }, + { TV_HARD_ARMOR, SV_CHAIN_MAIL }, + + { TV_GLOVES, SV_SET_OF_LEATHER_GLOVES }, + { TV_GLOVES, SV_SET_OF_GAUNTLETS }, + { TV_SHIELD, SV_SMALL_LEATHER_SHIELD }, + { TV_SHIELD, SV_SMALL_LEATHER_SHIELD } + }, + + { + /* Weaponsmith */ + + { TV_SWORD, SV_DAGGER }, + { TV_SWORD, SV_MAIN_GAUCHE }, + { TV_SWORD, SV_RAPIER }, + { TV_SWORD, SV_SMALL_SWORD }, + + { TV_SWORD, SV_SHORT_SWORD }, + { TV_SWORD, SV_SABRE }, + { TV_SWORD, SV_CUTLASS }, + { TV_SWORD, SV_TULWAR }, + + { TV_SWORD, SV_BROAD_SWORD }, + { TV_SWORD, SV_LONG_SWORD }, + { TV_SWORD, SV_SCIMITAR }, + { TV_SWORD, SV_KATANA }, + + { TV_SWORD, SV_BASTARD_SWORD }, + { TV_POLEARM, SV_SPEAR }, + { TV_POLEARM, SV_AWL_PIKE }, + { TV_POLEARM, SV_TRIDENT }, + + { TV_POLEARM, SV_PIKE }, + { TV_POLEARM, SV_BEAKED_AXE }, + { TV_POLEARM, SV_BROAD_AXE }, + { TV_POLEARM, SV_LANCE }, + + { TV_POLEARM, SV_BATTLE_AXE }, + { TV_POLEARM, SV_HATCHET }, + { TV_BOW, SV_SLING }, + { TV_BOW, SV_SHORT_BOW }, + + { TV_BOW, SV_LIGHT_XBOW }, + { TV_SHOT, SV_AMMO_NORMAL }, + { TV_SHOT, SV_AMMO_NORMAL }, + { TV_ARROW, SV_AMMO_NORMAL }, + + { TV_ARROW, SV_AMMO_NORMAL }, + { TV_BOLT, SV_AMMO_NORMAL }, + { TV_BOLT, SV_AMMO_NORMAL }, + { TV_BOW, SV_LIGHT_XBOW }, + + { TV_ARROW, SV_AMMO_NORMAL }, + { TV_BOLT, SV_AMMO_NORMAL }, + { TV_BOW, SV_SHORT_BOW }, + { TV_BOW, SV_LIGHT_XBOW }, + + { TV_SWORD, SV_DAGGER }, + { TV_SWORD, SV_TANTO }, + { TV_SWORD, SV_RAPIER }, + { TV_SWORD, SV_SMALL_SWORD }, + + { TV_SWORD, SV_SHORT_SWORD }, + { TV_SWORD, SV_LONG_SWORD }, + { TV_SWORD, SV_SCIMITAR }, + { TV_SWORD, SV_BROAD_SWORD }, + + { TV_HISSATSU_BOOK, 0 }, + { TV_HISSATSU_BOOK, 0 }, + { TV_HISSATSU_BOOK, 1 }, + { TV_HISSATSU_BOOK, 1 }, + }, + + { + /* Temple */ + + { TV_HAFTED, SV_NUNCHAKU }, + { TV_HAFTED, SV_QUARTERSTAFF }, + { TV_HAFTED, SV_MACE }, + { TV_HAFTED, SV_BO_STAFF }, + + { TV_HAFTED, SV_WAR_HAMMER }, + { TV_HAFTED, SV_WAR_HAMMER }, + { TV_HAFTED, SV_MORNING_STAR }, + { TV_HAFTED, SV_FLAIL }, + + { TV_HAFTED, SV_LEAD_FILLED_MACE }, + { TV_SCROLL, SV_SCROLL_REMOVE_CURSE }, + { TV_SCROLL, SV_SCROLL_BLESSING }, + { TV_SCROLL, SV_SCROLL_HOLY_CHANT }, + + { TV_POTION, SV_POTION_HEROISM }, + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + + { TV_POTION, SV_POTION_CURE_LIGHT }, + { TV_POTION, SV_POTION_CURE_SERIOUS }, + { TV_POTION, SV_POTION_CURE_SERIOUS }, + { TV_POTION, SV_POTION_CURE_CRITICAL }, + + { TV_POTION, SV_POTION_CURE_CRITICAL }, + { TV_POTION, SV_POTION_RESTORE_EXP }, + { TV_POTION, SV_POTION_RESTORE_EXP }, + { TV_POTION, SV_POTION_RESTORE_EXP }, + + { TV_LIFE_BOOK, 0 }, + { TV_LIFE_BOOK, 0 }, + { TV_LIFE_BOOK, 1 }, + { TV_LIFE_BOOK, 1 }, + + { TV_CRUSADE_BOOK, 0 }, + { TV_CRUSADE_BOOK, 0 }, + { TV_CRUSADE_BOOK, 1 }, + { TV_CRUSADE_BOOK, 1 }, + + { TV_HAFTED, SV_WHIP }, + { TV_HAFTED, SV_MACE }, + { TV_HAFTED, SV_BALL_AND_CHAIN }, + { TV_HAFTED, SV_WAR_HAMMER }, + + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + { TV_POTION, SV_POTION_CURE_CRITICAL }, + + { TV_POTION, SV_POTION_CURE_CRITICAL }, + { TV_POTION, SV_POTION_RESTORE_EXP }, + + { TV_FIGURINE, 0 }, + { TV_STATUE, SV_ANY }, + + { TV_SCROLL, SV_SCROLL_REMOVE_CURSE }, + { TV_SCROLL, SV_SCROLL_REMOVE_CURSE }, + { TV_SCROLL, SV_SCROLL_STAR_REMOVE_CURSE }, + { TV_SCROLL, SV_SCROLL_STAR_REMOVE_CURSE } + }, + + { + /* Alchemy shop */ + + { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_HIT }, + { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_DAM }, + { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR }, + { TV_SCROLL, SV_SCROLL_IDENTIFY }, + + { TV_SCROLL, SV_SCROLL_IDENTIFY }, + { TV_SCROLL, SV_SCROLL_IDENTIFY }, + { TV_SCROLL, SV_SCROLL_IDENTIFY }, + { TV_SCROLL, SV_SCROLL_LIGHT }, + + { TV_SCROLL, SV_SCROLL_PHASE_DOOR }, + { TV_SCROLL, SV_SCROLL_PHASE_DOOR }, + { TV_SCROLL, SV_SCROLL_TELEPORT }, + { TV_SCROLL, SV_SCROLL_MONSTER_CONFUSION }, + + { TV_SCROLL, SV_SCROLL_MAPPING }, + { TV_SCROLL, SV_SCROLL_DETECT_GOLD }, + { TV_SCROLL, SV_SCROLL_DETECT_ITEM }, + { TV_SCROLL, SV_SCROLL_DETECT_TRAP }, + + { TV_SCROLL, SV_SCROLL_DETECT_INVIS }, + { TV_SCROLL, SV_SCROLL_RECHARGING }, + { TV_SCROLL, SV_SCROLL_TELEPORT }, + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + { TV_SCROLL, SV_SCROLL_WORD_OF_RECALL }, + { TV_SCROLL, SV_SCROLL_TELEPORT }, + + { TV_SCROLL, SV_SCROLL_TELEPORT }, + { TV_POTION, SV_POTION_RES_STR }, + { TV_POTION, SV_POTION_RES_INT }, + { TV_POTION, SV_POTION_RES_WIS }, + + { TV_POTION, SV_POTION_RES_DEX }, + { TV_POTION, SV_POTION_RES_CON }, + { TV_POTION, SV_POTION_RES_CHR }, + { TV_SCROLL, SV_SCROLL_IDENTIFY }, + + { TV_SCROLL, SV_SCROLL_IDENTIFY }, + { TV_SCROLL, SV_SCROLL_STAR_IDENTIFY }, /* Yep, occasionally! */ + { TV_SCROLL, SV_SCROLL_STAR_IDENTIFY }, + { TV_SCROLL, SV_SCROLL_LIGHT }, + + { TV_POTION, SV_POTION_RES_STR }, + { TV_POTION, SV_POTION_RES_INT }, + { TV_POTION, SV_POTION_RES_WIS }, + { TV_POTION, SV_POTION_RES_DEX }, + + { TV_POTION, SV_POTION_RES_CON }, + { TV_POTION, SV_POTION_RES_CHR }, + { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR }, + { TV_SCROLL, SV_SCROLL_ENCHANT_ARMOR }, + + { TV_SCROLL, SV_SCROLL_RECHARGING }, + { TV_SCROLL, SV_SCROLL_PHASE_DOOR }, + { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_HIT }, + { TV_SCROLL, SV_SCROLL_ENCHANT_WEAPON_TO_DAM }, + + }, + + { + /* Magic-User store */ + + { TV_RING, SV_RING_PROTECTION }, + { TV_RING, SV_RING_LEVITATION_FALL }, + { TV_RING, SV_RING_PROTECTION }, + { TV_RING, SV_RING_RESIST_FIRE }, + + { TV_RING, SV_RING_RESIST_COLD }, + { TV_AMULET, SV_AMULET_CHARISMA }, + { TV_RING, SV_RING_WARNING }, + { TV_AMULET, SV_AMULET_RESIST_ACID }, + + { TV_AMULET, SV_AMULET_SEARCHING }, + { TV_WAND, SV_WAND_SLOW_MONSTER }, + { TV_WAND, SV_WAND_CONFUSE_MONSTER }, + { TV_WAND, SV_WAND_SLEEP_MONSTER }, + + { TV_WAND, SV_WAND_MAGIC_MISSILE }, + { TV_WAND, SV_WAND_STINKING_CLOUD }, + { TV_WAND, SV_WAND_WONDER }, + { TV_WAND, SV_WAND_DISARMING }, + + { TV_STAFF, SV_STAFF_LITE }, + { TV_STAFF, SV_STAFF_MAPPING }, + { TV_STAFF, SV_STAFF_DETECT_TRAP }, + { TV_STAFF, SV_STAFF_DETECT_DOOR }, + + { TV_STAFF, SV_STAFF_DETECT_GOLD }, + { TV_STAFF, SV_STAFF_DETECT_ITEM }, + { TV_STAFF, SV_STAFF_DETECT_INVIS }, + { TV_STAFF, SV_STAFF_DETECT_EVIL }, + + { TV_STAFF, SV_STAFF_TELEPORTATION }, + { TV_STAFF, SV_STAFF_TELEPORTATION }, + { TV_STAFF, SV_STAFF_TELEPORTATION }, + { TV_STAFF, SV_STAFF_TELEPORTATION }, + + { TV_STAFF, SV_STAFF_IDENTIFY }, + { TV_STAFF, SV_STAFF_IDENTIFY }, + { TV_STAFF, SV_STAFF_IDENTIFY }, + + { TV_STAFF, SV_STAFF_IDENTIFY }, + { TV_STAFF, SV_STAFF_REMOVE_CURSE }, + { TV_STAFF, SV_STAFF_CURE_LIGHT }, + { TV_STAFF, SV_STAFF_PROBING }, + + { TV_FIGURINE, 0 }, + + { TV_SORCERY_BOOK, 0 }, + { TV_SORCERY_BOOK, 0 }, + { TV_SORCERY_BOOK, 1 }, + { TV_SORCERY_BOOK, 1 }, + + { TV_ARCANE_BOOK, 0 }, + { TV_ARCANE_BOOK, 0 }, + { TV_ARCANE_BOOK, 1 }, + { TV_ARCANE_BOOK, 1 }, + + { TV_ARCANE_BOOK, 2 }, + { TV_ARCANE_BOOK, 2 }, + { TV_ARCANE_BOOK, 3 }, + { TV_ARCANE_BOOK, 3 }, + + }, + + { + /* Black Market (unused) */ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 } + }, + + { + /* Home (unused) */ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 } + }, + + { + /* Bookstore */ + { TV_SORCERY_BOOK, 0 }, + { TV_SORCERY_BOOK, 0 }, + { TV_SORCERY_BOOK, 1 }, + { TV_SORCERY_BOOK, 1 }, + + { TV_NATURE_BOOK, 0 }, + { TV_NATURE_BOOK, 0 }, + { TV_NATURE_BOOK, 1 }, + { TV_NATURE_BOOK, 1 }, + + { TV_CHAOS_BOOK, 0 }, + { TV_CHAOS_BOOK, 0 }, + { TV_CHAOS_BOOK, 1 }, + { TV_CHAOS_BOOK, 1 }, + + { TV_DEATH_BOOK, 0 }, + { TV_DEATH_BOOK, 0 }, + { TV_DEATH_BOOK, 1 }, + { TV_DEATH_BOOK, 1 }, + + { TV_TRUMP_BOOK, 0 }, /* +16 */ + { TV_TRUMP_BOOK, 0 }, + { TV_TRUMP_BOOK, 1 }, + { TV_TRUMP_BOOK, 1 }, + + { TV_ARCANE_BOOK, 0 }, + { TV_ARCANE_BOOK, 1 }, + { TV_ARCANE_BOOK, 2 }, + { TV_ARCANE_BOOK, 3 }, + + { TV_CRAFT_BOOK, 0 }, + { TV_CRAFT_BOOK, 0 }, + { TV_CRAFT_BOOK, 1 }, + { TV_CRAFT_BOOK, 1 }, + + { TV_DAEMON_BOOK, 0 }, + { TV_DAEMON_BOOK, 0 }, + { TV_DAEMON_BOOK, 1 }, + { TV_DAEMON_BOOK, 1 }, + + { TV_MUSIC_BOOK, 0 }, + { TV_MUSIC_BOOK, 0 }, + { TV_MUSIC_BOOK, 1 }, + { TV_MUSIC_BOOK, 1 }, + + { TV_HEX_BOOK, 0 }, + { TV_HEX_BOOK, 0 }, + { TV_HEX_BOOK, 1 }, + { TV_HEX_BOOK, 1 }, + }, + + { + /* Museum (unused) */ + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 }, + { 0, 0 } + } +}; + /*! @@ -340,7 +1642,7 @@ static void say_comment_1(void) * @param annoyed 店主のいらつき度 * @return なし */ -static void say_comment_2(s32b value, int annoyed) +static void say_comment_2(PRICE value, int annoyed) { char tmp_val[80]; @@ -381,7 +1683,7 @@ static void say_comment_2(s32b value, int annoyed) * @param annoyed 店主のいらつき度 * @return なし */ -static void say_comment_3(s32b value, int annoyed) +static void say_comment_3(PRICE value, int annoyed) { char tmp_val[80]; @@ -475,7 +1777,7 @@ static void say_comment_6(void) #define MAX_COMMENT_7A 4 -static cptr comment_7a[MAX_COMMENT_7A] = +static concptr comment_7a[MAX_COMMENT_7A] = { #ifdef JP "うわああぁぁ!", @@ -493,7 +1795,7 @@ static cptr comment_7a[MAX_COMMENT_7A] = #define MAX_COMMENT_7B 4 -static cptr comment_7b[MAX_COMMENT_7B] = +static concptr comment_7b[MAX_COMMENT_7B] = { #ifdef JP "くそう!", @@ -511,7 +1813,7 @@ static cptr comment_7b[MAX_COMMENT_7B] = #define MAX_COMMENT_7C 4 -static cptr comment_7c[MAX_COMMENT_7C] = +static concptr comment_7c[MAX_COMMENT_7C] = { #ifdef JP "すばらしい!", @@ -529,7 +1831,7 @@ static cptr comment_7c[MAX_COMMENT_7C] = #define MAX_COMMENT_7D 4 -static cptr comment_7d[MAX_COMMENT_7D] = +static concptr comment_7d[MAX_COMMENT_7D] = { #ifdef JP "やっほぅ!", @@ -556,65 +1858,42 @@ static cptr comment_7d[MAX_COMMENT_7D] = * @details * We paid "price", it was worth "value", and we thought it was worth "guess" */ -static void purchase_analyze(s32b price, s32b value, s32b guess) +static void purchase_analyze(PRICE price, PRICE value, PRICE guess) { /* Item was worthless, but we bought it */ if ((value <= 0) && (price > value)) { - /* Comment */ msg_print(comment_7a[randint0(MAX_COMMENT_7A)]); - chg_virtue(V_HONOUR, -1); chg_virtue(V_JUSTICE, -1); - - /* Sound */ sound(SOUND_STORE1); } /* Item was cheaper than we thought, and we paid more than necessary */ else if ((value < guess) && (price > value)) { - /* Comment */ msg_print(comment_7b[randint0(MAX_COMMENT_7B)]); - chg_virtue(V_JUSTICE, -1); - if (one_in_(4)) - chg_virtue(V_HONOUR, -1); - - /* Sound */ + if (one_in_(4)) chg_virtue(V_HONOUR, -1); sound(SOUND_STORE2); } /* Item was a good bargain, and we got away with it */ else if ((value > guess) && (value < (4 * guess)) && (price < value)) { - /* Comment */ msg_print(comment_7c[randint0(MAX_COMMENT_7C)]); - - if (one_in_(4)) - chg_virtue(V_HONOUR, -1); - else if (one_in_(4)) - chg_virtue(V_HONOUR, 1); - - /* Sound */ + if (one_in_(4)) chg_virtue(V_HONOUR, -1); + else if (one_in_(4)) chg_virtue(V_HONOUR, 1); sound(SOUND_STORE3); } /* Item was a great bargain, and we got away with it */ else if ((value > guess) && (price < value)) { - /* Comment */ msg_print(comment_7d[randint0(MAX_COMMENT_7D)]); - - if (one_in_(2)) - chg_virtue(V_HONOUR, -1); - if (one_in_(4)) - chg_virtue(V_HONOUR, 1); - - if (10 * price < value) - chg_virtue(V_SACRIFICE, 1); - - /* Sound */ + if (one_in_(2)) chg_virtue(V_HONOUR, -1); + if (one_in_(4)) chg_virtue(V_HONOUR, 1); + if (10 * price < value) chg_virtue(V_SACRIFICE, 1); sound(SOUND_STORE4); } } @@ -1316,7 +2595,7 @@ static int store_check_num(object_type *o_ptr) */ static bool is_blessed(object_type *o_ptr) { - u32b flgs[TR_FLAG_SIZE]; + BIT_FLAGS flgs[TR_FLAG_SIZE]; object_flags(o_ptr, flgs); if (have_flag(flgs, TR_BLESSED)) return (TRUE); else return (FALSE); @@ -1538,7 +2817,7 @@ static bool store_will_buy(object_type *o_ptr) } } - /* XXX XXX XXX Ignore "worthless" items */ + /* Ignore "worthless" items */ if (object_value(o_ptr) <= 0) return (FALSE); /* Assume okay */ @@ -1576,7 +2855,6 @@ bool combine_and_reorder_home(int store_num) /* Combine the items in the home (backwards) */ for (i = st_ptr->stock_num - 1; i > 0; i--) { - /* Get the item */ o_ptr = &st_ptr->stock[i]; /* Skip empty items */ @@ -1587,7 +2865,6 @@ bool combine_and_reorder_home(int store_num) { int max_num; - /* Get the item */ j_ptr = &st_ptr->stock[j]; /* Skip empty items */ @@ -1646,8 +2923,6 @@ bool combine_and_reorder_home(int store_num) /* Take note */ combined = TRUE; - - /* Done */ break; } } @@ -1660,7 +2935,6 @@ bool combine_and_reorder_home(int store_num) /* Re-order the items in the home (forwards) */ for (i = 0; i < st_ptr->stock_num; i++) { - /* Get the item */ o_ptr = &st_ptr->stock[i]; /* Skip empty slots */ @@ -1680,8 +2954,6 @@ bool combine_and_reorder_home(int store_num) /* Take note */ flag = TRUE; - - /* Get local object */ j_ptr = &forge; /* Save a copy of the moving item */ @@ -1932,12 +3204,11 @@ static int store_carry(object_type *o_ptr) * * @todo numは本来ITEM_NUMBER型にしたい。 */ -static void store_item_increase(int item, int num) +static void store_item_increase(INVENTORY_IDX item, int num) { int cnt; object_type *o_ptr; - /* Get the item */ o_ptr = &st_ptr->stock[item]; /* Verify the number */ @@ -1957,12 +3228,11 @@ static void store_item_increase(int item, int num) * @param item 削除したいアイテムのID * @return なし */ -static void store_item_optimize(int item) +static void store_item_optimize(INVENTORY_IDX item) { int j; object_type *o_ptr; - /* Get the item */ o_ptr = &st_ptr->stock[item]; /* Must exist */ @@ -2039,10 +3309,11 @@ static bool black_market_crap(object_type *o_ptr) */ static void store_delete(void) { - int what, num; + INVENTORY_IDX what; + int num; /* Pick a random slot */ - what = randint0(st_ptr->stock_num); + what = (INVENTORY_IDX)randint0(st_ptr->stock_num); /* Determine how many items are here */ num = st_ptr->stock[what].number; @@ -2119,8 +3390,6 @@ static void store_create(void) level = rand_range(1, STORE_OBJ_LEVEL); } - - /* Get local object */ q_ptr = &forge; /* Create a new object of the chosen kind */ @@ -2188,7 +3457,7 @@ static void store_create(void) * @param minprice アイテムの最低販売価格 * @return 割引を禁止するならTRUEを返す。 */ -static bool noneedtobargain(s32b minprice) +static bool noneedtobargain(PRICE minprice) { s32b good = st_ptr->good_buy; s32b bad = st_ptr->bad_buy; @@ -2215,7 +3484,7 @@ static bool noneedtobargain(s32b minprice) * @param num 売買数 * @return なし */ -static void updatebargain(s32b price, s32b minprice, int num) +static void updatebargain(PRICE price, PRICE minprice, int num) { /* Hack -- auto-haggle */ if (!manual_haggle) return; @@ -2254,16 +3523,14 @@ static void updatebargain(s32b price, s32b minprice, int num) static void display_entry(int pos) { int i, cur_col; - object_type *o_ptr; + object_type *o_ptr; s32b x; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; char out_val[160]; - int maxwid = 75; - /* Get the item */ o_ptr = &st_ptr->stock[pos]; /* Get the "offset" */ @@ -2276,8 +3543,8 @@ static void display_entry(int pos) cur_col = 3; if (show_item_graph) { - byte a = object_attr(o_ptr); - char c = object_char(o_ptr); + TERM_COLOR a = object_attr(o_ptr); + SYMBOL_CODE c = object_char(o_ptr); Term_queue_bigchar(cur_col, i + 6, a, c, 0, 0); if (use_bigtile) cur_col++; @@ -2293,18 +3560,17 @@ static void display_entry(int pos) /* Leave room for weights, if necessary -DRS- */ if (show_weights) maxwid -= 10; - /* Describe the object */ object_desc(o_name, o_ptr, 0); o_name[maxwid] = '\0'; c_put_str(tval_to_attr[o_ptr->tval], o_name, i+6, cur_col); /* Show weights */ - if (show_weights) + if(show_weights) { /* Only show the weight of an individual item */ - int wgt = o_ptr->weight; + WEIGHT wgt = o_ptr->weight; #ifdef JP - sprintf(out_val, "%3d.%1d kg", lbtokg1(wgt) , lbtokg2(wgt) ); + sprintf(out_val, "%3d.%1d kg", lbtokg1(wgt) , lbtokg2(wgt)); put_str(out_val, i+6, 67); #else (void)sprintf(out_val, "%3d.%d lb", wgt / 10, wgt % 10); @@ -2485,38 +3751,21 @@ static void display_store(void) { char buf[80]; - - /* Clear screen */ Term_clear(); /* The "Home" is special */ if (cur_store_num == STORE_HOME) { /* Put the owner name */ -#ifdef JP - put_str("我が家", 3, 31); -#else - put_str("Your Home", 3, 30); -#endif - + put_str(_("我が家", "Your Home"), 3, 31); /* Label the item descriptions */ -#ifdef JP - put_str("アイテムの一覧", 5, 4); -#else - put_str("Item Description", 5, 3); -#endif - + put_str(_("アイテムの一覧", "Item Description"), 5, 4); /* If showing weights, show label */ if (show_weights) { -#ifdef JP - put_str("重さ", 5, 72); -#else - put_str("Weight", 5, 70); -#endif - + put_str(_(" 重さ", "Weight"), 5, 70); } } @@ -2524,39 +3773,24 @@ static void display_store(void) else if (cur_store_num == STORE_MUSEUM) { /* Put the owner name */ -#ifdef JP - put_str("博物館", 3, 31); -#else - put_str("Museum", 3, 30); -#endif - + put_str(_("博物館", "Museum"), 3, 31); /* Label the item descriptions */ -#ifdef JP - put_str("アイテムの一覧", 5, 4); -#else - put_str("Item Description", 5, 3); -#endif - + put_str(_("アイテムの一覧", "Item Description"), 5, 4); /* If showing weights, show label */ if (show_weights) { -#ifdef JP - put_str("重さ", 5, 72); -#else - put_str("Weight", 5, 70); -#endif - + put_str(_(" 重さ", "Weight"), 5, 70); } } /* Normal stores */ else { - cptr store_name = (f_name + f_info[cur_store_feat].name); - cptr owner_name = (ot_ptr->owner_name); - cptr race_name = race_info[ot_ptr->owner_race].title; + concptr store_name = (f_name + f_info[cur_store_feat].name); + concptr owner_name = (ot_ptr->owner_name); + concptr race_name = race_info[ot_ptr->owner_race].title; /* Put the owner name and race */ sprintf(buf, "%s (%s)", owner_name, race_name); @@ -2567,31 +3801,17 @@ static void display_store(void) prt(buf, 3, 50); /* Label the item descriptions */ -#ifdef JP - put_str("商品の一覧", 5, 7); -#else - put_str("Item Description", 5, 3); -#endif + put_str(_("商品の一覧", "Item Description"), 5, 5); /* If showing weights, show label */ if (show_weights) { -#ifdef JP - put_str("重さ", 5, 62); -#else - put_str("Weight", 5, 60); -#endif - + put_str(_(" 重さ", "Weight"), 5, 60); } /* Label the asking price (in stores) */ -#ifdef JP - put_str("価格", 5, 73); -#else - put_str("Price", 5, 72); -#endif - + put_str(_(" 価格", "Price"), 5, 72); } /* Display the current gold */ @@ -2612,13 +3832,11 @@ static void display_store(void) * @param j 選択範囲の最大値 * @return 実際に選択したらTRUE、キャンセルしたらFALSE */ -static int get_stock(COMMAND_CODE *com_val, cptr pmt, int i, int j) +static int get_stock(COMMAND_CODE *com_val, concptr pmt, int i, int j) { - char command; - char out_val[160]; - char lo, hi; - -#ifdef ALLOW_REPEAT /* TNB */ + char command; + char out_val[160]; + char lo, hi; /* Get the item index */ if (repeat_pull(com_val)) @@ -2631,12 +3849,9 @@ static int get_stock(COMMAND_CODE *com_val, cptr pmt, int i, int j) } } -#endif /* ALLOW_REPEAT -- TNB */ - - /* Paranoia XXX XXX XXX */ + /* Paranoia */ msg_print(NULL); - /* Assume failure */ *com_val = (-1); @@ -2676,22 +3891,16 @@ static int get_stock(COMMAND_CODE *com_val, cptr pmt, int i, int j) break; } - /* Oops */ bell(); } /* Clear the prompt */ prt("", 0, 0); - /* Cancel */ if (command == ESCAPE) return (FALSE); -#ifdef ALLOW_REPEAT /* TNB */ - repeat_push(*com_val); -#endif /* ALLOW_REPEAT -- TNB */ - /* Success */ return (TRUE); } @@ -2780,11 +3989,11 @@ static s32b last_inc = 0L; * @param final 最終確定価格ならばTRUE * @return プレイヤーを締め出す場合TRUEを返す */ -static int get_haggle(cptr pmt, s32b *poffer, s32b price, int final) +static int get_haggle(concptr pmt, s32b *poffer, PRICE price, int final) { s32b i; - cptr p; + concptr p; char buf[128]; char out_val[160]; @@ -2834,7 +4043,7 @@ static int get_haggle(cptr pmt, s32b *poffer, s32b price, int final) } - /* Paranoia XXX XXX XXX */ + /* Paranoia */ msg_print(NULL); @@ -2939,9 +4148,9 @@ static int get_haggle(cptr pmt, s32b *poffer, s32b price, int final) * @return プレイヤーの価格に対して不服ならばTRUEを返す / * Return TRUE if offer is NOT okay */ -static bool receive_offer(cptr pmt, s32b *poffer, +static bool receive_offer(concptr pmt, s32b *poffer, s32b last_offer, int factor, - s32b price, int final) + PRICE price, int final) { /* Haggle till done */ while (TRUE) @@ -2984,9 +4193,9 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) bool cancel = FALSE; #ifdef JP - cptr pmt = "提示価格"; + concptr pmt = "提示価格"; #else - cptr pmt = "Asking"; + concptr pmt = "Asking"; #endif @@ -3171,10 +4380,8 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) } } - /* Cancel */ if (cancel) return (TRUE); - /* Update bargaining info */ updatebargain(*price, final_ask, o_ptr->number); /* Do not cancel */ @@ -3200,9 +4407,9 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) int annoyed = 0, final = FALSE; bool cancel = FALSE; #ifdef JP - cptr pmt = "提示金額"; + concptr pmt = "提示金額"; #else - cptr pmt = "Offer"; + concptr pmt = "Offer"; #endif char out_val[160]; @@ -3233,7 +4440,6 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) /* No reason to haggle */ if (final_ask >= purse) { - /* Message */ #ifdef JP msg_print("即座にこの金額にまとまった。"); #else @@ -3249,7 +4455,6 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) /* No need to haggle */ else if (noneed) { - /* Message */ #ifdef JP msg_print("結局この金額にまとまった。"); #else @@ -3290,7 +4495,7 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) final_ask *= o_ptr->number; - /* XXX XXX XXX Display commands */ + /* Display commands */ /* Haggling parameters */ min_per = ot_ptr->haggle_per; @@ -3414,10 +4619,8 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) } } - /* Cancel */ if (cancel) return (TRUE); - /* Update bargaining info */ updatebargain(*price, final_ask, o_ptr->number); /* Do not cancel */ @@ -3437,14 +4640,14 @@ static void store_purchase(void) ITEM_NUMBER amt; - s32b price, best; + PRICE price, best; object_type forge; object_type *j_ptr; object_type *o_ptr; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; char out_val[160]; @@ -3522,8 +4725,6 @@ static void store_purchase(void) /* Assume the player wants just one of them */ amt = 1; - - /* Get local object */ j_ptr = &forge; /* Get a copy of the object */ @@ -3541,12 +4742,7 @@ static void store_purchase(void) /* Hack -- require room in pack */ if (!inven_carry_okay(j_ptr)) { -#ifdef JP -msg_print("そんなにアイテムを持てない。"); -#else - msg_print("You cannot carry that many different items."); -#endif - + msg_print(_("そんなにアイテムを持てない。", "You cannot carry that many different items.")); return; } @@ -3560,12 +4756,7 @@ msg_print("そんなにアイテムを持てない。"); if ((cur_store_num != STORE_HOME) && (o_ptr->ident & IDENT_FIXED)) { -#ifdef JP -msg_format("一つにつき $%ldです。", (long)(best)); -#else - msg_format("That costs %ld gold per item.", (long)(best)); -#endif - + msg_format(_("一つにつき $%ldです。", "That costs %ld gold per item."), (long)(best)); } /* Get a quantity */ @@ -3574,8 +4765,6 @@ msg_format("一つにつき $%ldです。", (long)(best)); /* Allow user abort */ if (amt <= 0) return; } - - /* Get local object */ j_ptr = &forge; /* Get desired object */ @@ -3593,12 +4782,7 @@ msg_format("一つにつき $%ldです。", (long)(best)); /* Hack -- require room in pack */ if (!inven_carry_okay(j_ptr)) { -#ifdef JP - msg_print("ザックにそのアイテムを入れる隙間がない。"); -#else - msg_print("You cannot carry that many items."); -#endif - + msg_print(_("ザックにそのアイテムを入れる隙間がない。", "You cannot carry that many items.")); return; } @@ -3620,14 +4804,7 @@ msg_format("一つにつき $%ldです。", (long)(best)); { /* Describe the object (fully) */ object_desc(o_name, j_ptr, 0); - - /* Message */ -#ifdef JP - msg_format("%s(%c)を購入する。", o_name, I2A(item)); -#else - msg_format("Buying %s (%c).", o_name, I2A(item)); -#endif - + msg_format(_("%s(%c)を購入する。", "Buying %s (%c)."), o_name, I2A(item)); msg_print(NULL); /* Haggle for a final price */ @@ -3675,12 +4852,7 @@ msg_format("一つにつき $%ldです。", (long)(best)); /* Describe the transaction */ object_desc(o_name, j_ptr, 0); - /* Message */ -#ifdef JP -msg_format("%sを $%ldで購入しました。", o_name, (long)price); -#else - msg_format("You bought %s for %ld gold.", o_name, (long)price); -#endif + msg_format(_("%sを $%ldで購入しました。", "You bought %s for %ld gold."), o_name, (long)price); strcpy(record_o_name, o_name); record_turn = turn; @@ -3701,14 +4873,7 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); /* Describe the final result */ object_desc(o_name, &inventory[item_new], 0); - - /* Message */ -#ifdef JP - msg_format("%s(%c)を手に入れた。", o_name, index_to_label(item_new)); -#else - msg_format("You have %s (%c).", - o_name, index_to_label(item_new)); -#endif + msg_format(_("%s(%c)を手に入れた。", "You have %s (%c)."), o_name, index_to_label(item_new)); /* Auto-inscription */ autopick_alter_item(item_new, FALSE); @@ -3718,8 +4883,6 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); { o_ptr->pval -= j_ptr->pval; } - - /* Handle stuff */ handle_stuff(); /* Note how many slots the store used to have */ @@ -3736,13 +4899,7 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); if (one_in_(STORE_SHUFFLE)) { char buf[80]; - /* Message */ -#ifdef JP - msg_print("店主は引退した。"); -#else - msg_print("The shopkeeper retires."); -#endif - + msg_print(_("店主は引退した。", "The shopkeeper retires.")); /* Shuffle the store */ store_shuffle(cur_store_num); @@ -3759,13 +4916,7 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); /* Maintain */ else { - /* Message */ -#ifdef JP - msg_print("店主は新たな在庫を取り出した。"); -#else - msg_print("The shopkeeper brings out some new stock."); -#endif - + msg_print(_("店主は新たな在庫を取り出した。", "The shopkeeper brings out some new stock.")); } /* New inventory */ @@ -3777,8 +4928,6 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); /* Start over */ store_top = 0; - - /* Redraw everything */ display_inventory(); } @@ -3787,8 +4936,6 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); { /* Pick the correct screen */ if (store_top >= st_ptr->stock_num) store_top -= store_bottom; - - /* Redraw everything */ display_inventory(); } @@ -3804,12 +4951,7 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); else { /* Simple message (no insult) */ -#ifdef JP - msg_print("お金が足りません。"); -#else - msg_print("You do not have enough gold."); -#endif - + msg_print(_("お金が足りません。", "You do not have enough gold.")); } } } @@ -3828,15 +4970,7 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); /* Describe just the result */ object_desc(o_name, &inventory[item_new], 0); - /* Message */ -#ifdef JP - msg_format("%s(%c)を取った。", -#else - msg_format("You have %s (%c).", -#endif - o_name, index_to_label(item_new)); - - /* Handle stuff */ + msg_format(_("%s(%c)を取った。", "You have %s (%c)."), o_name, index_to_label(item_new)); handle_stuff(); /* Take note if we take the last one */ @@ -3851,7 +4985,6 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); /* Hack -- Item is still here */ if (i == st_ptr->stock_num) { - /* Redraw everything */ if (combined_or_reordered) display_inventory(); /* Redraw the item */ @@ -3866,8 +4999,6 @@ msg_format("%sを $%ldで購入しました。", o_name, (long)price); /* Nothing left on that screen */ else if (store_top >= st_ptr->stock_num) store_top -= store_bottom; - - /* Redraw everything */ display_inventory(); chg_virtue(V_SACRIFICE, 1); @@ -3891,103 +5022,55 @@ static void store_sell(void) int item_pos; int amt; - s32b price, value, dummy; + PRICE price, value, dummy; object_type forge; object_type *q_ptr; object_type *o_ptr; - cptr q, s; + concptr q, s; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; /* Prepare a prompt */ if (cur_store_num == STORE_HOME) -#ifdef JP - q = "どのアイテムを置きますか? "; -#else - q = "Drop which item? "; -#endif + q = _("どのアイテムを置きますか? ", "Drop which item? "); else if (cur_store_num == STORE_MUSEUM) -#ifdef JP - q = "どのアイテムを寄贈しますか? "; -#else - q = "Give which item? "; -#endif + q = _("どのアイテムを寄贈しますか? ", "Give which item? "); else -#ifdef JP - q = "どのアイテムを売りますか? "; -#else - q = "Sell which item? "; -#endif + q = _("どのアイテムを売りますか? ", "Sell which item? "); - - item_tester_no_ryoute = TRUE; /* Only allow items the store will buy */ item_tester_hook = store_will_buy; - /* Get an item */ /* 我が家でおかしなメッセージが出るオリジナルのバグを修正 */ if (cur_store_num == STORE_HOME) { -#ifdef JP - s = "置けるアイテムを持っていません。"; -#else - s = "You don't have any item to drop."; -#endif + s = _("置けるアイテムを持っていません。", "You don't have any item to drop."); } else if (cur_store_num == STORE_MUSEUM) { -#ifdef JP - s = "寄贈できるアイテムを持っていません。"; -#else - s = "You don't have any item to give."; -#endif - } - else - { -#ifdef JP - s = "欲しい物がないですねえ。"; -#else - s = "You have nothing that I want."; -#endif + s = _("寄贈できるアイテムを持っていません。", "You don't have any item to give."); } - - if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR))) return; - - /* Get the item (in the pack) */ - if (item >= 0) - { - o_ptr = &inventory[item]; - } - - /* Get the item (on the floor) */ else { - o_ptr = &o_list[0 - item]; + s = _("欲しい物がないですねえ。", "You have nothing that I want."); } + o_ptr = choose_object(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT)); + if (!o_ptr) return; /* Hack -- Cannot remove cursed items */ if ((item >= INVEN_RARM) && object_is_cursed(o_ptr)) { - /* Oops */ -#ifdef JP - msg_print("ふーむ、どうやらそれは呪われているようだね。"); -#else - msg_print("Hmmm, it seems to be cursed."); -#endif - - - /* Nope */ + msg_print(_("ふーむ、どうやらそれは呪われているようだね。", "Hmmm, it seems to be cursed.")); return; } - /* Assume one item */ amt = 1; @@ -4000,8 +5083,6 @@ static void store_sell(void) /* Allow user abort */ if (amt <= 0) return; } - - /* Get local object */ q_ptr = &forge; /* Get a copy of the object */ @@ -4033,25 +5114,13 @@ static void store_sell(void) if (!store_check_num(q_ptr)) { if (cur_store_num == STORE_HOME) -#ifdef JP - msg_print("我が家にはもう置く場所がない。"); -#else - msg_print("Your home is full."); -#endif + msg_print(_("我が家にはもう置く場所がない。", "Your home is full.")); else if (cur_store_num == STORE_MUSEUM) -#ifdef JP - msg_print("博物館はもう満杯だ。"); -#else - msg_print("Museum is full."); -#endif + msg_print(_("博物館はもう満杯だ。", "Museum is full.")); else -#ifdef JP - msg_print("すいませんが、店にはもう置く場所がありません。"); -#else - msg_print("I have not the room in my store to keep it."); -#endif + msg_print(_("すいませんが、店にはもう置く場所がありません。", "I have not the room in my store to keep it.")); return; } @@ -4061,11 +5130,7 @@ static void store_sell(void) if ((cur_store_num != STORE_HOME) && (cur_store_num != STORE_MUSEUM)) { /* Describe the transaction */ -#ifdef JP - msg_format("%s(%c)を売却する。", o_name, index_to_label(item)); -#else - msg_format("Selling %s (%c).", o_name, index_to_label(item)); -#endif + msg_format(_("%s(%c)を売却する。", "Selling %s (%c)."), o_name, index_to_label(item)); msg_print(NULL); @@ -4101,10 +5166,7 @@ static void store_sell(void) /* Get the "apparent" value */ dummy = object_value(q_ptr) * q_ptr->number; - /* Identify it */ identify_item(o_ptr); - - /* Get local object */ q_ptr = &forge; /* Get a copy of the object */ @@ -4132,11 +5194,7 @@ static void store_sell(void) object_desc(o_name, q_ptr, 0); /* Describe the result (in message buffer) */ -#ifdef JP -msg_format("%sを $%ldで売却しました。", o_name, (long)price); -#else - msg_format("You sold %s for %ld gold.", o_name, (long)price); -#endif + msg_format(_("%sを $%ldで売却しました。", "You sold %s for %ld gold."), o_name, (long)price); if (record_sell) do_cmd_write_nikki(NIKKI_SELL, 0, o_name); @@ -4164,8 +5222,6 @@ msg_format("%sを $%ldで売却しました。", o_name, (long)price); autopick_alter_item(item, FALSE); inven_item_optimize(item); - - /* Handle stuff */ handle_stuff(); /* The store gets that (known) item */ @@ -4188,48 +5244,27 @@ msg_format("%sを $%ldで売却しました。", o_name, (long)price); if (-1 == store_check_num(q_ptr)) { -#ifdef JP - msg_print("それと同じ品物は既に博物館にあるようです。"); -#else - msg_print("The same object as it is already in the Museum."); -#endif + msg_print(_("それと同じ品物は既に博物館にあるようです。", "The same object as it is already in the Museum.")); } else { -#ifdef JP - msg_print("博物館に寄贈したものは取り出すことができません!!"); -#else - msg_print("You cannot take items which is given to the Museum back!!"); -#endif + msg_print(_("博物館に寄贈したものは取り出すことができません!!", "You cannot take items which is given to the Museum back!!")); } -#ifdef JP - if (!get_check(format("本当に%sを寄贈しますか?", o2_name))) return; -#else - if (!get_check(format("Really give %s to the Museum? ", o2_name))) return; -#endif - /* Identify it */ + if (!get_check(format(_("本当に%sを寄贈しますか?", "Really give %s to the Museum? "), o2_name))) return; + identify_item(q_ptr); q_ptr->ident |= IDENT_MENTAL; /* Distribute charges of wands/rods */ distribute_charges(o_ptr, q_ptr, amt); - - /* Describe */ -#ifdef JP - msg_format("%sを置いた。(%c)", o_name, index_to_label(item)); -#else - msg_format("You drop %s (%c).", o_name, index_to_label(item)); -#endif - + msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item)); choice = 0; /* Take it from the players inventory */ inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); - - /* Handle stuff */ handle_stuff(); /* Let the home carry it */ @@ -4247,13 +5282,7 @@ msg_format("%sを $%ldで売却しました。", o_name, (long)price); { /* Distribute charges of wands/rods */ distribute_charges(o_ptr, q_ptr, amt); - - /* Describe */ -#ifdef JP - msg_format("%sを置いた。(%c)", o_name, index_to_label(item)); -#else - msg_format("You drop %s (%c).", o_name, index_to_label(item)); -#endif + msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item)); choice = 0; @@ -4261,8 +5290,6 @@ msg_format("%sを $%ldで売却しました。", o_name, (long)price); inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); - - /* Handle stuff */ handle_stuff(); /* Let the home carry it */ @@ -4294,38 +5321,21 @@ static void store_examine(void) int i; COMMAND_CODE item; object_type *o_ptr; - char o_name[MAX_NLEN]; + GAME_TEXT o_name[MAX_NLEN]; char out_val[160]; - /* Empty? */ if (st_ptr->stock_num <= 0) { if (cur_store_num == STORE_HOME) -#ifdef JP - msg_print("我が家には何も置いてありません。"); -#else - msg_print("Your home is empty."); -#endif - + msg_print(_("我が家には何も置いてありません。", "Your home is empty.")); else if (cur_store_num == STORE_MUSEUM) -#ifdef JP - msg_print("博物館には何も置いてありません。"); -#else - msg_print("Museum is empty."); -#endif - + msg_print(_("博物館には何も置いてありません。", "Museum is empty.")); else -#ifdef JP - msg_print("現在商品の在庫を切らしています。"); -#else - msg_print("I am currently out of stock."); -#endif - + msg_print(_("現在商品の在庫を切らしています。", "I am currently out of stock.")); return; } - /* Find the number of objects on this and following pages */ i = (st_ptr->stock_num - store_top); @@ -4333,12 +5343,7 @@ static void store_examine(void) if (i > store_bottom) i = store_bottom; /* Prompt */ -#ifdef JP -sprintf(out_val, "どれを調べますか?"); -#else - sprintf(out_val, "Which item do you want to examine? "); -#endif - + sprintf(out_val, _("どれを調べますか?", "Which item do you want to examine? ")); /* Get the item number to be examined */ if (!get_stock(&item, out_val, 0, i - 1)) return; @@ -4353,34 +5358,15 @@ sprintf(out_val, "どれを調べますか?"); if (!(o_ptr->ident & IDENT_MENTAL)) { /* This can only happen in the home */ -#ifdef JP -msg_print("このアイテムについて特に知っていることはない。"); -#else - msg_print("You have no special knowledge about that item."); -#endif - + msg_print(_("このアイテムについて特に知っていることはない。", "You have no special knowledge about that item.")); return; } - /* Description */ object_desc(o_name, o_ptr, 0); + msg_format(_("%sを調べている...", "Examining %s..."), o_name); - /* Describe */ -#ifdef JP -msg_format("%sを調べている...", o_name); -#else - msg_format("Examining %s...", o_name); -#endif - - - /* Describe it fully */ if (!screen_object(o_ptr, SCROBJ_FORCE_DETAIL)) -#ifdef JP -msg_print("特に変わったところはないようだ。"); -#else - msg_print("You see nothing special."); -#endif - + msg_print(_("特に変わったところはないようだ。", "You see nothing special.")); return; } @@ -4393,21 +5379,16 @@ msg_print("特に変わったところはないようだ。"); */ static void museum_remove_object(void) { - int i; + int i; COMMAND_CODE item; object_type *o_ptr; - char o_name[MAX_NLEN]; - char out_val[160]; + GAME_TEXT o_name[MAX_NLEN]; + char out_val[160]; /* Empty? */ if (st_ptr->stock_num <= 0) { -#ifdef JP - msg_print("博物館には何も置いてありません。"); -#else - msg_print("Museum is empty."); -#endif - + msg_print(_("博物館には何も置いてありません。", "Museum is empty.")); return; } @@ -4418,11 +5399,7 @@ static void museum_remove_object(void) if (i > store_bottom) i = store_bottom; /* Prompt */ -#ifdef JP - sprintf(out_val, "どのアイテムの展示をやめさせますか?"); -#else - sprintf(out_val, "Which item do you want to order to remove? "); -#endif + sprintf(out_val, _("どのアイテムの展示をやめさせますか?", "Which item do you want to order to remove? ")); /* Get the item number to be removed */ if (!get_stock(&item, out_val, 0, i - 1)) return; @@ -4433,23 +5410,12 @@ static void museum_remove_object(void) /* Get the actual item */ o_ptr = &st_ptr->stock[item]; - /* Description */ object_desc(o_name, o_ptr, 0); -#ifdef JP - msg_print("展示をやめさせたアイテムは二度と見ることはできません!"); - if (!get_check(format("本当に%sの展示をやめさせますか?", o_name))) return; -#else - msg_print("You cannot see items which is removed from the Museum!"); - if (!get_check(format("Really order to remove %s from the Museum? ", o_name))) return; -#endif + msg_print(_("展示をやめさせたアイテムは二度と見ることはできません!", "You cannot see items which is removed from the Museum!")); + if (!get_check(format(_("本当に%sの展示をやめさせますか?", "Really order to remove %s from the Museum? "), o_name))) return; - /* Message */ -#ifdef JP - msg_format("%sの展示をやめさせた。", o_name); -#else - msg_format("You ordered to remove %s.", o_name); -#endif + msg_format(_("%sの展示をやめさせた。", "You ordered to remove %s."), o_name); /* Remove the items from the home */ store_item_increase(item, -o_ptr->number); @@ -4464,8 +5430,6 @@ static void museum_remove_object(void) /* Nothing left on that screen */ else if (store_top >= st_ptr->stock_num) store_top -= store_bottom; - - /* Redraw everything */ display_inventory(); return; @@ -4492,13 +5456,9 @@ static bool leave_store = FALSE; */ static void store_process_command(void) { -#ifdef ALLOW_REPEAT /* TNB */ - /* Handle repeating the last command */ repeat_check(); -#endif /* ALLOW_REPEAT -- TNB */ - if (rogue_like_commands && command_cmd == 'l') { command_cmd = 'x'; /* hack! */ @@ -4519,11 +5479,7 @@ static void store_process_command(void) case '-': { if (st_ptr->stock_num <= store_bottom) { -#ifdef JP - msg_print("これで全部です。"); -#else - msg_print("Entire inventory is shown."); -#endif + msg_print(_("これで全部です。", "Entire inventory is shown.")); } else{ store_top -= store_bottom; @@ -4541,12 +5497,7 @@ static void store_process_command(void) { if (st_ptr->stock_num <= store_bottom) { -#ifdef JP - msg_print("これで全部です。"); -#else - msg_print("Entire inventory is shown."); -#endif - + msg_print(_("これで全部です。", "Entire inventory is shown.")); } else { @@ -4574,7 +5525,6 @@ static void store_process_command(void) break; } - /* Redraw */ case KTRL('R'): { do_cmd_redraw(); @@ -4663,8 +5613,6 @@ static void store_process_command(void) break; } - - /*** Use various objects ***/ /* Browse a book */ @@ -4856,13 +5804,8 @@ static void store_process_command(void) } else { -#ifdef JP - msg_print("そのコマンドは店の中では使えません。"); -#else - msg_print("That command does not work in stores."); -#endif + msg_print(_("そのコマンドは店の中では使えません。", "That command does not work in stores.")); } - break; } } @@ -4885,14 +5828,14 @@ static void store_process_command(void) */ void do_cmd_store(void) { - int which; - int maintain_num; - int i; - cave_type *c_ptr; - bool need_redraw_store_inv; /* To redraw missiles damage and prices in store */ - int w, h; + int which; + int maintain_num; + int i; + cave_type *c_ptr; + bool need_redraw_store_inv; /* To redraw missiles damage and prices in store */ + TERM_LEN w, h; - /* Get term size */ + if(p_ptr->wild_mode) return; Term_get_size(&w, &h); /* Calculate stocks per 1 page */ @@ -4905,12 +5848,7 @@ void do_cmd_store(void) /* Verify a store */ if (!cave_have_flag_grid(c_ptr, FF_STORE)) { -#ifdef JP - msg_print("ここには店がありません。"); -#else - msg_print("You see no store here."); -#endif - + msg_print(_("ここには店がありません。", "You see no store here.")); return; } @@ -4926,12 +5864,7 @@ void do_cmd_store(void) if ((town[p_ptr->town_num].store[which].store_open >= turn) || (ironman_shops)) { -#ifdef JP - msg_print("ドアに鍵がかかっている。"); -#else - msg_print("The doors are locked."); -#endif - + msg_print(_("ドアに鍵がかかっている。", "The doors are locked.")); p_ptr->town_num = old_town_num; return; } @@ -4952,24 +5885,15 @@ void do_cmd_store(void) town[p_ptr->town_num].store[which].last_visit = turn; } - /* Forget the lite */ forget_lite(); - - /* Forget the view */ forget_view(); - /* Hack -- Character is in "icky" mode */ character_icky = TRUE; - - /* No command argument */ + /* command reset */ command_arg = 0; - - /* No repeated command */ command_rep = 0; - - /* No automatic command */ command_new = 0; /* Do not expand macros */ @@ -4985,13 +5909,11 @@ void do_cmd_store(void) st_ptr = &town[p_ptr->town_num].store[cur_store_num]; ot_ptr = &owners[cur_store_num][st_ptr->owner]; - /* Start at the beginning */ store_top = 0; play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_BUILD); - /* Display the store */ display_store(); /* Do not leave */ @@ -5006,104 +5928,55 @@ void do_cmd_store(void) /* Clear */ clear_from(20 + xtra_stock); - /* Basic commands */ -#ifdef JP - prt(" ESC) 建物から出る", 21 + xtra_stock, 0); -#else - prt(" ESC) Exit from Building.", 21 + xtra_stock, 0); -#endif - + prt(_(" ESC) 建物から出る", " ESC) Exit from Building."), 21 + xtra_stock, 0); /* Browse if necessary */ if (st_ptr->stock_num > store_bottom) { -#ifdef JP - prt(" -)前ページ", 22 + xtra_stock, 0); - prt(" スペース) 次ページ", 23 + xtra_stock, 0); -#else - prt(" -) Previous page", 22 + xtra_stock, 0); - prt(" SPACE) Next page", 23 + xtra_stock, 0); -#endif - + prt(_(" -)前ページ", " -) Previous page"), 22 + xtra_stock, 0); + prt(_(" スペース) 次ページ", " SPACE) Next page"), 23 + xtra_stock, 0); } /* Home commands */ if (cur_store_num == STORE_HOME) { -#ifdef JP - prt("g) アイテムを取る", 21 + xtra_stock, 27); - prt("d) アイテムを置く", 22 + xtra_stock, 27); - prt("x) 家のアイテムを調べる", 23 + xtra_stock, 27); -#else - prt("g) Get an item.", 21 + xtra_stock, 27); - prt("d) Drop an item.", 22 + xtra_stock, 27); - prt("x) eXamine an item in the home.", 23 + xtra_stock, 27); -#endif + prt(_("g) アイテムを取る", "g) Get an item."), 21 + xtra_stock, 27); + prt(_("d) アイテムを置く", "d) Drop an item."), 22 + xtra_stock, 27); + prt(_("x) 家のアイテムを調べる", "x) eXamine an item in the home."), 23 + xtra_stock, 27); } /* Museum commands */ else if (cur_store_num == STORE_MUSEUM) { -#ifdef JP - prt("d) アイテムを置く", 21 + xtra_stock, 27); - prt("r) アイテムの展示をやめる", 22 + xtra_stock, 27); - prt("x) 博物館のアイテムを調べる", 23 + xtra_stock, 27); -#else - prt("d) Drop an item.", 21 + xtra_stock, 27); - prt("r) order to Remove an item.", 22 + xtra_stock, 27); - prt("x) eXamine an item in the museum.", 23 + xtra_stock, 27); -#endif + prt(_("d) アイテムを置く", "d) Drop an item."), 21 + xtra_stock, 27); + prt(_("r) アイテムの展示をやめる", "r) order to Remove an item."), 22 + xtra_stock, 27); + prt(_("x) 博物館のアイテムを調べる", "x) eXamine an item in the museum."), 23 + xtra_stock, 27); } - /* Shop commands XXX XXX XXX */ + /* Shop commands */ else { -#ifdef JP - prt("p) 商品を買う", 21 + xtra_stock, 30); - prt("s) アイテムを売る", 22 + xtra_stock, 30); - prt("x) 商品を調べる", 23 + xtra_stock,30); -#else - prt("p) Purchase an item.", 21 + xtra_stock, 30); - prt("s) Sell an item.", 22 + xtra_stock, 30); - prt("x) eXamine an item in the shop", 23 + xtra_stock,30); -#endif + prt(_("p) 商品を買う", "p) Purchase an item."), 21 + xtra_stock, 30); + prt(_("s) アイテムを売る", "s) Sell an item."), 22 + xtra_stock, 30); + prt(_("x) 商品を調べる", "x) eXamine an item in the shop"), 23 + xtra_stock,30); } -#ifdef JP /* 基本的なコマンドの追加表示 */ - - prt("i/e) 持ち物/装備の一覧", 21 + xtra_stock, 56); + prt(_("i/e) 持ち物/装備の一覧", "i/e) Inventry/Equipment list"), 21 + xtra_stock, 56); if (rogue_like_commands) { - prt("w/T) 装備する/はずす", 22 + xtra_stock, 56); + prt(_("w/T) 装備する/はずす", "w/T) Wear/Take off equipment"), 22 + xtra_stock, 56); } else { - prt("w/t) 装備する/はずす", 22 + xtra_stock, 56); + prt(_("w/t) 装備する/はずす", "w/t) Wear/Take off equipment"), 22 + xtra_stock, 56); } -#else - prt("i/e) Inventry/Equipment list", 21 + xtra_stock, 56); - if (rogue_like_commands) - { - prt("w/T) Wear/Take off equipment", 22 + xtra_stock, 56); - } - else - { - prt("w/t) Wear/Take off equipment", 22 + xtra_stock, 56); - } -#endif /* Prompt */ -#ifdef JP - prt("コマンド:", 20 + xtra_stock, 0); -#else - prt("You may: ", 20 + xtra_stock, 0); -#endif - + prt(_("コマンド:", "You may: "), 20 + xtra_stock, 0); - /* Get a command */ request_command(TRUE); /* Process the command */ @@ -5118,35 +5991,22 @@ void do_cmd_store(void) /* Hack -- Character is still in "icky" mode */ character_icky = TRUE; - /* Notice stuff */ - notice_stuff(); - - /* Handle stuff */ handle_stuff(); - /* XXX XXX XXX Pack Overflow */ + /* Pack Overflow */ if (inventory[INVEN_PACK].k_idx) { - int item = INVEN_PACK; + INVENTORY_IDX item = INVEN_PACK; object_type *o_ptr = &inventory[item]; /* Hack -- Flee from the store */ if (cur_store_num != STORE_HOME) { - /* Message */ -#ifdef JP if (cur_store_num == STORE_MUSEUM) - msg_print("ザックからアイテムがあふれそうなので、あわてて博物館から出た..."); + msg_print(_("ザックからアイテムがあふれそうなので、あわてて博物館から出た...", "Your pack is so full that you flee the Museum...")); else - msg_print("ザックからアイテムがあふれそうなので、あわてて店から出た..."); -#else - if (cur_store_num == STORE_MUSEUM) - msg_print("Your pack is so full that you flee the Museum..."); - else - msg_print("Your pack is so full that you flee the store..."); -#endif - + msg_print(_("ザックからアイテムがあふれそうなので、あわてて店から出た...", "Your pack is so full that you flee the store...")); /* Leave */ leave_store = TRUE; @@ -5155,14 +6015,7 @@ void do_cmd_store(void) /* Hack -- Flee from the home */ else if (!store_check_num(o_ptr)) { - /* Message */ -#ifdef JP - msg_print("ザックからアイテムがあふれそうなので、あわてて家から出た..."); -#else - msg_print("Your pack is so full that you flee your home..."); -#endif - - + msg_print(_("ザックからアイテムがあふれそうなので、あわてて家から出た...", "Your pack is so full that you flee your home...")); /* Leave */ leave_store = TRUE; } @@ -5175,40 +6028,22 @@ void do_cmd_store(void) object_type forge; object_type *q_ptr; - char o_name[MAX_NLEN]; - + GAME_TEXT o_name[MAX_NLEN]; /* Give a message */ -#ifdef JP - msg_print("ザックからアイテムがあふれてしまった!"); -#else - msg_print("Your pack overflows!"); -#endif + msg_print(_("ザックからアイテムがあふれてしまった!", "Your pack overflows!")); - - /* Get local object */ q_ptr = &forge; - /* Grab a copy of the item */ object_copy(q_ptr, o_ptr); - - /* Describe it */ object_desc(o_name, q_ptr, 0); - /* Message */ -#ifdef JP - msg_format("%sが落ちた。(%c)", o_name, index_to_label(item)); -#else - msg_format("You drop %s (%c).", o_name, index_to_label(item)); -#endif - + msg_format(_("%sが落ちた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item)); /* Remove it from the players inventory */ inven_item_increase(item, -255); inven_item_describe(item); inven_item_optimize(item); - - /* Handle stuff */ handle_stuff(); /* Let the home carry it */ @@ -5235,7 +6070,7 @@ void do_cmd_store(void) p_ptr->town_num = old_town_num; - /* Free turn XXX XXX XXX */ + /* Free turn */ p_ptr->energy_use = 100; @@ -5252,25 +6087,16 @@ void do_cmd_store(void) /* Allow expanding macros */ get_com_no_macros = FALSE; - /* Flush messages XXX XXX XXX */ - msg_print(NULL); - - - /* Clear the screen */ + msg_erase(); Term_clear(); - /* Update everything */ p_ptr->update |= (PU_VIEW | PU_LITE | PU_MON_LITE); p_ptr->update |= (PU_MONSTERS); /* Redraw entire screen */ p_ptr->redraw |= (PR_BASIC | PR_EXTRA | PR_EQUIPPY); - - /* Redraw map */ p_ptr->redraw |= (PR_MAP); - - /* Window stuff */ p_ptr->window |= (PW_OVERHEAD | PW_DUNGEON); } @@ -5328,7 +6154,6 @@ void store_shuffle(int which) { object_type *o_ptr; - /* Get the item */ o_ptr = &st_ptr->stock[i]; if (!object_is_artifact(o_ptr)) @@ -5340,11 +6165,7 @@ void store_shuffle(int which) o_ptr->ident &= ~(IDENT_FIXED); /* Mega-Hack -- Note that the item is "on sale" */ -#ifdef JP - o_ptr->inscription = quark_add("売出中"); -#else - o_ptr->inscription = quark_add("on sale"); -#endif + o_ptr->inscription = quark_add(_("売出中", "on sale")); } } } @@ -5359,7 +6180,7 @@ void store_shuffle(int which) */ void store_maint(int town_num, int store_num) { - int j; + INVENTORY_IDX j; cur_store_num = store_num; @@ -5443,8 +6264,7 @@ void store_maint(int town_num, int store_num) */ void store_init(int town_num, int store_num) { - int k; - + int k; cur_store_num = store_num; /* Activate that store */