X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fstore.c;h=2e0923d846dea35edb53903efe7cd951365aab26;hb=628198121ab9c54dcffb6a1d83dae10cf3dcdd7f;hp=516386a36200f339bff5c0310e4e685f885da7d9;hpb=5ca607422c5b4a7960c571bc3e19e5020dbd55c0;p=hengband%2Fhengband.git diff --git a/src/store.c b/src/store.c index 516386a36..2e0923d84 100644 --- a/src/store.c +++ b/src/store.c @@ -11,13 +11,770 @@ */ #include "angband.h" +#include "util.h" + +#include "floor.h" #include "cmd-item.h" +#include "cmd-smith.h" #include "cmd-zapwand.h" #include "cmd-magiceat.h" +#include "spells.h" #include "store.h" +#include "avatar.h" +#include "cmd-spell.h" +#include "rumor.h" +#include "player-status.h" +#include "object-flavor.h" +#include "object-hook.h" +#include "floor-events.h" +#include "snipe.h" +#include "files.h" +#include "player-effects.h" +#include "mind.h" +#include "world.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; @@ -30,7 +787,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 "オーケーだ。", @@ -52,7 +809,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] = { "まあ、それでいいや。", "今日はそれで勘弁してやる。", "分かったよ。", @@ -63,7 +820,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 が最後だ。", @@ -77,7 +834,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 ぐらいは出さなきゃダメだよ。", @@ -111,7 +868,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 が普通なんだよ。", @@ -128,7 +885,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 が最後だ。", @@ -143,7 +900,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 でいいんだろ?", @@ -177,7 +934,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 だ。", @@ -194,7 +951,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 "もうたくさんだ!何度も私をわずらわせないでくれ!", @@ -212,7 +969,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] = { "なめやがって!温厚な俺様でも限界があるってことを知れ!", "俺をここまで怒らせて...命があるだけでもありがたいと思え!", "ふざけてるのか!冷やかしなら相手を見てからにしろ!", @@ -221,7 +978,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 "店から出て行け!", @@ -239,7 +996,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] = { "二度とうちに来るんじゃねえ!!", "とっとと、どっかへ失せろ!!", "今すぐ消え失せろ!!", @@ -248,7 +1005,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 "考え直してくれ。", @@ -274,7 +1031,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] = { "時間の無駄だな、これは。", "厄介なお客様だな!", "話して分かる相手じゃなさそうだ。", @@ -287,7 +1044,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 "どうやら聞き間違えたらしい。", @@ -303,6 +1060,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 } + } +}; + /*! @@ -479,7 +1793,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 "うわああぁぁ!", @@ -497,7 +1811,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 "くそう!", @@ -515,7 +1829,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 "すばらしい!", @@ -533,7 +1847,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 "やっほぅ!", @@ -617,229 +1931,235 @@ static byte rgold_adj[MAX_RACES][MAX_RACES] = /*Hum, HfE, Elf, Hal, Gno, Dwa, HfO, HfT, Dun, HiE, Barbarian, HfOg, HGn, HTn, Cyc, Yek, Klc, Kbd, Nbl, DkE, Drc, Mind Flayer, Imp, Glm, Skl, Zombie, Vampire, Spectre, Fairy, Beastman, Ent, - Angel, Demon, Kutar */ + Angel, Demon, Kutar, Android, Merfolk */ /* Human */ { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100, 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120, 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140, - 100, 120, 110, 105 }, + 100, 120, 110, 105, 110 }, /* Half-Elf */ { 110, 100, 100, 105, 110, 120, 125, 130, 110, 100, 110, 120, 115, 108, 115, 110, 110, 120, 120, 115, 115, 110, 120, 110, 110, 110, 120, 110, 100, 125, 100, 95, 140, - 110, 115, 110, 110 }, + 110, 115, 110, 110, 110 }, /* Elf */ { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110, 120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108, 120, 115, 110, 110, 120, 110, 100, 125, 100, 95, 140, - 110, 110, 105, 110 }, + 110, 110, 105, 110, 110 }, /* Halfling */ { 115, 110, 105, 95, 105, 110, 115, 130, 115, 105, 115, 125, 120, 120, 125, 115, 110, 120, 120, 120, 115, 115, 120, 110, 120, 120, 130, 110, 110, 130, 110, 95, 140, - 115, 120, 105, 115 }, + 115, 120, 105, 115, 105 }, /* Gnome */ { 115, 115, 110, 105, 95, 110, 115, 130, 115, 110, 115, 120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110, 120, 101, 110, 110, 120, 120, 115, 130, 115, 95, 140, - 115, 110, 110, 115 }, + 115, 110, 110, 115, 110 }, /* Dwarf */ { 115, 120, 120, 110, 110, 95, 125, 135, 115, 120, 115, 125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120, 120, 105, 115, 115, 115, 115, 120, 130, 120, 95, 140, - 115, 110, 115, 115 }, + 115, 110, 115, 115, 120 }, /* Half-Orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 115, 120, 125, 115, 125, 95, 140, - 115, 110, 115, 115 }, + 115, 110, 115, 115, 125 }, /* Half-Troll */ { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110, 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110, 110, 115, 112, 112, 115, 112, 120, 110, 120, 95, 140, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 130 }, /* Amberite */ { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100, 120, 120, 105, 120, 115, 105, 115, 120, 110, 105, 105, 120, 105, 120, 120, 125, 120, 105, 135, 105, 95, 140, - 100, 110, 110, 100 }, + 100, 110, 110, 100, 110 }, /* High_Elf */ { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110, 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110, 125, 115, 120, 120, 125, 120, 100, 125, 100, 95, 140, - 110, 110, 105, 110 }, + 110, 110, 105, 110, 110 }, /* Human / Barbarian (copied from human) */ { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100, 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120, 115, 105, 125, 125, 130, 125, 115, 120, 115, 95, 140, - 100, 120, 110, 100 }, + 100, 120, 110, 100, 110 }, /* Half-Ogre: theoretical, copied from half-troll */ { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110, 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110, 110, 115, 112, 112, 115, 112, 120, 110, 120, 95, 140, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 120 }, /* Half-Giant: theoretical, copied from half-troll */ { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110, 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110, 110, 115, 112, 112, 115, 112, 130, 120, 130, 95, 140, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 115 }, /* Half-Titan: theoretical, copied from High_Elf */ { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110, 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110, 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 108 }, /* Cyclops: theoretical, copied from half-troll */ { 110, 115, 115, 110, 110, 130, 110, 110, 110, 115, 110, 110, 115, 120, 110, 120, 120, 110, 110, 110, 115, 110, 110, 115, 112, 112, 115, 112, 130, 130, 130, 95, 140, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 115 }, /* Yeek: theoretical, copied from Half-Orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140, - 115, 110, 115, 115 }, + 115, 110, 115, 115, 110 }, /* Klackon: theoretical, copied from Gnome */ { 115, 115, 110, 105, 95, 110, 115, 130, 115, 110, 115, 120, 125, 110, 120, 110, 105, 120, 110, 110, 105, 110, 120, 101, 110, 110, 120, 120, 130, 130, 130, 95, 140, - 115, 110, 115, 115 }, + 115, 110, 115, 115, 110 }, /* Kobold: theoretical, copied from Half-Orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140, - 115, 110, 115, 115 }, + 115, 110, 115, 115, 120 }, /* Nibelung: theoretical, copied from Dwarf */ { 115, 120, 120, 110, 110, 95, 125, 135, 115, 120, 115, 125, 140, 130, 130, 120, 115, 115, 115, 135, 125, 120, 120, 105, 115, 115, 120, 120, 130, 130, 130, 95, 140, - 115, 135, 115, 115 }, + 115, 135, 115, 115, 120 }, /* Dark Elf */ { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115, 115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110, 110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120, - 110, 101, 115, 110 }, + 110, 101, 115, 110, 115 }, /* Draconian: theoretical, copied from High_Elf */ { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110, 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110, 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 115 }, /* Mind Flayer: theoretical, copied from High_Elf */ { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110, 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110, 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 110 }, /* Imp: theoretical, copied from High_Elf */ { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110, 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110, 125, 115, 120, 120, 120, 120, 130, 130, 130, 120, 120, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 120 }, /* Golem: theoretical, copied from High_Elf */ { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110, 125, 125, 101, 120, 115, 110, 115, 125, 110, 110, 110, 125, 115, 120, 120, 120, 120, 130, 130, 130, 95, 140, - 110, 110, 115, 110 }, + 110, 110, 115, 110, 110 }, /* Skeleton: theoretical, copied from half-orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120, - 115, 110, 125, 115 }, + 115, 110, 125, 115, 110 }, /* Zombie: Theoretical, copied from half-orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120, - 115, 110, 125, 115 }, + 115, 110, 125, 115, 110 }, /* Vampire: Theoretical, copied from half-orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120, - 115, 110, 125, 115 }, + 115, 110, 125, 115, 120 }, /* Spectre: Theoretical, copied from half-orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 120, 120, 130, 130, 130, 120, 120, - 115, 110, 125, 115 }, + 115, 110, 125, 115, 110 }, /* Sprite: Theoretical, copied from half-orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140, - 115, 110, 105, 115 }, + 115, 110, 105, 115, 110 }, /* Beastman: Theoretical, copied from half-orc */ { 115, 120, 125, 115, 115, 130, 110, 115, 115, 125, 115, 110, 110, 120, 110, 120, 125, 115, 115, 110, 120, 110, 115, 125, 120, 120, 120, 120, 130, 130, 130, 95, 140, - 115, 110, 115, 115 }, + 115, 110, 115, 115, 125 }, /* Ent */ { 110, 105, 100, 105, 110, 120, 125, 130, 110, 100, 110, 120, 120, 105, 120, 110, 105, 125, 125, 110, 115, 108, 120, 115, 110, 110, 120, 110, 100, 125, 100, 95, 140, - 110, 110, 105, 110 }, + 110, 110, 105, 110, 110 }, /* Angel */ { 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 160, - 95, 95, 95, 95 }, + 95, 95, 95, 95, 95 }, /* Demon */ { 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 160, 120, - 140, 140, 140, 140 }, + 140, 140, 140, 140, 140 }, /* Dunadan */ { 100, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100, 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120, 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140, - 100, 120, 110, 100 }, + 100, 120, 110, 100, 110 }, /* Shadow Fairy */ { 110, 110, 110, 115, 120, 130, 115, 115, 120, 110, 115, 115, 115, 116, 115, 120, 120, 115, 115, 101, 110, 110, 110, 110, 112, 122, 110, 110, 110, 115, 110, 120, 120, - 110, 101, 115, 110 }, + 110, 101, 115, 110, 115 }, /* Kutar */ { 110, 110, 105, 105, 110, 115, 115, 115, 110, 105, 110, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 125, 125, 125, 125, 105, 115, 105, 95, 140, - 110, 115, 100, 110 }, + 110, 115, 100, 110, 110 }, /* Android */ { 105, 105, 105, 110, 113, 115, 120, 125, 100, 105, 100, 124, 120, 110, 125, 115, 120, 120, 120, 120, 115, 120, 115, 105, 125, 125, 125, 125, 105, 120, 105, 95, 140, - 100, 120, 110, 100 }, + 100, 120, 110, 100, 110 }, + + /* Merfolk */ + { 110, 110, 110, 105, 110, 120, 125, 130, 110, 110, 110, + 120, 115, 108, 115, 110, 110, 120, 120, 115, 115, 110, + 120, 110, 110, 110, 120, 110, 110, 125, 110, 95, 140, + 110, 115, 110, 110, 100 }, }; @@ -946,7 +2266,7 @@ static void mass_produce(object_type *o_ptr) int size = 1; DISCOUNT_RATE discount = 0; - s32b cost = object_value(o_ptr); + PRICE cost = object_value(o_ptr); /* Analyze the type */ @@ -1215,7 +2535,7 @@ static void store_object_absorb(object_type *o_ptr, object_type *j_ptr) */ static int store_check_num(object_type *o_ptr) { - int i; + int i; object_type *j_ptr; /* The "home" acts like the player */ @@ -1543,7 +2863,7 @@ bool combine_and_reorder_home(int store_num) bool old_stack_force_notes = stack_force_notes; bool old_stack_force_costs = stack_force_costs; - st_ptr = &town[1].store[store_num]; + st_ptr = &town_info[1].store[store_num]; if (store_num != STORE_HOME) { stack_force_notes = FALSE; @@ -1685,7 +3005,7 @@ bool combine_and_reorder_home(int store_num) /*! * @brief 我が家にオブジェクトを加える / - * Add the item "o_ptr" to the inventory of the "Home" + * Add the item "o_ptr" to the p_ptr->inventory_list of the "Home" * @param o_ptr 加えたいオブジェクトの構造体参照ポインタ * @return 収めた先のID * @details @@ -1698,9 +3018,9 @@ bool combine_and_reorder_home(int store_num) */ static int home_carry(object_type *o_ptr) { - int slot; - s32b value; - int i; + int slot; + PRICE value; + int i; object_type *j_ptr; bool old_stack_force_notes = stack_force_notes; bool old_stack_force_costs = stack_force_costs; @@ -1790,7 +3110,7 @@ static int home_carry(object_type *o_ptr) /*! * @brief 店舗にオブジェクトを加える / - * Add the item "o_ptr" to a real stores inventory. + * Add the item "o_ptr" to a real stores p_ptr->inventory_list. * @param o_ptr 加えたいオブジェクトの構造体参照ポインタ * @return 収めた先のID * @details @@ -1803,8 +3123,8 @@ static int home_carry(object_type *o_ptr) */ static int store_carry(object_type *o_ptr) { - int i, slot; - s32b value, j_value; + int i, slot; + PRICE value, j_value; object_type *j_ptr; @@ -1895,7 +3215,7 @@ static int store_carry(object_type *o_ptr) /*! * @brief 店舗のオブジェクト数を増やす / - * Add the item "o_ptr" to a real stores inventory. + * Add the item "o_ptr" to a real stores p_ptr->inventory_list. * @param item 増やしたいアイテムのID * @param num 増やしたい数 * @return なし @@ -1969,7 +3289,7 @@ static void store_item_optimize(INVENTORY_IDX item) */ static bool black_market_crap(object_type *o_ptr) { - int i, j; + int i, j; /* Ego items are never crap */ if (object_is_ego(o_ptr)) return (FALSE); @@ -1986,9 +3306,9 @@ static bool black_market_crap(object_type *o_ptr) if (i == STORE_MUSEUM) continue; /* Check every item in the store */ - for (j = 0; j < town[p_ptr->town_num].store[i].stock_num; j++) + for (j = 0; j < town_info[p_ptr->town_num].store[i].stock_num; j++) { - object_type *j_ptr = &town[p_ptr->town_num].store[i].stock[j]; + object_type *j_ptr = &town_info[p_ptr->town_num].store[i].stock[j]; /* Duplicate item "type", assume crappy */ if (o_ptr->k_idx == j_ptr->k_idx) return (TRUE); @@ -2161,8 +3481,8 @@ static void store_create(void) */ static bool noneedtobargain(PRICE minprice) { - s32b good = st_ptr->good_buy; - s32b bad = st_ptr->bad_buy; + PRICE good = st_ptr->good_buy; + PRICE bad = st_ptr->bad_buy; /* Cheap items are "boring" */ if (minprice < 10L) return (TRUE); @@ -2224,12 +3544,12 @@ static void updatebargain(PRICE price, PRICE minprice, int num) */ static void display_entry(int pos) { - int i, cur_col; - object_type *o_ptr; - s32b x; + int i, cur_col; + object_type *o_ptr; + s32b x; GAME_TEXT o_name[MAX_NLEN]; - char out_val[160]; + char out_val[160]; int maxwid = 75; @@ -2270,7 +3590,7 @@ static void display_entry(int pos) 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)); put_str(out_val, i+6, 67); @@ -2319,11 +3639,10 @@ static void display_entry(int pos) /* Actually draw the price (not fixed) */ #ifdef JP -(void)sprintf(out_val, "%9ld固", (long)x); + (void)sprintf(out_val, "%9ld固", (long)x); #else (void)sprintf(out_val, "%9ld F", (long)x); #endif - put_str(out_val, i+6, 68); } @@ -2357,7 +3676,7 @@ static void display_entry(int pos) /*! * @brief 店の商品リストを表示する / - * Displays a store's inventory -RAK- + * Displays a store's p_ptr->inventory_list -RAK- * @return なし * @details * All prices are listed as "per individual object". -BEN- @@ -2391,21 +3710,11 @@ static void display_inventory(void) if (st_ptr->stock_num > store_bottom) { /* Show "more" reminder (after the last item) */ -#ifdef JP - prt("-続く-", k + 6, 3); -#else - prt("-more-", k + 6, 3); -#endif - + prt(_("-続く-", "-more-"), k + 6, 3); /* Indicate the "current page" */ /* Trailing spaces are to display (Page xx) and (Page x) */ -#ifdef JP - put_str(format("(%dページ) ", store_top/store_bottom + 1), 5, 20); -#else - put_str(format("(Page %d) ", store_top/store_bottom + 1), 5, 20); -#endif - + put_str(format(_("(%dページ) ", "(Page %d) "), store_top/store_bottom + 1), 5, 20); } if (cur_store_num == STORE_HOME || cur_store_num == STORE_MUSEUM) @@ -2432,13 +3741,7 @@ static void store_prt_gold(void) { char out_val[64]; -#ifdef JP - prt("手持ちのお金: ", 19 + xtra_stock, 53); -#else - prt("Gold Remaining: ", 19 + xtra_stock, 53); -#endif - - + prt(_("手持ちのお金: ", "Gold Remaining: "), 19 + xtra_stock, 53); sprintf(out_val, "%9ld", (long)p_ptr->au); prt(out_val, 19 + xtra_stock, 68); } @@ -2490,9 +3793,9 @@ static void display_store(void) /* 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); @@ -2519,7 +3822,7 @@ static void display_store(void) /* Display the current gold */ store_prt_gold(); - /* Draw in the inventory */ + /* Draw in the p_ptr->inventory_list */ display_inventory(); } @@ -2534,7 +3837,7 @@ 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]; @@ -2550,8 +3853,6 @@ static int get_stock(COMMAND_CODE *com_val, cptr pmt, int i, int j) return (TRUE); } } - - /* Paranoia */ msg_print(NULL); /* Assume failure */ @@ -2630,7 +3931,7 @@ static int increase_insults(void) st_ptr->bad_buy = 0; /* Open tomorrow */ - st_ptr->store_open = turn + TURNS_PER_TICK*TOWN_DAWN/8 + randint1(TURNS_PER_TICK*TOWN_DAWN/8); + st_ptr->store_open = current_world_ptr->game_turn + TURNS_PER_TICK*TOWN_DAWN/8 + randint1(TURNS_PER_TICK*TOWN_DAWN/8); /* Closed */ return (TRUE); @@ -2691,51 +3992,32 @@ static s32b last_inc = 0L; * @param final 最終確定価格ならばTRUE * @return プレイヤーを締め出す場合TRUEを返す */ -static int get_haggle(cptr pmt, s32b *poffer, PRICE price, int final) +static int get_haggle(concptr pmt, s32b *poffer, PRICE price, int final) { - s32b i; - - cptr p; - - char buf[128]; - char out_val[160]; - + s32b i; + concptr p; + GAME_TEXT buf[128]; + GAME_TEXT out_val[160]; /* Clear old increment if necessary */ if (!allow_inc) last_inc = 0L; - /* Final offer */ if (final) { -#ifdef JP - sprintf(buf, "%s [承諾] ", pmt); -#else - sprintf(buf, "%s [accept] ", pmt); -#endif - + sprintf(buf, _("%s [承諾] ", "%s [accept] "), pmt); } /* Old (negative) increment, and not final */ else if (last_inc < 0) { -#ifdef JP - sprintf(buf, "%s [-$%ld] ", pmt, (long)(ABS(last_inc))); -#else - sprintf(buf, "%s [-%ld] ", pmt, (long)(ABS(last_inc))); -#endif - + sprintf(buf, _("%s [-$%ld] ", "%s [-%ld] "), pmt, (long)(ABS(last_inc))); } /* Old (positive) increment, and not final */ else if (last_inc > 0) { -#ifdef JP - sprintf(buf, "%s [+$%ld] ", pmt, (long)(ABS(last_inc))); -#else - sprintf(buf, "%s [+%ld] ", pmt, (long)(ABS(last_inc))); -#endif - + sprintf(buf, _("%s [+$%ld] ", "%s [+%ld] "), pmt, (long)(ABS(last_inc))); } /* Normal haggle */ @@ -2743,12 +4025,8 @@ static int get_haggle(cptr pmt, s32b *poffer, PRICE price, int final) { sprintf(buf, "%s ", pmt); } - - - /* Paranoia */ msg_print(NULL); - /* Ask until done */ while (TRUE) { @@ -2824,12 +4102,7 @@ static int get_haggle(cptr pmt, s32b *poffer, PRICE price, int final) } /* Warning */ -#ifdef JP - msg_print("値がおかしいです。"); -#else - msg_print("Invalid response."); -#endif - + msg_print(_("値がおかしいです。", "Invalid response.")); msg_print(NULL); } @@ -2850,7 +4123,7 @@ static int get_haggle(cptr pmt, s32b *poffer, PRICE 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, PRICE price, int final) { @@ -2891,21 +4164,11 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) s32b min_per, max_per; int flag, loop_flag, noneed; int annoyed = 0, final = FALSE; - bool cancel = FALSE; - -#ifdef JP - cptr pmt = "提示価格"; -#else - cptr pmt = "Asking"; -#endif - - char out_val[160]; - - *price = 0; + concptr pmt = _("提示価格", "Asking"); /* Extract the starting offer and the final offer */ cur_ask = price_item(o_ptr, ot_ptr->max_inflate, FALSE); @@ -2921,12 +4184,7 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) if (noneed) { /* Message summary */ -#ifdef JP - msg_print("結局この金額にまとまった。"); -#else - msg_print("You eventually agree upon the price."); -#endif - + msg_print(_("結局この金額にまとまった。", "You eventually agree upon the price.")); msg_print(NULL); } @@ -2934,12 +4192,7 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) else { /* Message summary */ -#ifdef JP - msg_print("すんなりとこの金額にまとまった。"); -#else - msg_print("You quickly agree upon the price."); -#endif - + msg_print(_("すんなりとこの金額にまとまった。", "You quickly agree upon the price.")); msg_print(NULL); /* Apply Sales Tax */ @@ -2950,12 +4203,7 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) cur_ask = final_ask; /* Go to final offer */ -#ifdef JP - pmt = "最終提示価格"; -#else - pmt = "Final Offer"; -#endif - + pmt = _("最終提示価格", "Final Offer"); final = TRUE; } @@ -2989,14 +4237,7 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) { (void)sprintf(out_val, "%s : %ld", pmt, (long)cur_ask); put_str(out_val, 1, 0); -#ifdef JP - cancel = receive_offer("提示する金額? ", -#else - cancel = receive_offer("What do you offer? ", -#endif - - &offer, last_offer, 1, cur_ask, final); - + cancel = receive_offer(_("提示する金額? ", "What do you offer? "), &offer, last_offer, 1, cur_ask, final); if (cancel) { flag = TRUE; @@ -3044,12 +4285,7 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) { final = TRUE; cur_ask = final_ask; -#ifdef JP - pmt = "最終提示価格"; -#else - pmt = "Final Offer"; -#endif - + pmt = _("最終提示価格", "What do you offer? "); annoyed++; if (annoyed > 3) { @@ -3069,13 +4305,7 @@ static bool purchase_haggle(object_type *o_ptr, s32b *price) last_offer = offer; allow_inc = TRUE; prt("", 1, 0); -#ifdef JP -(void)sprintf(out_val, "前回の提示金額: $%ld", -#else - (void)sprintf(out_val, "Your last offer: %ld", -#endif - - (long)last_offer); + (void)sprintf(out_val, _("前回の提示金額: $%ld", "Your last offer: %ld"), (long)last_offer); put_str(out_val, 1, 39); say_comment_2(cur_ask, annoyed); } @@ -3108,18 +4338,12 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) int flag, loop_flag, noneed; int annoyed = 0, final = FALSE; bool cancel = FALSE; -#ifdef JP - cptr pmt = "提示金額"; -#else - cptr pmt = "Offer"; -#endif + concptr pmt = _("提示金額", "Offer"); char out_val[160]; - *price = 0; - /* Obtain the starting offer and the final offer */ cur_ask = price_item(o_ptr, ot_ptr->max_inflate, TRUE); final_ask = price_item(o_ptr, ot_ptr->min_inflate, TRUE); @@ -3142,12 +4366,7 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) /* No reason to haggle */ if (final_ask >= purse) { -#ifdef JP - msg_print("即座にこの金額にまとまった。"); -#else - msg_print("You instantly agree upon the price."); -#endif - + msg_print(_("即座にこの金額にまとまった。", "You instantly agree upon the price.")); msg_print(NULL); /* Offer full purse */ @@ -3157,12 +4376,7 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) /* No need to haggle */ else if (noneed) { -#ifdef JP - msg_print("結局この金額にまとまった。"); -#else - msg_print("You eventually agree upon the price."); -#endif - + msg_print(_("結局この金額にまとまった。", "You eventually agree upon the price.")); msg_print(NULL); } @@ -3170,12 +4384,7 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) else { /* Message summary */ -#ifdef JP - msg_print("すんなりとこの金額にまとまった。"); -#else - msg_print("You quickly agree upon the price."); -#endif - + msg_print(_("すんなりとこの金額にまとまった。", "You quickly agree upon the price.")); msg_print(NULL); } @@ -3184,12 +4393,7 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) /* Final offer */ final = TRUE; -#ifdef JP - pmt = "最終提示金額"; -#else - pmt = "Final Offer"; -#endif - + pmt = _("最終提示金額", "Final Offer"); } /* Haggle for the whole pile */ @@ -3222,12 +4426,7 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) (void)sprintf(out_val, "%s : %ld", pmt, (long)cur_ask); put_str(out_val, 1, 0); -#ifdef JP - cancel = receive_offer("提示する価格? ", -#else - cancel = receive_offer("What price do you ask? ", -#endif - + cancel = receive_offer(_("提示する価格? ", "What price do you ask? "), &offer, last_offer, -1, cur_ask, final); if (cancel) @@ -3280,11 +4479,7 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) { cur_ask = final_ask; final = TRUE; -#ifdef JP - pmt = "最終提示金額"; -#else - pmt = "Final Offer"; -#endif + pmt = _("最終提示金額", "Final Offer"); annoyed++; if (annoyed > 3) @@ -3309,12 +4504,7 @@ static bool sell_haggle(object_type *o_ptr, s32b *price) allow_inc = TRUE; prt("", 1, 0); (void)sprintf(out_val, -#ifdef JP - "前回の提示価格 $%ld", (long)last_offer); -#else - "Your last bid %ld", (long)last_offer); -#endif - + _("前回の提示価格 $%ld", "Your last bid %ld"), (long)last_offer); put_str(out_val, 1, 39); say_comment_3(cur_ask, annoyed); } @@ -3355,11 +4545,7 @@ static void store_purchase(void) if (cur_store_num == STORE_MUSEUM) { -#ifdef JP - msg_print("博物館から取り出すことはできません。"); -#else - msg_print("Museum."); -#endif + msg_print(_("博物館から取り出すことはできません。", "Museum.")); return; } @@ -3367,23 +4553,12 @@ static void store_purchase(void) 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 -#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); @@ -3460,11 +4635,7 @@ static void store_purchase(void) { msg_format(_("一つにつき $%ldです。", "That costs %ld gold per item."), (long)(best)); } - - /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); - - /* Allow user abort */ if (amt <= 0) return; } j_ptr = &forge; @@ -3513,7 +4684,7 @@ static void store_purchase(void) choice = purchase_haggle(j_ptr, &price); /* Hack -- Got kicked out */ - if (st_ptr->store_open >= turn) return; + if (st_ptr->store_open >= current_world_ptr->game_turn) return; } /* Player wants it */ @@ -3557,7 +4728,7 @@ static void store_purchase(void) msg_format(_("%sを $%ldで購入しました。", "You bought %s for %ld gold."), o_name, (long)price); strcpy(record_o_name, o_name); - record_turn = turn; + record_turn = current_world_ptr->game_turn; if (record_buy) do_cmd_write_nikki(NIKKI_BUY, 0, o_name); object_desc(o_name, o_ptr, OD_NAME_ONLY); @@ -3574,7 +4745,7 @@ static void store_purchase(void) item_new = inven_carry(j_ptr); /* Describe the final result */ - object_desc(o_name, &inventory[item_new], 0); + object_desc(o_name, &p_ptr->inventory_list[item_new], 0); msg_format(_("%s(%c)を手に入れた。", "You have %s (%c)."), o_name, index_to_label(item_new)); /* Auto-inscription */ @@ -3621,7 +4792,7 @@ static void store_purchase(void) msg_print(_("店主は新たな在庫を取り出した。", "The shopkeeper brings out some new stock.")); } - /* New inventory */ + /* New p_ptr->inventory_list */ for (i = 0; i < 10; i++) { /* Maintain the store */ @@ -3670,7 +4841,7 @@ static void store_purchase(void) item_new = inven_carry(j_ptr); /* Describe just the result */ - object_desc(o_name, &inventory[item_new], 0); + object_desc(o_name, &p_ptr->inventory_list[item_new], 0); msg_format(_("%s(%c)を取った。", "You have %s (%c)."), o_name, index_to_label(item_new)); handle_stuff(); @@ -3728,10 +4899,9 @@ static void store_sell(void) object_type forge; object_type *q_ptr; - object_type *o_ptr; - cptr q, s; + concptr q, s; GAME_TEXT o_name[MAX_NLEN]; @@ -3763,20 +4933,8 @@ static void store_sell(void) s = _("欲しい物がないですねえ。", "You have nothing that I want."); } - if (!get_item(&item, q, s, (USE_EQUIP | USE_INVEN | USE_FLOOR | IGNORE_BOTHHAND_SLOT))) 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]; - } - + 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)) @@ -3785,17 +4943,12 @@ static void store_sell(void) return; } - /* Assume one item */ amt = 1; - /* Find out how many the player wants (letter means "all") */ if (o_ptr->number > 1) { - /* Get a quantity */ amt = get_quantity(NULL, o_ptr->number); - - /* Allow user abort */ if (amt <= 0) return; } q_ptr = &forge; @@ -3853,7 +5006,7 @@ static void store_sell(void) choice = sell_haggle(q_ptr, &price); /* Kicked out */ - if (st_ptr->store_open >= turn) return; + if (st_ptr->store_open >= current_world_ptr->game_turn) return; /* Sold... */ if (choice == 0) @@ -3976,7 +5129,7 @@ static void store_sell(void) msg_format(_("%sを置いた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item)); choice = 0; - /* Take it from the players inventory */ + /* Take it from the players p_ptr->inventory_list */ inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); @@ -4001,7 +5154,7 @@ static void store_sell(void) choice = 0; - /* Take it from the players inventory */ + /* Take it from the players p_ptr->inventory_list */ inven_item_increase(item, -amt); inven_item_describe(item); inven_item_optimize(item); @@ -4194,7 +5347,7 @@ static void store_process_command(void) case '-': { if (st_ptr->stock_num <= store_bottom) { - msg_print(_("これで全部です。", "Entire inventory is shown.")); + msg_print(_("これで全部です。", "Entire p_ptr->inventory_list is shown.")); } else{ store_top -= store_bottom; @@ -4212,7 +5365,7 @@ static void store_process_command(void) { if (st_ptr->stock_num <= store_bottom) { - msg_print(_("これで全部です。", "Entire inventory is shown.")); + msg_print(_("これで全部です。", "Entire p_ptr->inventory_list is shown.")); } else { @@ -4546,7 +5699,7 @@ void do_cmd_store(void) int which; int maintain_num; int i; - cave_type *c_ptr; + grid_type *g_ptr; bool need_redraw_store_inv; /* To redraw missiles damage and prices in store */ TERM_LEN w, h; @@ -4558,25 +5711,25 @@ void do_cmd_store(void) store_bottom = MIN_STOCK + xtra_stock; /* Access the player grid */ - c_ptr = &cave[p_ptr->y][p_ptr->x]; + g_ptr = ¤t_floor_ptr->grid_array[p_ptr->y][p_ptr->x]; /* Verify a store */ - if (!cave_have_flag_grid(c_ptr, FF_STORE)) + if (!cave_have_flag_grid(g_ptr, FF_STORE)) { msg_print(_("ここには店がありません。", "You see no store here.")); return; } /* Extract the store code */ - which = f_info[c_ptr->feat].subtype; + which = f_info[g_ptr->feat].subtype; old_town_num = p_ptr->town_num; if ((which == STORE_HOME) || (which == STORE_MUSEUM)) p_ptr->town_num = 1; - if (dun_level) p_ptr->town_num = NO_TOWN; + if (current_floor_ptr->dun_level) p_ptr->town_num = NO_TOWN; inner_town_num = p_ptr->town_num; /* Hack -- Check the "locked doors" */ - if ((town[p_ptr->town_num].store[which].store_open >= turn) || + if ((town_info[p_ptr->town_num].store[which].store_open >= current_world_ptr->game_turn) || (ironman_shops)) { msg_print(_("ドアに鍵がかかっている。", "The doors are locked.")); @@ -4585,7 +5738,7 @@ void do_cmd_store(void) } /* Calculate the number of store maintainances since the last visit */ - maintain_num = (turn - town[p_ptr->town_num].store[which].last_visit) / (TURNS_PER_TICK * STORE_TICKS); + maintain_num = (current_world_ptr->game_turn - town_info[p_ptr->town_num].store[which].last_visit) / (TURNS_PER_TICK * STORE_TICKS); /* Maintain the store max. 10 times */ if (maintain_num > 10) maintain_num = 10; @@ -4597,7 +5750,7 @@ void do_cmd_store(void) store_maint(p_ptr->town_num, which); /* Save the visit */ - town[p_ptr->town_num].store[which].last_visit = turn; + town_info[p_ptr->town_num].store[which].last_visit = current_world_ptr->game_turn; } forget_lite(); @@ -4618,10 +5771,10 @@ void do_cmd_store(void) cur_store_num = which; /* Hack -- save the store feature */ - cur_store_feat = c_ptr->feat; + cur_store_feat = g_ptr->feat; /* Save the store and owner pointers */ - st_ptr = &town[p_ptr->town_num].store[cur_store_num]; + st_ptr = &town_info[p_ptr->town_num].store[cur_store_num]; ot_ptr = &owners[cur_store_num][st_ptr->owner]; /* Start at the beginning */ @@ -4709,11 +5862,11 @@ void do_cmd_store(void) handle_stuff(); /* Pack Overflow */ - if (inventory[INVEN_PACK].k_idx) + if (p_ptr->inventory_list[INVEN_PACK].k_idx) { INVENTORY_IDX item = INVEN_PACK; - object_type *o_ptr = &inventory[item]; + object_type *o_ptr = &p_ptr->inventory_list[item]; /* Hack -- Flee from the store */ if (cur_store_num != STORE_HOME) @@ -4755,7 +5908,7 @@ void do_cmd_store(void) msg_format(_("%sが落ちた。(%c)", "You drop %s (%c)."), o_name, index_to_label(item)); - /* Remove it from the players inventory */ + /* Remove it from the players p_ptr->inventory_list */ inven_item_increase(item, -255); inven_item_describe(item); inven_item_optimize(item); @@ -4778,21 +5931,18 @@ void do_cmd_store(void) if (need_redraw_store_inv) display_inventory(); /* Hack -- get kicked out of the store */ - if (st_ptr->store_open >= turn) leave_store = TRUE; + if (st_ptr->store_open >= current_world_ptr->game_turn) leave_store = TRUE; } select_floor_music(); p_ptr->town_num = old_town_num; - /* Free turn */ - p_ptr->energy_use = 100; - + take_turn(p_ptr, 100); /* Hack -- Character is no longer in "icky" mode */ character_icky = FALSE; - /* Hack -- Cancel automatic command */ command_new = 0; @@ -4837,7 +5987,7 @@ void store_shuffle(int which) cur_store_num = which; /* Activate that store */ - st_ptr = &town[p_ptr->town_num].store[cur_store_num]; + st_ptr = &town_info[p_ptr->town_num].store[cur_store_num]; j = st_ptr->owner; /* Pick a new owner */ @@ -4848,7 +5998,7 @@ void store_shuffle(int which) for (i = 1;i < max_towns; i++) { if (i == p_ptr->town_num) continue; - if (st_ptr->owner == town[i].store[cur_store_num].owner) break; + if (st_ptr->owner == town_info[i].store[cur_store_num].owner) break; } if (i == max_towns) break; } @@ -4888,7 +6038,7 @@ void store_shuffle(int which) /*! * @brief 店の品揃えを変化させる / - * Maintain the inventory at the stores. + * Maintain the p_ptr->inventory_list at the stores. * @param town_num 町のID * @param store_num 店舗種類のID * @return なし @@ -4904,7 +6054,7 @@ void store_maint(int town_num, int store_num) if (store_num == STORE_MUSEUM) return; /* Activate that store */ - st_ptr = &town[town_num].store[store_num]; + st_ptr = &town_info[town_num].store[store_num]; /* Activate the owner */ ot_ptr = &owners[store_num][st_ptr->owner]; @@ -4983,7 +6133,7 @@ void store_init(int town_num, int store_num) cur_store_num = store_num; /* Activate that store */ - st_ptr = &town[town_num].store[store_num]; + st_ptr = &town_info[town_num].store[store_num]; /* Pick an owner */ @@ -4995,7 +6145,7 @@ void store_init(int town_num, int store_num) for (i = 1;i < max_towns; i++) { if (i == town_num) continue; - if (st_ptr->owner == town[i].store[store_num].owner) break; + if (st_ptr->owner == town_info[i].store[store_num].owner) break; } if (i == max_towns) break; } @@ -5037,7 +6187,7 @@ void move_to_black_market(object_type *o_ptr) /* Not in town */ if (!p_ptr->town_num) return; - st_ptr = &town[p_ptr->town_num].store[STORE_BLACK]; + st_ptr = &town_info[p_ptr->town_num].store[STORE_BLACK]; o_ptr->ident |= IDENT_STORE;