Only in Hengband_warwolf: Changes diff -ur Hengband/lib/edit/t0000001.txt Hengband_warwolf/lib/edit/t0000001.txt --- Hengband/lib/edit/t0000001.txt Sun Apr 8 05:50:10 2007 +++ Hengband_warwolf/lib/edit/t0000001.txt Sun Apr 8 07:00:00 2007 @@ -432,8 +432,10 @@ B:0:A:3:クエスト:0:0:q:6:0 B:$0:A:4:Teleport to other town:500:500:m:42:0 B:0:A:4:他の町へ移動:500:500:m:42:0 -B:$0:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 -B:0:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:$0:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:0:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +B:$0:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android +B:0:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android B:$1:N:Mayor:Uldrik:Human B:1:N:村長:ウルドリック:人間 diff -ur Hengband/lib/edit/t0000002.txt Hengband_warwolf/lib/edit/t0000002.txt --- Hengband/lib/edit/t0000002.txt Sun Apr 8 05:50:10 2007 +++ Hengband_warwolf/lib/edit/t0000002.txt Sun Apr 8 07:00:00 2007 @@ -305,8 +305,10 @@ B:4:A:2:噂を聞く:10:10:u:19:0 B:$4:A:3:Teleport to other town:500:500:m:42:0 B:4:A:3:他の町へ移動:500:500:m:42:0 -B:$4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 -B:4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:$4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +B:$4:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android +B:4:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android B:$5:N:Beastmaster:Lorien:Elf B:5:N:モンスター仙人:ロリエン:エルフ @@ -336,8 +338,10 @@ B:7:A:0:武器を強化する:400:800:w:23:0 B:$7:A:1:Enchant armor:300:600:a:24:0 B:7:A:1:防具を強化する:300:600:a:24:0 -B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 -B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +#B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +#B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +B:$7:C:None#0:Default#2:Warrior:Samurai:Cavalry:Berserker:Weaponsmith +B:7:C:None#0:Default#2:Warrior:Samurai:Cavalry:Berserker:Weaponsmith B:$9:N:Temple of Life:Crysania:Human B:9:N:生命魔術の塔:クリサニア:人間 @@ -345,8 +349,10 @@ B:9:A:0:治療の祈祷:0:150:h:28:0 B:$9:A:1:Restoration:400:1500:r:29:0 B:9:A:1:能力回復:400:1500:r:29:0 -B:$9:M:2:0:0:0:0:0:0:0:0:0 -B:9:M:2:0:0:0:0:0:0:0:0:0 +#B:$9:M:2:0:0:0:0:0:0:0:0:0 +#B:9:M:2:0:0:0:0:0:0:0:0:0 +B:$9:M:None#0:Life#2 +B:9:M:None#0:Life#2 B:$10:N:Thieves Guild:Lardbottom:Hobbit B:10:N:盗賊のギルド:ラードボトム:ホビット @@ -354,8 +360,10 @@ B:10:A:1:一泊する:0:100:r:17:0 B:$10:A:2:Identify possessions:100:2000:i:26:0 B:10:A:2:持ち物全てを鑑定:100:2000:i:26:0 -B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$10:C:None#0:Rogue#2 +B:10:C:None#0:Rogue#2 B:$11:N:Archers Guild:Trallin:Half-elf B:11:N:アーチャーのギルド:トゥラリン:ハーフエルフ @@ -363,8 +371,10 @@ B:11:A:0:矢や石等を強化する:20:40:a:30:0 B:$11:A:1:Enchant bow:400:800:b:31:0 B:11:A:1:弓を強化する:400:800:b:31:0 -B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 -B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +#B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +#B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +B:$11:C:None#0:Ranger#2:Archer#2 +B:11:C:None#0:Ranger#2:Archer#2 B:$12:N:Paladins Guild:Langordathur:Human B:12:N:パラディンのギルド:ランゴルダスール:人間 @@ -372,8 +382,10 @@ B:12:A:0:防具を強化する:300:600:a:24:0 B:$12:A:1:See Healers:0:150:h:28:0 B:12:A:1:治療家に会う:0:150:h:28:0 -B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$12:C:None#0:Paladin#2 +B:12:C:None#0:Paladin#2 D:###################################################################################################################################################################################################### D:#---------------------TTTT-------------------------------------------------------------TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT# diff -ur Hengband/lib/edit/t0000003.txt Hengband_warwolf/lib/edit/t0000003.txt --- Hengband/lib/edit/t0000003.txt Sun Apr 8 05:50:10 2007 +++ Hengband_warwolf/lib/edit/t0000003.txt Sun Apr 8 07:00:00 2007 @@ -264,8 +264,10 @@ B:4:A:2:噂を聞く:10:10:u:19:0 B:$4:A:3:Teleport to other town:500:500:m:42:0 B:4:A:3:他の町へ移動:500:500:m:42:0 -B:$4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 -B:4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:$4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +B:$4:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android +B:4:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android B:$5:N:Beastmaster:Draxle:Draconian B:5:N:モンスター仙人:ドラクスル:ドラコニアン @@ -287,8 +289,10 @@ B:7:A:1:防具を強化する:300:600:a:24:0 B:$7:A:2:Request quest:0:0:q:6:0 B:7:A:2:クエスト:0:0:q:6:0 -B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0:0 -B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0:0 +#B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0:0 +#B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0:0 +B:$7:C:None#0:Default#2:Warrior:Samurai:Cavalry:Berserker:Weaponsmith +B:7:C:None#0:Default#2:Warrior:Samurai:Cavalry:Berserker:Weaponsmith B:$8:N:Tower of Sorcery:Tanistil:Elf B:8:N:賢者の塔:タニスティル:エルフ @@ -299,8 +303,11 @@ B:$8:A:2:Identify possessions:100:800:i:26:0 B:8:A:2:持ち物全てを鑑定:100:800:i:26:0 #B:8:A:3:Request quest:0:0:q:6:2 -B:$8:M:0:3:0:0:0:0:0:0:0:0 -B:8:M:0:3:0:0:0:0:0:0:0:0 +#B:$8:A:3:クエスト:0:0:q:6:2 +#B:$8:M:0:3:0:0:0:0:0:0:0:0 +#B:8:M:0:3:0:0:0:0:0:0:0:0 +B:$8:M:None#0:Sorcery#3 +B:8:M:None#0:Sorcery#3 B:$9:N:Inner Temple:Eldore:Human B:9:N:寺院:エルドール:人間 @@ -308,8 +315,10 @@ B:9:A:0:治療の祈祷:0:100:h:28:0 B:$9:A:1:Restoration:300:1000:r:29:0 B:9:A:1:能力回復:300:1000:r:29:0 -B:$9:M:2:0:0:0:0:0:0:0:0:0 -B:9:M:2:0:0:0:0:0:0:0:0:0 +#B:$9:M:2:0:0:0:0:0:0:0:0:0 +#B:9:M:2:0:0:0:0:0:0:0:0:0 +B:$9:M:None#0:Life#2 +B:9:M:None#0:Life#2 B:$10:N:Thieves Guild:Paliro:Yeek B:10:N:盗賊のギルド:パリロ:イーク @@ -319,8 +328,10 @@ B:10:A:2:持ち物全てを鑑定:100:600:i:26:0 B:$10:A:3:request Quest:0:0:q:6:0 B:10:A:3:クエスト:0:0:q:6:0 -B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$10:C:None#0:Rogue#2 +B:10:C:None#0:Rogue#2 B:$11:N:Archers Guild:Angros:Elf B:11:N:アーチャーのギルド:アングロス:エルフ @@ -328,8 +339,10 @@ B:11:A:0:矢や石等を強化する:20:40:a:30:0 B:$11:A:1:Enchant bow:400:800:b:31:0 B:11:A:1:弓を強化する:400:800:b:31:0 -B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 -B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +#B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +#B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +B:$11:C:None#0:Ranger#2:Archer#2 +B:11:C:None#0:Ranger#2:Archer#2 B:$12:N:Paladins Guild:Vilios:Human B:12:N:パラディンのギルド:ヴィリオス:人間 @@ -337,8 +350,10 @@ B:12:A:0:防具を強化する:400:1000:a:24:0 B:$12:A:1:See Healers:0:150:h:28:0 B:12:A:1:治療家に会う:0:150:h:28:0 -B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$12:C:None#0:Paladin#2 +B:12:C:None#0:Paladin#2 B:$13:N:Trump Tower:Pelloi:Amberite B:13:N:トランプ魔術の塔:ペロイ:アンバライト @@ -346,8 +361,10 @@ B:13:A:0:ダンジョンへ帰還:100:200:r:33:0 B:$13:A:1:Teleport to dungeon-level:100000:1000000:t:34:0 B:13:A:1:階を指定してテレポート:100000:1000000:t:34:0 -B:$13:M:0:0:0:0:0:2:0:0:0:0 -B:13:M:0:0:0:0:0:2:0:0:0:0 +#B:$13:M:0:0:0:0:0:2:0:0:0:0 +#B:13:M:0:0:0:0:0:2:0:0:0:0 +B:$13:M:None#0:Trump#2 +B:13:M:None#0:Trump#2 # Town Layout D:###################################################################################################################################################################################################### diff -ur Hengband/lib/edit/t0000004.txt Hengband_warwolf/lib/edit/t0000004.txt --- Hengband/lib/edit/t0000004.txt Sun Apr 8 05:50:10 2007 +++ Hengband_warwolf/lib/edit/t0000004.txt Sun Apr 8 07:00:00 2007 @@ -171,8 +171,10 @@ B:4:A:2:噂を聞く:10:10:u:19:0 B:$4:A:3:Teleport to other town:500:500:m:42:0 B:4:A:3:他の町へ移動:500:500:m:42:0 -B:$4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 -B:4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:$4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:4:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +B:$4:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android +B:4:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android B:$5:N:Beastmaster:Aradreth:Elf B:5:N:モンスター仙人:アラドレス:エルフ @@ -194,8 +196,10 @@ B:7:A:1:防具を強化する:200:500:a:24:0 B:$7:A:2:Request quest:0:0:q:6:0 B:7:A:2:クエスト:0:0:q:6:0 -B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 -B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +#B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +#B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +B:$7:C:None#0:Default#2:Warrior:Samurai:Cavalry:Berserker:Weaponsmith +B:7:C:None#0:Default#2:Warrior:Samurai:Cavalry:Berserker:Weaponsmith B:$8:N:Wizards Tower:Valceronwe:Sprite B:8:N:賢者の塔:ヴァルセロン:妖精 @@ -205,8 +209,10 @@ B:8:A:1:全てのアイテムを再充填:0:0:a:45:0 B:$8:A:2:Identify posessions:200:1000:i:26:0 B:8:A:2:持ち物全てを鑑定:200:1000:i:26:0 -B:$8:C:0:2:0:0:1:0:1:0:0:0:2:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0 -B:8:C:0:2:0:0:1:0:1:0:0:0:2:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$8:C:0:2:0:0:1:0:1:0:0:0:2:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0 +#B:8:C:0:2:0:0:1:0:1:0:0:0:2:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0 +B:$8:C:None#0:Default#2:Mage:Ranger#1:Warrior-Mage#1:High-Mage:Sorcerer +B:8:C:None#0:Default#2:Mage:Ranger#1:Warrior-Mage#1:High-Mage:Sorcerer B:$9:N:Inner Temple:Kabir:Dwarf B:9:N:寺院:カビー:ドワーフ @@ -214,8 +220,10 @@ B:9:A:0:治療の祈祷:0:100:h:28:0 B:$9:A:1:Restoration:300:1000:r:29:0 B:9:A:1:能力回復:300:1000:r:29:0 -B:$9:C:0:0:2:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:9:C:0:0:2:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$9:C:0:0:2:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:9:C:0:0:2:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$9:C:None#0:Priest#2:Paladin#1 +B:9:C:None#0:Priest#2:Paladin#1 B:$10:N:Thieves Den:Molvrae:Dark Elf B:10:N:盗賊のアジト:モルブラエ:ダーク・エルフ @@ -223,8 +231,10 @@ B:10:A:1:一泊する:0:50:r:17:0 B:$10:A:2:Identify possessions:175:800:i:26:0 B:10:A:2:持ち物全てを鑑定:175:800:i:26:0 -B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$10:C:None#0:Rogue#2 +B:10:C:None#0:Rogue#2 B:$11:N:Archers Tavern:Celegail:Elf B:11:N:アーチャーの酒場:ケレガイル:エルフ @@ -232,8 +242,10 @@ B:11:A:0:矢や石等を強化する:22:44:a:30:0 B:$11:A:1:Enchant bow:400:500:b:31:0 B:11:A:1:弓を強化する:400:500:b:31:0 -B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 -B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +#B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +#B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +B:$11:C:None#0:Ranger#2:Archer#2 +B:11:C:None#0:Ranger#2:Archer#2 B:$12:N:Paladins Sanctum:Calpirosse:Half-Elf B:12:N:パラディンの聖所:カルパイロス:ハーフエルフ @@ -241,8 +253,10 @@ B:12:A:0:防具を強化する:240:440:a:24:0 B:$12:A:1:See Healers:0:100:h:28:0 B:12:A:1:治療家に会う:0:100:h:28:0 -B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$12:C:None#0:Paladin#2 +B:12:C:None#0:Paladin#2 B:$13:N:Trump Tower:Colleuse:Amberite B:13:N:トランプ魔術の塔:コレウス:アンバライト @@ -250,10 +264,14 @@ B:13:A:0:ダンジョンへ帰還:0:150:r:33:0 B:$13:A:1:Teleport to dungeon-level:100000:1000000:t:34:0 B:13:A:1:階を指定してテレポート:100000:1000000:t:34:0 -B:$13:R:0:0:0:0:0:0:0:0:1: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 -B:13:R:0:0:0:0:0:0:0:0:1: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 -B:$13:M:0:0:0:0:0:2:0:0:0:0 -B:13:M:0:0:0:0:0:2:0:0:0:0 +#B:$13:R:0:0:0:0:0:0:0:0:1: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 +#B:13:R:0:0:0:0:0:0:0:0:1: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 +B:$13:R:None#0:Amberite#1 +B:13:R:None#0:Amberite#1 +#B:$13:M:0:0:0:0:0:2:0:0:0:0 +#B:13:M:0:0:0:0:0:2:0:0:0:0 +B:$13:M:None#0:Trump#2 +B:13:M:None#0:Trump#2 # Town Layout D:###################################################################################################################################################################################################### diff -ur Hengband/lib/edit/t0000005.txt Hengband_warwolf/lib/edit/t0000005.txt --- Hengband/lib/edit/t0000005.txt Sun Apr 8 05:50:10 2007 +++ Hengband_warwolf/lib/edit/t0000005.txt Sun Apr 8 07:00:00 2007 @@ -128,8 +128,10 @@ B:4:A:1:食事をする:2:2:f:18:1 B:$4:A:2:Listen for rumors:10:10:u:19:0 B:4:A:2:噂を聞く:10:10:u:19:0 -B:$4:R:2:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 -B:4:R:2:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:$4:R:2:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:4:R:2:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +B:$4:R:None#1:Default#0:Human#2:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android +B:4:R:None#1:Default#0:Human#2:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android B:$4:A:3:Identify item:100:100:i:44:0 B:4:A:3:アイテム鑑定:100:100:i:44:0 @@ -143,8 +145,10 @@ B:8:A:2:持ち物全てを鑑定:100:800:i:26:0 B:$8:A:3:Request quest:0:0:q:6:1 B:8:A:3:クエスト:0:0:q:6:1 -B:$8:M:0:2:0:0:0:0:0:0:0:0 -B:8:M:0:2:0:0:0:0:0:0:0:0 +#B:$8:M:0:2:0:0:0:0:0:0:0:0 +#B:8:M:0:2:0:0:0:0:0:0:0:0 +B:$8:M:None#0:Sorcery#2 +B:8:M:None#0:Sorcery#2 B:$14:N:Chaos Tower:Xeno:Beastman B:14:N:カオスの塔:ゼノ:獣人 @@ -152,10 +156,14 @@ B:14:A:0:クエスト:0:0:q:6:1 B:$14:A:1:Cure mutation:1000:5000:m:35:0 B:14:A:1:突然変異を治療する:1000:5000:m:35:0 -B:$14:R: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:1:0:0:0:0:0:0:0 -B:14:R: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:1:0:0:0:0:0:0:0 -B:$14:M:0:0:0:2:0:0:0:0:0:0 -B:14:M:0:0:0:2:0:0:0:0:0:0 +#B:$14:R: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:1:0:0:0:0:0:0:0 +#B:14:R: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:1:0:0:0:0:0:0:0 +B:$14:R:None#0:Beastman#1 +B:14:R:None#0:Beastman#1 +#B:$14:M:0:0:0:2:0:0:0:0:0:0 +#B:14:M:0:0:0:2:0:0:0:0:0:0 +B:$14:M:None#0:Chaos#2 +B:14:M:None#0:Chaos#2 B:$15:N:Nature Tower:Josh:Elf B:15:N:自然魔術の塔:ジョッシュ:エルフ @@ -163,8 +171,10 @@ B:15:A:0:クエスト:0:0:q:6:1 B:$15:A:1:Ritual of balance:2000:10000:n:41:0 B:15:A:1:平衡化の儀式:2000:10000:n:41:0 -B:$15:M:0:0:2:0:0:0:0:0:0:0 -B:15:M:0:0:2:0:0:0:0:0:0:0 +#B:$15:M:0:0:2:0:0:0:0:0:0:0 +#B:15:M:0:0:2:0:0:0:0:0:0:0 +B:$15:M:None#0:Nature#2 +B:15:M:None#0:Nature#2 # Town Layout diff -ur Hengband/lib/edit/t_lite.txt Hengband_warwolf/lib/edit/t_lite.txt --- Hengband/lib/edit/t_lite.txt Sun Apr 8 05:50:10 2007 +++ Hengband_warwolf/lib/edit/t_lite.txt Sun Apr 8 07:00:00 2007 @@ -498,8 +498,10 @@ B:0:A:1:食事をする:1:1:f:18:1 B:$0:A:2:Listen for rumors:5:5:u:19:0 B:0:A:2:噂を聞く:5:5:u:19:0 -B:$0:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 -B:0:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:$0:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +#B:0:R:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:1:0:0:0:0:0:1:1:0:1:0:1:1:1:0 +B:$0:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android +B:0:R:None#1:Default#0:Golem:Skeleton:Zombie:Vampire:Spectre:Ent:Balrog:Android B:$1:N:Mayor:Uldrik:Human B:1:N:村長:ウルドリック:人間 @@ -549,13 +551,13 @@ B:5:N:武器匠:水庵:人間 B:$5:A:0:Compare weapons:1000:1000:c:21:0 B:5:A:0:武器を比較する:1000:1000:c:21:0 -B:$6:A:1:Evaluate AC:1000:1000:a:46:0 -B:6:A:1:防御について調べる:1000:1000:a:46:0 +B:$5:A:1:Evaluate AC:1000:1000:a:46:0 +B:5:A:1:防御について調べる:1000:1000:a:46:0 ?:[EQU $QUEST5 3 4] B:$5:A:0:Compare weapons:150:150:c:21:0 B:5:A:0:武器を比較する:150:150:c:21:0 -B:$6:A:1:Evaluate AC:150:150:a:46:0 -B:6:A:1:防御について調べる:150:150:a:46:0 +B:$5:A:1:Evaluate AC:150:150:a:46:0 +B:5:A:1:防御について調べる:150:150:a:46:0 ?:1 B:$6:N:Fighters Hall:Barak:Human @@ -564,8 +566,10 @@ B:6:A:0:武器を強化する:400:800:w:23:0 B:$6:A:1:Enchant armor:300:600:a:24:0 B:6:A:1:防具を強化する:300:600:a:24:0 -B:$6:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 -B:6:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +#B:$6:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +#B:6:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0 +B:$6:C:None#0:Default#2:Warrior:Samurai:Cavalry:Berserker:Weaponsmith +B:6:C:None#0:Default#2:Warrior:Samurai:Cavalry:Berserker:Weaponsmith B:$7:N:Temple of Life:Crysania:Human B:7:N:生命魔術の塔:クリサニア:人間 @@ -573,8 +577,10 @@ B:7:A:0:治療の祈祷:0:200:h:28:0 B:$7:A:1:Restoration:300:1500:r:29:0 B:7:A:1:能力回復:300:1500:r:29:0 -B:$7:M:2:0:0:0:0:0:0:0:0:0 -B:7:M:2:0:0:0:0:0:0:0:0:0 +#B:$7:M:2:0:0:0:0:0:0:0:0:0 +#B:7:M:2:0:0:0:0:0:0:0:0:0 +B:$7:M:None#0:Life#2 +B:7:M:None#0:Life#2 B:$8:N:Thieves Guild:Lardbottom:Hobbit B:8:N:盗賊のギルド:ラードボトム:ホビット @@ -582,8 +588,10 @@ B:8:A:1:一泊する:0:100:r:17:0 B:$8:A:2:Identify possessions:100:2000:i:26:0 B:8:A:2:持ち物全てを鑑定:100:2000:i:26:0 -B:$8:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:8:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$8:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:8:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$8:C:None#0:Rogue#2 +B:8:C:None#0:Rogue#2 B:$9:N:Archers Guild:Trallin:Half-elf B:9:N:アーチャーのギルド:トゥラリン:ハーフエルフ @@ -591,8 +599,10 @@ B:9:A:0:矢や石等を強化する:20:40:a:30:0 B:$9:A:1:Enchant bow:400:800:b:31:0 B:9:A:1:弓を強化する:400:800:b:31:0 -B:$9:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 -B:9:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +#B:$9:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +#B:9:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0 +B:$9:C:None#0:Ranger#2:Archer#2 +B:9:C:None#0:Ranger#2:Archer#2 B:$10:N:Paladins Guild:Langordathur:Human B:10:N:パラディンのギルド:ランゴルダスール:人間 @@ -600,8 +610,10 @@ B:10:A:0:防具を強化する:300:600:a:24:0 B:$10:A:1:See Healers:0:200:h:28:0 B:10:A:1:治療家に会う:0:200:h:28:0 -B:$10:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 -B:10:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:$10:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +#B:10:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0 +B:$10:C:None#0:Paladin#2 +B:10:C:None#0:Paladin#2 B:$11:N:Tower of Sorcery:Tanistil:Elf B:11:N:仙術の塔:タニスティル:エルフ @@ -611,8 +623,10 @@ B:11:A:1:持ち物全てを鑑定:100:800:i:26:0 B:$11:A:2:Request quest:0:0:q:6:2 B:11:A:2:クエスト:0:0:q:6:2 -B:$11:M:0:2:0:0:0:0:0:0:0:0 -B:11:M:0:2:0:0:0:0:0:0:0:0 +#B:$11:M:0:2:0:0:0:0:0:0:0:0 +#B:11:M:0:2:0:0:0:0:0:0:0:0 +B:$11:M:None#0:Sorcery#2 +B:11:M:None#0:Sorcery#2 B:$12:N:Trump Tower:Pelloi:Amberite B:12:N:トランプ魔術の塔:ペロイ:アンバライト @@ -620,8 +634,10 @@ B:12:A:0:ダンジョンへ帰還:100:200:r:33:0 B:$12:A:1:Teleport to dungeon-level:100000:1000000:t:34:0 B:12:A:1:階を指定してテレポート:100000:1000000:t:34:0 -B:$12:M:0:0:0:0:0:2:0:0:0:0 -B:12:M:0:0:0:0:0:2:0:0:0:0 +#B:$12:M:0:0:0:0:0:2:0:0:0:0 +#B:12:M:0:0:0:0:0:2:0:0:0:0 +B:$12:M:None#0:Trump#2 +B:12:M:None#0:Trump#2 B:$13:N:Chaos Tower:Xeno:Beastman B:13:N:カオスの塔:ゼノ:獣人 @@ -629,10 +645,14 @@ B:13:A:0:クエスト:0:0:q:6:1 B:$13:A:1:Cure mutation:1000:5000:m:35:0 B:13:A:1:突然変異を治療する:1000:5000:m:35:0 -B:$13:R: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:1:0:0:0:0:0:0:0 -B:13:R: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:1:0:0:0:0:0:0:0 -B:$13:M:0:0:0:2:0:0:0:0:0:0 -B:13:M:0:0:0:2:0:0:0:0:0:0 +#B:$13:R: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:1:0:0:0:0:0:0:0 +#B:13:R: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:1:0:0:0:0:0:0:0 +B:$13:R:None#0:Beastman#1 +B:13:R:None#0:Beastman#1 +#B:$13:M:0:0:0:2:0:0:0:0:0:0 +#B:13:M:0:0:0:2:0:0:0:0:0:0 +B:$13:M:None#0:Chaos#2 +B:13:M:None#0:Chaos#2 B:$14:N:Nature Tower:Josh:Elf B:14:N:自然魔術の塔:ジョッシュ:エルフ @@ -640,8 +660,10 @@ B:14:A:0:クエスト:0:0:q:6:2 B:$14:A:1:Ritual of balance:2000:10000:n:41:0 B:14:A:1:平衡化の儀式:2000:10000:n:41:0 -B:$14:M:0:0:2:0:0:0:0:0:0:0 -B:14:M:0:0:2:0:0:0:0:0:0:0 +#B:$14:M:0:0:2:0:0:0:0:0:0:0 +#B:14:M:0:0:2:0:0:0:0:0:0:0 +B:$14:M:None#0:Nature#2 +B:14:M:None#0:Nature#2 B:$15:N:Hunter's office:Kopei:Human B:15:N:ハンター事務所:こうぺい:人間 diff -ur Hengband/lib/help/editor.txt Hengband_warwolf/lib/help/editor.txt --- Hengband/lib/help/editor.txt Sun Apr 8 05:50:11 2007 +++ Hengband_warwolf/lib/help/editor.txt Mon Apr 9 12:51:59 2007 @@ -314,7 +314,7 @@ Half-Giant, Half-Titan, Cyclops, Yeek, Klackon, Kobold, Nibelung, Dark-Elf, Draconian, Mindflayer, Imp, Golem, Skeleton, Zombie, Vampire, Spectre, Sprite, Beastman, Ent, - Archon, Balrog, Dunadan, Shadow-Fairy, Kutar, Android, + Archon, Balrog, Dunadan, Shadow-Fairy, Kutar, Android, Werewolf $CLASS Returns name of player class. One of below: diff -ur Hengband/lib/help/jeditor.txt Hengband_warwolf/lib/help/jeditor.txt --- Hengband/lib/help/jeditor.txt Sun Apr 8 05:50:11 2007 +++ Hengband_warwolf/lib/help/jeditor.txt Mon Apr 9 12:52:04 2007 @@ -544,7 +544,7 @@ Cyclops, Yeek, Klackon, Kobold, Nibelung, Dark-Elf, Draconian, Mindflayer, Imp, Golem, Skeleton, Zombie, Vampire, Spectre, Sprite, Beastman, Ent, Archon, Balrog, Dunadan, Shadow-Fairy, Kuta, - Android + Android, Werewolf のどれか $CLASS diff -ur Hengband/lib/help/jraceclas.txt Hengband_warwolf/lib/help/jraceclas.txt --- Hengband/lib/help/jraceclas.txt Sun Apr 8 05:50:11 2007 +++ Hengband_warwolf/lib/help/jraceclas.txt Mon Apr 9 12:52:10 2007 @@ -413,6 +413,17 @@ 力を得られませんが、油を補給する事で動力源を得る事ができます。 +***** +--- ワーウルフ --- + + ワーウルフは、人間が他のワーウルフに噛まれてしまった事により生まれ + ました。普段は人間とさほど変わらない能力ですが、夜になると狼に変身 + してしまいます。狼に変身している間は、修行僧のように武器を使わず戦 + う事が可能となります。また、自己を制御できないので、魔法を使う事は + できず、魔法道具を使う事も苦手になってしまいます。経験を積むと自由 + に変身する事ができるようになります。", + + ***** === 職業 === @@ -1061,6 +1072,8 @@ 影フェアリー -2 +2 +2 +1 -1 +0 7 +20% クター +0 -1 -1 +1 +2 +3 11 +40% アンドロイド +4 -5 -5 +0 +4 -2 13 +100% +ワーウルフ(人) +0 +0 +0 +0 +0 +0 10 +25% +ワーウルフ(狼) +2 -2 -1 -1 +2 -2 12 +25% --- Table 2 - Class Statistic Bonus Table --- @@ -1159,6 +1172,8 @@ 影フェアリー +7 +8 +0 +6 +12 +15 -10 -5 40 feet クター -2 +5 +5 +5 -2 +6 +0 -5 None アンドロイド +0 -5 +0 -2 +3 +14 +20 +10 None +ワーウルフ(人) +0 +0 +0 +0 +3 +10 +5 +5 None +ワーウルフ(狼) -5 -20 -1 -1 +5 +12 +15 -10 30 feet --- Table 5 - Class Skill Bonus Table --- diff -ur Hengband/lib/help/raceclas.txt Hengband_warwolf/lib/help/raceclas.txt --- Hengband/lib/help/raceclas.txt Sun Apr 8 05:50:12 2007 +++ Hengband_warwolf/lib/help/raceclas.txt Mon Apr 9 12:52:50 2007 @@ -459,6 +459,19 @@ use flasks of oil as their energy source. +***** +--- Werewolf --- + + A werewolf appeared by the thing that man had been bitten by + other werewolf. Usually though an ability very not different from + other human, When the night comes, it transforms to the wolf. + While it transforms to the wolf, you do not use arms and can fight + like a monk. Moreover, because the self cannot be controlled, + you cannot cast the magic and becomes not good at use magic device. + When you acquire the experience, you come to be able to + transform freely. + + ***** === The Classes === @@ -1143,6 +1156,8 @@ Shadow-Fairy -2 +2 +2 +1 -1 +0 7 +20% Kutar +0 -1 -1 +1 +2 +3 11 +40% Android +4 -5 -5 +0 +4 -2 13 +100% +Werewolf(Human)+0 +0 +0 +0 +0 +0 10 +25% +Werewolf(Wolf) +2 -2 -1 -1 +2 -2 12 +25% --- Table 2 - Class Statistic Bonus Table --- @@ -1244,6 +1259,9 @@ Shadow-Fairy +7 +8 +0 +6 +12 +15 -10 -5 40 feet Kutar -2 +5 +5 +5 -2 +6 +0 -5 None Android +0 -5 +0 -2 +3 +14 +20 +10 None +Werewolf(Human)+0 +0 +0 +0 +3 +10 +5 +5 None +Werewolf(Wolf) -5 -20 -1 -1 +5 +12 +15 -10 30 feet + --- Table 5 - Class Skill Bonus Table --- diff -ur Hengband/lib/pref/pref-opt.prf Hengband_warwolf/lib/pref/pref-opt.prf --- Hengband/lib/pref/pref-opt.prf Sun Apr 8 05:50:13 2007 +++ Hengband_warwolf/lib/pref/pref-opt.prf Sun Apr 8 07:00:00 2007 @@ -76,7 +76,7 @@ Y:empty_levels X:bound_walls_perm Y:last_words -Y:send_score +#Y:send_score X:allow_debug_opts ##### Disturbance ##### diff -ur Hengband/lib/pref/xtra-new.prf Hengband_warwolf/lib/pref/xtra-new.prf --- Hengband/lib/pref/xtra-new.prf Sun Apr 8 05:50:13 2007 +++ Hengband_warwolf/lib/pref/xtra-new.prf Mon Apr 9 12:52:56 2007 @@ -88,6 +88,8 @@ R:0:0/0x91 ?:[EQU $RACE Android] R:0:0/0x97 +?:[EQU $RACE Werewolf] +R:0:0/0x80 ?:[EQU $CLASS Warrior] diff -ur Hengband/lib/pref/xtra-xxx.prf Hengband_warwolf/lib/pref/xtra-xxx.prf --- Hengband/lib/pref/xtra-xxx.prf Sun Apr 8 05:50:13 2007 +++ Hengband_warwolf/lib/pref/xtra-xxx.prf Mon Apr 9 12:53:01 2007 @@ -83,6 +83,8 @@ R:0:0/0x91 ?:[EQU $RACE Android] R:0:0/0x97 +?:[EQU $RACE Werewolf] +R:0:0/0x80 ?:[EQU $CLASS Warrior] R:0:0xA4/0 diff -ur Hengband/src/autopick.c Hengband_warwolf/src/autopick.c --- Hengband/src/autopick.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/autopick.c Sun Apr 8 07:00:00 2007 @@ -18,57 +18,61 @@ /* * Macros for Keywords */ -#define FLG_ALL 0 -#define FLG_UNAWARE 1 -#define FLG_UNIDENTIFIED 2 -#define FLG_IDENTIFIED 3 -#define FLG_STAR_IDENTIFIED 4 -#define FLG_COLLECTING 5 -#define FLG_ARTIFACT 6 -#define FLG_EGO 7 -#define FLG_GOOD 10 -#define FLG_NAMELESS 11 -#define FLG_AVERAGE 12 -#define FLG_WORTHLESS 13 -#define FLG_RARE 14 -#define FLG_COMMON 15 -#define FLG_BOOSTED 16 -#define FLG_MORE_DICE 17 -#define FLG_MORE_BONUS 18 -#define FLG_WANTED 19 -#define FLG_UNIQUE 20 -#define FLG_HUMAN 21 -#define FLG_UNREADABLE 22 -#define FLG_REALM1 23 -#define FLG_REALM2 24 -#define FLG_FIRST 25 -#define FLG_SECOND 26 -#define FLG_THIRD 27 -#define FLG_FOURTH 28 - -#define FLG_ITEMS 30 -#define FLG_WEAPONS 31 -#define FLG_FAVORITE_WEAPONS 32 -#define FLG_ARMORS 33 -#define FLG_MISSILES 34 -#define FLG_DEVICES 35 -#define FLG_LIGHTS 36 -#define FLG_JUNKS 37 -#define FLG_CORPSES 38 -#define FLG_SPELLBOOKS 39 -#define FLG_HAFTED 40 -#define FLG_SHIELDS 41 -#define FLG_BOWS 42 -#define FLG_RINGS 43 -#define FLG_AMULETS 44 -#define FLG_SUITS 45 -#define FLG_CLOAKS 46 -#define FLG_HELMS 47 -#define FLG_GLOVES 48 -#define FLG_BOOTS 49 - -#define FLG_NOUN_BEGIN FLG_ITEMS -#define FLG_NOUN_END FLG_BOOTS +enum +{ + FLG_ALL, + FLG_UNAWARE, + FLG_UNIDENTIFIED, + FLG_IDENTIFIED, + FLG_STAR_IDENTIFIED, + FLG_COLLECTING, + FLG_ARTIFACT, + FLG_EGO, + FLG_GOOD = 10, + FLG_NAMELESS, + FLG_AVERAGE, + FLG_WORTHLESS, + FLG_RARE, + FLG_COMMON, + FLG_BOOSTED, + FLG_MORE_DICE, + FLG_MORE_BONUS, + FLG_WANTED, + FLG_UNIQUE, + FLG_HUMAN, + FLG_UNREADABLE, + FLG_REALM1, + FLG_REALM2, + FLG_FIRST, + FLG_SECOND, + FLG_THIRD, + FLG_FOURTH, + + FLG_NOUN_BEGIN, + FLG_ITEMS = FLG_NOUN_BEGIN, + FLG_WEAPONS, + FLG_FAVORITE_WEAPONS, + FLG_ARMORS, + FLG_MISSILES, + FLG_DEVICES, + FLG_LIGHTS, + FLG_JUNKS, + FLG_CORPSES, + FLG_SPELLBOOKS, + FLG_HAFTED, + FLG_SHIELDS, + FLG_BOWS, + FLG_RINGS, + FLG_AMULETS, + FLG_SUITS, + FLG_CLOAKS, + FLG_HELMS, + FLG_GLOVES, + FLG_BOOTS, + + MAX_FLG, + FLG_NOUN_END = MAX_FLG - 1 +}; #ifdef JP @@ -528,13 +532,12 @@ * are almost meaningless. * Register the ego type only. */ - ego_item_type *e_ptr = &e_info[o_ptr->name2]; #ifdef JP /* エゴ銘には「^」マークが使える */ - sprintf(name_str, "^%s", e_name + e_ptr->name); + sprintf(name_str, "^%s", egonam_obj(o_ptr)); #else /* We ommit the basename and cannot use the ^ mark */ - strcpy(name_str, e_name + e_ptr->name); + strcpy(name_str, egonam_obj(o_ptr)); #endif /* Don't use the object description */ @@ -3855,87 +3858,90 @@ /* * Editor command id's */ -#define EC_QUIT 1 -#define EC_SAVEQUIT 2 -#define EC_REVERT 3 -#define EC_HELP 4 -#define EC_RETURN 5 -#define EC_LEFT 6 -#define EC_DOWN 7 -#define EC_UP 8 -#define EC_RIGHT 9 -#define EC_BOL 10 -#define EC_EOL 11 -#define EC_PGUP 12 -#define EC_PGDOWN 13 -#define EC_TOP 14 -#define EC_BOTTOM 15 -#define EC_CUT 16 -#define EC_COPY 17 -#define EC_PASTE 18 -#define EC_BLOCK 19 -#define EC_KILL_LINE 20 -#define EC_DELETE_CHAR 21 -#define EC_BACKSPACE 22 -#define EC_SEARCH_STR 23 -#define EC_SEARCH_FORW 24 -#define EC_SEARCH_BACK 25 -#define EC_SEARCH_OBJ 26 -#define EC_SEARCH_DESTROYED 27 -#define EC_INSERT_OBJECT 28 -#define EC_INSERT_DESTROYED 29 -#define EC_INSERT_BLOCK 30 -#define EC_INSERT_MACRO 31 -#define EC_INSERT_KEYMAP 32 -#define EC_CL_AUTOPICK 33 -#define EC_CL_DESTROY 34 -#define EC_CL_LEAVE 35 -#define EC_CL_QUERY 36 -#define EC_CL_NO_DISP 37 -#define EC_OK_COLLECTING 38 -#define EC_IK_UNAWARE 39 -#define EC_IK_UNIDENTIFIED 40 -#define EC_IK_IDENTIFIED 41 -#define EC_IK_STAR_IDENTIFIED 42 -#define EC_OK_BOOSTED 43 -#define EC_OK_MORE_DICE 44 -#define EC_OK_MORE_BONUS 45 -#define EC_OK_WORTHLESS 46 -#define EC_OK_ARTIFACT 47 -#define EC_OK_EGO 48 -#define EC_OK_GOOD 49 -#define EC_OK_NAMELESS 50 -#define EC_OK_AVERAGE 51 -#define EC_OK_RARE 52 -#define EC_OK_COMMON 53 -#define EC_OK_WANTED 54 -#define EC_OK_UNIQUE 55 -#define EC_OK_HUMAN 56 -#define EC_OK_UNREADABLE 57 -#define EC_OK_REALM1 58 -#define EC_OK_REALM2 59 -#define EC_OK_FIRST 60 -#define EC_OK_SECOND 61 -#define EC_OK_THIRD 62 -#define EC_OK_FOURTH 63 -#define EC_KK_WEAPONS 64 -#define EC_KK_FAVORITE_WEAPONS 65 -#define EC_KK_ARMORS 66 -#define EC_KK_MISSILES 67 -#define EC_KK_DEVICES 68 -#define EC_KK_LIGHTS 69 -#define EC_KK_JUNKS 70 -#define EC_KK_CORPSES 71 -#define EC_KK_SPELLBOOKS 72 -#define EC_KK_SHIELDS 73 -#define EC_KK_BOWS 74 -#define EC_KK_RINGS 75 -#define EC_KK_AMULETS 76 -#define EC_KK_SUITS 77 -#define EC_KK_CLOAKS 78 -#define EC_KK_HELMS 79 -#define EC_KK_GLOVES 80 -#define EC_KK_BOOTS 81 +enum +{ + EC_QUIT = 1, + EC_SAVEQUIT, + EC_REVERT, + EC_HELP, + EC_RETURN, + EC_LEFT, + EC_DOWN, + EC_UP, + EC_RIGHT, + EC_BOL, + EC_EOL, + EC_PGUP, + EC_PGDOWN, + EC_TOP, + EC_BOTTOM, + EC_CUT, + EC_COPY, + EC_PASTE, + EC_BLOCK, + EC_KILL_LINE, + EC_DELETE_CHAR, + EC_BACKSPACE, + EC_SEARCH_STR, + EC_SEARCH_FORW, + EC_SEARCH_BACK, + EC_SEARCH_OBJ, + EC_SEARCH_DESTROYED, + EC_INSERT_OBJECT, + EC_INSERT_DESTROYED, + EC_INSERT_BLOCK, + EC_INSERT_MACRO, + EC_INSERT_KEYMAP, + EC_CL_AUTOPICK, + EC_CL_DESTROY, + EC_CL_LEAVE, + EC_CL_QUERY, + EC_CL_NO_DISP, + EC_OK_COLLECTING, + EC_IK_UNAWARE, + EC_IK_UNIDENTIFIED, + EC_IK_IDENTIFIED, + EC_IK_STAR_IDENTIFIED, + EC_OK_BOOSTED, + EC_OK_MORE_DICE, + EC_OK_MORE_BONUS, + EC_OK_WORTHLESS, + EC_OK_ARTIFACT, + EC_OK_EGO, + EC_OK_GOOD, + EC_OK_NAMELESS, + EC_OK_AVERAGE, + EC_OK_RARE, + EC_OK_COMMON, + EC_OK_WANTED, + EC_OK_UNIQUE, + EC_OK_HUMAN, + EC_OK_UNREADABLE, + EC_OK_REALM1, + EC_OK_REALM2, + EC_OK_FIRST, + EC_OK_SECOND, + EC_OK_THIRD, + EC_OK_FOURTH, + EC_KK_WEAPONS, + EC_KK_FAVORITE_WEAPONS, + EC_KK_ARMORS, + EC_KK_MISSILES, + EC_KK_DEVICES, + EC_KK_LIGHTS, + EC_KK_JUNKS, + EC_KK_CORPSES, + EC_KK_SPELLBOOKS, + EC_KK_SHIELDS, + EC_KK_BOWS, + EC_KK_RINGS, + EC_KK_AMULETS, + EC_KK_SUITS, + EC_KK_CLOAKS, + EC_KK_HELMS, + EC_KK_GLOVES, + EC_KK_BOOTS, +}; /* Manu names */ diff -ur Hengband/src/avatar.c Hengband_warwolf/src/avatar.c --- Hengband/src/avatar.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/avatar.c Mon Apr 9 12:41:50 2007 @@ -358,6 +358,9 @@ p_ptr->vir_types[i++] = V_UNLIFE; break; case RACE_BEASTMAN: +#ifdef ADD_WEREWOLF + case RACE_WEREWOLF: +#endif p_ptr->vir_types[i++] = V_CHANCE; break; } diff -ur Hengband/src/birth.c Hengband_warwolf/src/birth.c --- Hengband/src/birth.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/birth.c Mon Apr 9 12:46:16 2007 @@ -32,6 +32,8 @@ #define MAX_TRIES 100 #define MAX_CLASS_CHOICE MAX_CLASS +#define LIMIT_CLASS_BY_SEX(idx) (class_info[idx].sex && (class_info[idx].sex != (p_ptr->psex+1))) +#define LIMIT_SEIKAKU_BY_SEX(idx) (seikaku_info[idx].sex && (seikaku_info[idx].sex != (p_ptr->psex+1))) /* * Forward declare @@ -1608,6 +1610,28 @@ {", and you firmly believe that you are a real one.", 95, 158, 0, 50}, {", and you are almost indistinguishable from a real one.", 100, 158, 0, 100}, #endif + +#ifdef ADD_WEREWOLF +#ifdef JP + {"あなたは以前は農奴の養子でしたが、", 40,175, 176, 65}, + {"あなたは以前は自作農の養子でしたが、", 65,175, 176, 80}, + {"あなたは以前は町人の養子でしたが、", 80,175, 176, 90}, + {"あなたは以前は職人の養子でしたが、", 90,175, 176,105}, + {"あなたは以前は土着の騎士の養子でしたが、", 96,175, 176,120}, + {"あなたは以前は爵位ある貴族の養子でしたが、", 99,175, 176,130}, + {"あなたは以前は王家の血を引く者の養子でしたが、", 100,175, 176,140}, + + {"ワーウルフに噛まれてしまいました。", 100, 176, 177, 0}, + + {"普段の姿は他の人間と変わらず、", 100, 177, 51, 0}, +#else + {"You are the adopted child, ", 100, 175, 176, 50}, + + {"but it has been bitten by Warulf.", 100, 176, 177, 0}, + + {"Your usual appearance looks like other human, ", 100, 177, 51, 0}, +#endif +#endif /* ADD_WEREWOLF */ }; static cptr race_jouhou[MAX_RACES] = @@ -1685,7 +1709,9 @@ "クターとしている無表情の謎の生物です。彼らは外見がかわいらしいため、魅力が高いです。彼らは混乱しません。なぜなら、混乱してもクターとしているため変わりないからです。しかも、そのクターとしている外見から敵に見つかりにくいです。しかし、彼らは注意力が少ないため探索や知覚能力は悪いです。彼らはレベルが上がると横に伸びてACを上げる技を覚えますが、伸びている間は魔法防御能力は低くなってしまいます。", -"アンドロイドは機械の身体を持つ人工的な存在です。魔法をうまく使うことはできませんが、戦士としては非常に優れています。彼らは他の種族のように経験値を得て成長するということはありません。身体に身につける装備によって成長します。ただし、指輪、アミュレット、光源は成長に影響しません。彼らは毒の耐性を持ち、麻痺知らずで、生命力を吸われることがありません。また、身体が頑丈なのでACにボーナスを得ます。しかし身体のいたるところに電子回路が組み込まれているため、電撃によって通常よりも大きなダメージを受けてしまいます。彼らは食物からほとんど動力を得られませんが、油を補給する事で動力源を得る事ができます。" +"アンドロイドは機械の身体を持つ人工的な存在です。魔法をうまく使うことはできませんが、戦士としては非常に優れています。彼らは他の種族のように経験値を得て成長するということはありません。身体に身につける装備によって成長します。ただし、指輪、アミュレット、光源は成長に影響しません。彼らは毒の耐性を持ち、麻痺知らずで、生命力を吸われることがありません。また、身体が頑丈なのでACにボーナスを得ます。しかし身体のいたるところに電子回路が組み込まれているため、電撃によって通常よりも大きなダメージを受けてしまいます。彼らは食物からほとんど動力を得られませんが、油を補給する事で動力源を得る事ができます。", + +"ワーウルフは、人間が他のワーウルフに噛まれてしまった事により生まれました。普段は人間とさほど変わらない能力ですが、夜になると狼に変身してしまいます。狼に変身している間は、修行僧のように武器を使わず戦う事が可能となります。また、自己を制御できないので、魔法を使う事はできず、魔法道具を使う事も苦手になってしまいます。経験を積むと自由に変身する事ができるようになります。", #else @@ -1761,7 +1787,9 @@ "A Kutar is an expressionless animal-like living creature. The word 'kuta' means 'absentmindedly' or 'vacantly'. Their absentmindedness hurts their searching and perception skills, but renders them incapable of being confused. Their unearthly calmness and serenity make them among the most stealthy of any race. Kutars, although expressionless, are beautiful and so have a high charisma. Members of this race can learn to expand their body horizontally. This increases armour class, but renders them vulnerable to magical attacks.", -"An android is a artificial creation with a body of machinery. They are poor at spell casting, but they make excellent warriors. They don't acquire experience like other races, but rather gain in power as they attach new equipment to their frame. Rings, amulets, and lights do not influence growth. Androids are resistant to poison, can move freely, and are immune to life-draining attacks. Moreover, because of their hard metallic bodies, they get a bonus to AC. Androids have electronic circuits throughout their body and must beware of electric shocks. They gain very little nutrition from the food of mortals, but they can use flasks of oil as their energy source." +"An android is a artificial creation with a body of machinery. They are poor at spell casting, but they make excellent warriors. They don't acquire experience like other races, but rather gain in power as they attach new equipment to their frame. Rings, amulets, and lights do not influence growth. Androids are resistant to poison, can move freely, and are immune to life-draining attacks. Moreover, because of their hard metallic bodies, they get a bonus to AC. Androids have electronic circuits throughout their body and must beware of electric shocks. They gain very little nutrition from the food of mortals, but they can use flasks of oil as their energy source.", + +"A werewolf appeared by the thing that man had been bitten by other werewolf. Usually though an ability very not different from other human, When the night comes, it transforms to the wolf. While it transforms to the wolf, you do not use arms and can fight like a monk. Moreover, because the self cannot be controlled, you cannot cast the magic and becomes not good at use magic device. When you acquire the experience, you come to be able to transform freely.", #endif }; @@ -1821,7 +1849,7 @@ "鏡使いは、魔力の込められた鏡を作り出して、それを触媒として攻撃を行なうことができる鏡魔法を使います。鏡使いは鏡の上で実力を発揮し、鏡の上では素早いテレポートが可能となります。魔法の鏡は、レベルによって一度に制御できる数が制限されます。鏡魔法に必要な能力は知能です。", -"忍者は暗闇に潜む恐るべき暗殺者であり、光源を持たずに行動し、相手の不意をつき一撃で息の根を止めます。また、相手を惑わすための忍術も身につけます。罠やドアを見つける能力に優れ、罠の解除や鍵開けに熟達しています。軽装を好み、重い鎧や武器を装備すると著しく動きが制限され、また、盾を装備しようとはしません。軽装ならば、レベルが上がるにつれより速くより静かに行動できます。さらに忍者は恐怖せず、成長すれば毒がほとんど効かなくなり、透明なものを見ることができるようになります。忍術に必要な能力は器用さです。" +"忍者は暗闇に潜む恐るべき暗殺者であり、光源を持たずに行動し、相手の不意をつき一撃で息の根を止めます。また、相手を惑わすための忍術も身につけます。罠やドアを見つける能力に優れ、罠の解除や鍵開けに熟達しています。軽装を好み、重い鎧や武器を装備すると著しく動きが制限され、また、盾を装備しようとはしません。軽装ならば、レベルが上がるにつれより速くより静かに行動できます。さらに忍者は恐怖せず、成長すれば毒がほとんど効かなくなり、透明なものを見ることができるようになります。忍術に必要な能力は器用さです。", #else @@ -1877,7 +1905,7 @@ "Mirror-Masters are spell casters; like other mages, they must live by their wits. They can create magical mirrors, and employ them in the casting of Mirror-Magic spells. A Mirror-Master standing on a mirror has greater ability and, for example, can perform quick teleports. The maximum number of Magical Mirrors which can be controlled simultaneously depends on the level. Intelligence determines a Mirror-Master's spell casting ability.", -"A Ninja is a fearful assassin lurking in darkness. He or she can navigate effectively with no light source, catch enemies unawares, and kill with a single blow. Ninjas can use Ninjutsu, and are good at locating hidden traps and doors, disarming traps and picking locks. Since heavy armors, heavy weapons, or shields will restrict their motion greatly, they prefer light clothes, and become faster and more stealthy as they gain levels. A Ninja knows no fear and, at high level, becomes almost immune to poison and able to see invisible things. Dexterity determines a Ninja's ability to use Ninjutsu." +"A Ninja is a fearful assassin lurking in darkness. He or she can navigate effectively with no light source, catch enemies unawares, and kill with a single blow. Ninjas can use Ninjutsu, and are good at locating hidden traps and doors, disarming traps and picking locks. Since heavy armors, heavy weapons, or shields will restrict their motion greatly, they prefer light clothes, and become faster and more stealthy as they gain levels. A Ninja knows no fear and, at high level, becomes almost immune to poison and able to see invisible things. Dexterity determines a Ninja's ability to use Ninjutsu.", #endif }; @@ -1934,7 +1962,7 @@ "A \"Patient\" person does things carefully. Patient people have high constitution, and high resilience, but poor abilities in most other skills. Also it directly influences your hit-points.", -"\"munchkin\" is a personality for beginners. It raises all your stats and skills. With this personality, you can win the game easily, but gain little honor in doing so." +"\"munchkin\" is a personality for beginners. It raises all your stats and skills. With this personality, you can win the game easily, but gain little honor in doing so.", #endif }; @@ -1963,7 +1991,7 @@ "歌集は、歌によって効果を発揮する魔法です。魔法と同様、使った時に効果のあるものと、歌い続けることによって持続して効果を発揮するものがあります。後者の場合は、MPの続く限り効果を発揮することができますが、同時に歌える歌は1つだけという制限もあります。", -"武芸の書は、様々な戦闘の技について書かれています。この本は技を覚えるときに読む必要がありますが、一度覚えた技は使うのに本を持つ必要はありません。技を使うときには必ず武器を装備していなければいけません。" +"武芸の書は、様々な戦闘の技について書かれています。この本は技を覚えるときに読む必要がありますが、一度覚えた技は使うのに本を持つ必要はありません。技を使うときには必ず武器を装備していなければいけません。", #else @@ -1989,7 +2017,7 @@ "Music magic shows various effects as sing song. There is two type of song; the one which shows effects instantly and the other one shows effect continuously until SP runs out. But the latter type has a limit; only one song can be sing at the same time.", -"The books of Kendo describe about various combat techniques. When learning new techniques, you are required to carry the books, but once you memorizes them, you don't have to carry them. When using a technique, wielding a weapon is required." +"The books of Kendo describe about various combat techniques. When learning new techniques, you are required to carry the books, but once you memorizes them, you don't have to carry them. When using a technique, wielding a weapon is required.", #endif }; @@ -2007,7 +2035,7 @@ "攻撃と防御の両面に優れています", "邪悪な怪物に対する攻撃に優れています", "様々な魔法効果を持った歌を歌います", -"打撃攻撃に特殊能力を付加します" +"打撃攻撃に特殊能力を付加します", #else "Good at detection and healing.", "Utility and protective spells.", @@ -2020,7 +2048,7 @@ "Good at both offence and defence.", "Destroys evil creatures.", "Song with magical effects.", -"Special attacks on melee." +"Special attacks on melee.", #endif }; @@ -2977,6 +3005,13 @@ chart = 155; break; } +#ifdef ADD_WEREWOLF + case RACE_WEREWOLF: + { + chart = 175; + break; + } +#endif default: { chart = 0; @@ -4225,6 +4260,7 @@ /* Dump classes */ for (n = 0; n < MAX_CLASS_CHOICE; n++) { + if(class_info[n].sex && (class_info[n].sex != (p_ptr->psex+1))) continue; /* Analyze */ cp_ptr = &class_info[n]; mp_ptr = &m_info[n]; @@ -4235,7 +4271,7 @@ sym[n] = ('A' + n - 26); /* Display */ - if (!(rp_ptr->choice & (1L << n))) + if (!(rp_ptr->choice[n/32] & (1L << (n%32)))) #ifdef JP sprintf(buf, "%c%c(%s)", sym[n], p2, str); #else @@ -4248,7 +4284,7 @@ sprintf(buf, "%c%c %s", sym[n], p2, str); #endif - put_str(buf, 13+ (n/4), 2 + 19 * (n%4)); + put_str(buf, 13+ (n/5), 2 + 15 * (n%5)); } #ifdef JP @@ -4266,7 +4302,7 @@ /* Move Cursol */ if (cs != os) { - c_put_str(TERM_WHITE, cur, 13 + (os/4), 2 + 19 * (os%4)); + c_put_str(TERM_WHITE, cur, 13 + (os/5), 2 + 15 * (os%5)); put_str(" ", 3, 40); if(cs == MAX_CLASS_CHOICE) { @@ -4283,7 +4319,7 @@ cp_ptr = &class_info[cs]; mp_ptr = &m_info[cs]; str = cp_ptr->title; - if (!(rp_ptr->choice & (1L << cs))) + if (!(rp_ptr->choice[cs/32] & (1L << (cs%32)))) #ifdef JP sprintf(cur, "%c%c(%s)", sym[cs], p2, str); #else @@ -4309,7 +4345,7 @@ cp_ptr->c_adj[4], cp_ptr->c_adj[5], cp_ptr->c_exp); c_put_str(TERM_L_BLUE, buf, 5, 40); } - c_put_str(TERM_YELLOW, cur, 13 + (cs/4), 2 + 19 * (cs%4)); + c_put_str(TERM_YELLOW, cur, 13 + (cs/5), 2 + 15 * (cs%5)); os = cs; } @@ -4329,7 +4365,11 @@ { if(cs == MAX_CLASS_CHOICE) { - k = randint0(MAX_CLASS_CHOICE); + do + { + k = randint0(MAX_CLASS_CHOICE); + } + while(LIMIT_CLASS_BY_SEX(k)); cs = k; continue; } @@ -4341,39 +4381,49 @@ } if (c == '*') { - k = randint0(MAX_CLASS_CHOICE); + do + { + k = randint0(MAX_CLASS_CHOICE); + } + while(LIMIT_CLASS_BY_SEX(k)); cs = k; continue; } if (c == '8') { - if (cs >= 4) cs -= 4; + if (cs >= 5) cs -= 5; + if (LIMIT_CLASS_BY_SEX(cs)) cs += (cs > 5) ? -5 : +5; } if (c == '4') { if (cs > 0) cs--; + if (LIMIT_CLASS_BY_SEX(cs)) cs += (cs > 1) ? -1 : +1; } if (c == '6') { if (cs < MAX_CLASS_CHOICE) cs++; + if (LIMIT_CLASS_BY_SEX(cs)) + cs += ((cs + 1) > MAX_CLASS_CHOICE) ? -1 : +1; } if (c == '2') { - if ((cs + 4) <= MAX_CLASS_CHOICE) cs += 4; + if ((cs + 5) <= MAX_CLASS_CHOICE) cs += 5; + if (LIMIT_CLASS_BY_SEX(cs)) + cs += ((cs + 5) > MAX_CLASS_CHOICE) ? -5 : +5; } k = (islower(c) ? A2I(c) : -1); - if ((k >= 0) && (k < MAX_CLASS_CHOICE)) + if ((k >= 0) && (k < MAX_CLASS_CHOICE) && !LIMIT_CLASS_BY_SEX(k)) { cs = k; continue; } k = (isupper(c) ? (26 + c - 'A') : -1); - if ((k >= 26) && (k < MAX_CLASS_CHOICE)) + if ((k >= 26) && (k < MAX_CLASS_CHOICE) && !LIMIT_CLASS_BY_SEX(k)) { cs = k; continue; } - else k = -1; + k = -1; if (c == '?') { #ifdef JP @@ -4434,7 +4484,7 @@ /* Dump seikakus */ for (n = 0; n < MAX_SEIKAKU; n++) { - if(seikaku_info[n].sex && (seikaku_info[n].sex != (p_ptr->psex+1))) continue; + if(LIMIT_SEIKAKU_BY_SEX(n)) continue; /* Analyze */ ap_ptr = &seikaku_info[n]; @@ -4528,7 +4578,7 @@ { k = randint0(MAX_SEIKAKU); } - while(seikaku_info[k].sex && (seikaku_info[k].sex != (p_ptr->psex+1))); + while(LIMIT_SEIKAKU_BY_SEX(k)); cs = k; continue; } @@ -4544,14 +4594,14 @@ { k = randint0(n); } - while(seikaku_info[k].sex && (seikaku_info[k].sex != (p_ptr->psex+1))); + while(LIMIT_SEIKAKU_BY_SEX(k)); cs = k; continue; } if (c == '8') { if (cs >= 4) cs -= 4; - if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1))) + if (LIMIT_SEIKAKU_BY_SEX(cs)) { if((cs - 4) > 0) cs -= 4; @@ -4562,7 +4612,7 @@ if (c == '4') { if (cs > 0) cs--; - if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1))) + if (LIMIT_SEIKAKU_BY_SEX(cs)) { if((cs - 1) > 0) cs--; @@ -4573,7 +4623,7 @@ if (c == '6') { if (cs < MAX_SEIKAKU) cs++; - if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1))) + if (LIMIT_SEIKAKU_BY_SEX(cs)) { if((cs + 1) <= MAX_SEIKAKU) cs++; @@ -4584,7 +4634,7 @@ if (c == '2') { if ((cs + 4) <= MAX_SEIKAKU) cs += 4; - if (seikaku_info[cs].sex && (seikaku_info[cs].sex != (p_ptr->psex+1))) + if (LIMIT_SEIKAKU_BY_SEX(cs)) { if((cs + 4) <= MAX_SEIKAKU) cs += 4; @@ -4593,24 +4643,18 @@ } } k = (islower(c) ? A2I(c) : -1); - if ((k >= 0) && (k < MAX_SEIKAKU)) + if ((k >= 0) && (k < MAX_SEIKAKU) && !LIMIT_SEIKAKU_BY_SEX(k)) { - if((seikaku_info[k].sex == 0) || (seikaku_info[k].sex == (p_ptr->psex+1))) - { - cs = k; - continue; - } + cs = k; + continue; } k = (isupper(c) ? (26 + c - 'A') : -1); - if ((k >= 26) && (k < MAX_SEIKAKU)) + if ((k >= 26) && (k < MAX_SEIKAKU) && !LIMIT_SEIKAKU_BY_SEX(k)) { - if((seikaku_info[k].sex == 0) || (seikaku_info[k].sex == (p_ptr->psex+1))) - { - cs = k; - continue; - } + cs = k; + continue; } - else k = -1; + k = -1; if (c == '?') { #ifdef JP @@ -5367,7 +5411,7 @@ for (; j < 59; j++) p_ptr->history[i][j] = ' '; p_ptr->history[i][59] = '\0'; } - display_player(1); + display_player(DISPLAY_PLAYER_MODE_HISTORY); #ifdef JP c_put_str(TERM_L_GREEN, "(キャラクターの生い立ち - 編集モード)", 11, 20); put_str("[ カーソルキーで移動、Enterで終了、Ctrl-Aでファイル読み込み ]", 17, 10); @@ -6095,7 +6139,7 @@ /*** Display ***/ /* Mode */ - mode = 0; + mode = DISPLAY_PLAYER_MODE_SKILLS; /* Roll for base hitpoints */ get_extra(TRUE); @@ -6184,7 +6228,9 @@ /* Toggle the display */ if ((c == 'H') || (c == 'h')) { - mode = ((mode != 0) ? 0 : 1); + mode = ((mode != DISPLAY_PLAYER_MODE_SKILLS) ? + DISPLAY_PLAYER_MODE_SKILLS : + DISPLAY_PLAYER_MODE_HISTORY); continue; } diff -ur Hengband/src/bldg.c Hengband_warwolf/src/bldg.c --- Hengband/src/bldg.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/bldg.c Sun Apr 8 07:00:00 2007 @@ -354,7 +354,7 @@ else { r_ptr = &r_info[arena_info[p_ptr->arena_number].r_idx]; - name = (r_name + r_ptr->name); + name = monnam(r_ptr); #ifdef JP msg_format("%s に挑戦するものはいないか?", name); #else @@ -1960,9 +1960,9 @@ monster_race *r_ptr = &r_info[battle_mon[i]]; #ifdef JP - sprintf(buf,"%d) %-58s %4ld.%02ld倍", i+1, format("%s%s",r_name + r_ptr->name, (r_ptr->flags1 & RF1_UNIQUE) ? "もどき" : " "), mon_odds[i]/100, mon_odds[i]%100); + sprintf(buf,"%d) %-58s %4ld.%02ld倍", i+1, format("%s%s",monnam(r_ptr), (r_ptr->flags1 & RF1_UNIQUE) ? "もどき" : " "), mon_odds[i]/100, mon_odds[i]%100); #else - sprintf(buf,"%d) %-58s %4ld.%02ld", i+1, format("%s%s", (r_ptr->flags1 & RF1_UNIQUE) ? "Fake " : "", r_name + r_ptr->name), mon_odds[i]/100, mon_odds[i]%100); + sprintf(buf,"%d) %-58s %4ld.%02ld", i+1, format("%s%s", (r_ptr->flags1 & RF1_UNIQUE) ? "Fake " : "", monnam(r_ptr)), mon_odds[i]/100, mon_odds[i]%100); #endif prt(buf, 5+i, 1); } @@ -2088,9 +2088,9 @@ prt("Wanted monster that changes from day to day", 5, 10); #endif #ifdef JP - sprintf(buf,"ターゲット: %s",r_name + r_ptr->name); + sprintf(buf,"ターゲット: %s",monnam(r_ptr)); #else - sprintf(buf,"target: %s",r_name + r_ptr->name); + sprintf(buf,"target: %s",monnam(r_ptr)); #endif c_put_str(TERM_YELLOW, buf, 6, 10); #ifdef JP @@ -2162,7 +2162,7 @@ done_mark = ""; } - c_prt(color, format("%s %s", r_name + r_ptr->name, done_mark), y+7, 10); + c_prt(color, format("%s %s", monnam(r_ptr), done_mark), y+7, 10); y = (y+1) % 10; if (!y && (i < MAX_KUBI -1)) @@ -2317,7 +2317,7 @@ for (i = 0; i < INVEN_PACK; i++) { o_ptr = &inventory[i]; - if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE) && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) + if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_CORPSE) && (streq(monnam_idx(o_ptr->pval), monnam_idx(today_mon)))) { char buf[MAX_NLEN+20]; object_desc(o_name, o_ptr, 0); @@ -2347,7 +2347,7 @@ { o_ptr = &inventory[i]; - if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON) && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) + if ((o_ptr->tval == TV_CORPSE) && (o_ptr->sval == SV_SKELETON) && (streq(monnam_idx(o_ptr->pval), monnam_idx(today_mon)))) { char buf[MAX_NLEN+20]; object_desc(o_name, o_ptr, 0); @@ -2498,7 +2498,7 @@ monster_race *r_ptr = &r_info[r_idx]; int power = r_ptr->level + 10; char m_name[80]; - cptr desc = r_name + r_ptr->name; + cptr desc = monnam(r_ptr); /* Describe it */ #ifndef JP @@ -3089,7 +3089,7 @@ } q_ptr->cur_num = 0; - name = (r_name + r_ptr->name); + name = monnam(r_ptr); #ifdef JP msg_format("クエスト: %sを %d体倒す", name,q_ptr->max_num); #else @@ -3240,17 +3240,21 @@ static int hit_chance(int to_h, int ac) { - int chance = 0; + int chance = 0, vir; int meichuu = p_ptr->skill_thn + (p_ptr->to_h[0] + to_h) * BTH_PLUS_ADJ; + /* virtue effect */ + vir = virtue_number(V_VALOUR); + if (vir) meichuu += (p_ptr->virtues[vir - 1]/10); + if (meichuu <= 0) return 5; - chance = 100 - ((ac * 75) / meichuu); + chance = (100 - ((ac * 75) / meichuu)) * 9 / 10; - if (chance > 95) chance = 95; - if (chance < 5) chance = 5; + if (chance < 0) chance = 0; if (p_ptr->pseikaku == SEIKAKU_NAMAKE) chance = (chance*19+9)/20; + chance += 5; return chance; } @@ -4430,15 +4434,15 @@ } #ifdef JP - strcpy(temp2, r_name + r_ptr->E_name); + strcpy(temp2, monnamE(r_ptr)); #else - strcpy(temp2, r_name + r_ptr->name); + strcpy(temp2, monnam(r_ptr)); #endif for (xx = 0; temp2[xx] && xx < 80; xx++) if (isupper(temp2[xx])) temp2[xx] = tolower(temp2[xx]); #ifdef JP - if (my_strstr(temp2, temp) || my_strstr(r_name + r_ptr->name, temp)) + if (my_strstr(temp2, temp) || my_strstr(monnam(r_ptr), temp)) #else if (my_strstr(temp2, temp)) #endif @@ -4748,9 +4752,9 @@ } #ifdef JP - amt = get_quantity(format("%sの何階にテレポートしますか?", d_name + d_info[select_dungeon].name), max_depth); + amt = get_quantity(format("%sの何階にテレポートしますか?", dunnam_idx(select_dungeon)), max_depth); #else - amt = get_quantity(format("Teleport to which level of %s? ", d_name + d_info[select_dungeon].name), max_depth); + amt = get_quantity(format("Teleport to which level of %s? ", dunnam_idx(select_dungeon)), max_depth); #endif if (amt > 0) @@ -5114,7 +5118,7 @@ /* No quest index */ if (!q_idx) return; - strcpy(name, (r_name + r_ptr->name)); + strcpy(name, monnam(r_ptr)); msg_print(find_quest[rand_range(0, 4)]); msg_print(NULL); diff -ur Hengband/src/cmd1.c Hengband_warwolf/src/cmd1.c --- Hengband/src/cmd1.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/cmd1.c Mon Apr 9 12:43:31 2007 @@ -2004,6 +2004,9 @@ bool is_human = (r_ptr->d_char == 'p'); bool is_lowlevel = (r_ptr->level < (p_ptr->lev - 15)); bool zantetsu_mukou, e_j_mukou; +#ifdef ADD_WEREWOLF + bool wolf_attack = FALSE; +#endif switch (p_ptr->pclass) { @@ -2038,6 +2041,13 @@ break; } + switch (p_ptr->mimic_form) + { + case MIMIC_WOLF: + if ((empty_hands(TRUE) & EMPTY_HAND_RARM) && !p_ptr->riding) wolf_attack = TRUE; + break; + } + if (!o_ptr->k_idx) /* Empty hand */ { if ((r_ptr->level + 10) > p_ptr->lev) @@ -2129,7 +2139,7 @@ if (num == 1) { if (one_in_(2)) - success_hit = FALSE; + success_hit = TRUE; old_success_hit = success_hit; } else success_hit = old_success_hit; @@ -2150,12 +2160,20 @@ if (backstab) msg_format("あなたは冷酷にも眠っている無力な%sを突き刺した!", m_name); else if (fuiuchi) msg_format("不意を突いて%sに強烈な一撃を喰らわせた!", m_name); else if (stab_fleeing) msg_format("逃げる%sを背中から突き刺した!", m_name); - else if (!monk_attack) msg_format("%sを攻撃した。", m_name); + else if (!monk_attack +#ifdef ADD_WEREWOLF + && !wolf_attack +#endif /* ADD_WEREWOLF */ + ) msg_format("%sを攻撃した。", m_name); #else if (backstab) msg_format("You cruelly stab the helpless, sleeping %s!", m_name); else if (fuiuchi) msg_format("You make surprise attack, and hit %s with a powerful blow!", m_name); else if (stab_fleeing) msg_format("You backstab the fleeing %s!", m_name); - else if (!monk_attack) msg_format("You hit %s.", m_name); + else if (!monk_attack +#ifdef ADD_WEREWOLF + && !wolf_attack +#endif /* ADD_WEREWOLF */ + ) msg_format("You hit %s.", m_name); #endif /* Hack -- bare hands do one damage */ @@ -2374,6 +2392,119 @@ } } +#ifdef ADD_WEREWOLF + else if (wolf_attack) + { + int special_effect = 0, times = 0, max_times; + int min_level = 1; + martial_arts *ma_ptr = &ma_blows_wolf[0], *old_ptr = &ma_blows_wolf[0]; + int weight = 6; + + max_times = (p_ptr->lev < 8 ? 1 : p_ptr->lev / 8); + + /* Attempt 'times' */ + for (times = 0; times < max_times; times++) + { + do + { + ma_ptr = &ma_blows_wolf[randint0(MAX_MA_WOLF)]; + min_level = ma_ptr->min_level; + } + while ((min_level > p_ptr->lev) || + (randint1(p_ptr->lev) < ma_ptr->chance)); + + /* keep the highest level attack available we found */ + if ((ma_ptr->min_level > old_ptr->min_level) && + !p_ptr->stun && !p_ptr->confused) + { + old_ptr = ma_ptr; + + if (p_ptr->wizard && cheat_xtra) + { +#ifdef JP + msg_print("攻撃を再選択しました。"); +#else + msg_print("Attack re-selected."); +#endif + } + } + else + { + ma_ptr = old_ptr; + } + } + + min_level = ma_ptr->min_level; + k = damroll(ma_ptr->dd + p_ptr->to_dd[hand], ma_ptr->ds + p_ptr->to_ds[hand]); + if (ma_ptr->effect == MA_WOLF_FOOT) + { + if (!((r_ptr->flags1 & RF1_NEVER_MOVE) || + my_strchr("~#{}.UjmeEv$,DdsbBFIJQSXclnw!=?", r_ptr->d_char))) + { +#ifdef JP + msg_format("%sの腱を切りつけた!", m_name); +#else + msg_format("You cut the tendon of %s.", m_name); +#endif + + special_effect = MA_WOLF_FOOT; + } + else msg_format(ma_ptr->desc, m_name); + } + else if (ma_ptr->effect == MA_WOLF_EYE) + { + if (my_strchr("bdefhknopqrtyBCDHMOPRTXYZ", r_ptr->d_char)) + { +#ifdef JP + msg_format("%sの目に爪を立てた!", m_name); +#else + msg_format("You fastened its claws in eyes of %s.", m_name); +#endif + + special_effect = MA_WOLF_EYE; + } + else msg_format(ma_ptr->desc, m_name); + } + else + { + msg_format(ma_ptr->desc, m_name); + } + + k = critical_norm(p_ptr->lev * weight, min_level, k, p_ptr->to_h[0], 0); + + if ((special_effect == MA_WOLF_FOOT) && ((k + p_ptr->to_d[hand]) < m_ptr->hp)) + { + if (!(r_ptr->flags1 & RF1_UNIQUE) && + (randint1(p_ptr->lev) > r_ptr->level) && + m_ptr->mspeed > 60) + { +#ifdef JP + msg_format("%^sは足をひきずり始めた。", m_name); +#else + msg_format("%^s starts limping slower.", m_name); +#endif + + m_ptr->mspeed -= 10; + } + } + else if ((special_effect == MA_WOLF_EYE) && ((k + p_ptr->to_d[hand]) < m_ptr->hp)) + { + if (!(r_ptr->flags1 & RF1_UNIQUE) && + (randint1(p_ptr->lev) > r_ptr->level) && + !(r_ptr->flags3 & RF3_NO_CONF)) + { +#ifdef JP + msg_format("%^sは目が見えなくなった。 ", m_name); +#else + msg_format("%^s is blinded.", m_name); +#endif + + (void)set_monster_confused(c_ptr->m_idx, MON_CONFUSED(m_ptr) + 12 + randint0(4)); + } + } + } +#endif /* ADD_WEREWOLF */ + /* Handle normal weapon */ else if (o_ptr->k_idx) { @@ -2943,6 +3074,9 @@ case RACE_DUNADAN: case RACE_BARBARIAN: case RACE_BEASTMAN: +#ifdef ADD_WEREWOLF + case RACE_WEREWOLF: +#endif mult = 25;break; case RACE_HALF_ORC: case RACE_HALF_TROLL: @@ -2966,6 +3100,10 @@ case MIMIC_DEMON_LORD: case MIMIC_VAMPIRE: mult = 30;break; +#ifdef ADD_WEREWOLF + case MIMIC_WOLF: + mult = 25;break; +#endif default: mult = 10;break; } @@ -3994,7 +4132,7 @@ (have_flag(f_ptr->flags, FF_DEEP) || (riding_r_ptr->flags2 & RF2_AURA_FIRE))) { #ifdef JP - msg_format("%sの上に行けない。", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("%sの上に行けない。", feanam_idx(get_feat_mimic(c_ptr))); #else msg_print("Can't swim."); #endif @@ -4005,7 +4143,7 @@ else if (!have_flag(f_ptr->flags, FF_WATER) && (riding_r_ptr->flags7 & RF7_AQUATIC)) { #ifdef JP - msg_format("%sから上がれない。", f_name + f_info[get_feat_mimic(&cave[py][px])].name); + msg_format("%sから上がれない。", feanam_idx(get_feat_mimic(&cave[py][px]))); #else msg_print("Can't land."); #endif @@ -4016,7 +4154,7 @@ else if (have_flag(f_ptr->flags, FF_LAVA) && !(riding_r_ptr->flagsr & RFR_EFF_IM_FIRE_MASK)) { #ifdef JP - msg_format("%sの上に行けない。", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("%sの上に行けない。", feanam_idx(get_feat_mimic(c_ptr))); #else msg_print("Too hot to go through."); #endif @@ -4046,9 +4184,9 @@ else if (!have_flag(f_ptr->flags, FF_MOVE) && have_flag(f_ptr->flags, FF_CAN_FLY) && !p_ptr->levitation) { #ifdef JP - msg_format("空を飛ばないと%sの上には行けない。", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("空を飛ばないと%sの上には行けない。", feanam_idx(get_feat_mimic(c_ptr))); #else - msg_format("You need to fly to go through the %s.", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("You need to fly to go through the %s.", feanam_idx(get_feat_mimic(c_ptr))); #endif energy_use = 0; @@ -4086,7 +4224,7 @@ /* Feature code (applying "mimic" field) */ s16b feat = get_feat_mimic(c_ptr); feature_type *mimic_f_ptr = &f_info[feat]; - cptr name = f_name + mimic_f_ptr->name; + cptr name = feanam(mimic_f_ptr); oktomove = FALSE; diff -ur Hengband/src/cmd2.c Hengband_warwolf/src/cmd2.c --- Hengband/src/cmd2.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/cmd2.c Sun Apr 8 07:00:00 2007 @@ -281,10 +281,10 @@ if (!max_dlv[target_dungeon]) { #ifdef JP - msg_format("ここには%sの入り口(%d階相当)があります", d_name+d_info[target_dungeon].name, d_info[target_dungeon].mindepth); + msg_format("ここには%sの入り口(%d階相当)があります", dunnam_idx(target_dungeon), d_info[target_dungeon].mindepth); if (!get_check("本当にこのダンジョンに入りますか?")) return; #else - msg_format("There is the entrance of %s (Danger level: %d)", d_name+d_info[target_dungeon].name, d_info[target_dungeon].mindepth); + msg_format("There is the entrance of %s (Danger level: %d)", dunnam_idx(target_dungeon), d_info[target_dungeon].mindepth); if (!get_check("Do you really get in this dungeon? ")) return; #endif } @@ -342,9 +342,9 @@ if (target_dungeon) { #ifdef JP - msg_format("%sへ入った。", d_text + d_info[dungeon_type].text); + msg_format("%sへ入った。", duntext_idx(dungeon_type)); #else - msg_format("You entered %s.", d_text + d_info[dungeon_type].text); + msg_format("You entered %s.", duntext_idx(dungeon_type)); #endif } else @@ -1085,9 +1085,9 @@ { /* Stuck */ #ifdef JP - msg_format("%sはがっちりと閉じられているようだ。", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("%sはがっちりと閉じられているようだ。", feanam_idx(get_feat_mimic(c_ptr))); #else - msg_format("The %s appears to be stuck.", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("The %s appears to be stuck.", feanam_idx(get_feat_mimic(c_ptr))); #endif } @@ -1525,7 +1525,7 @@ /* Feature code (applying "mimic" field) */ mimic_f_ptr = &f_info[get_feat_mimic(c_ptr)]; - name = f_name + mimic_f_ptr->name; + name = feanam(mimic_f_ptr); /* Sound */ sound(SOUND_DIG); @@ -1789,9 +1789,9 @@ { /* Stuck */ #ifdef JP - msg_format("%sはがっちりと閉じられているようだ。", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("%sはがっちりと閉じられているようだ。", feanam_idx(get_feat_mimic(c_ptr))); #else - msg_format("The %s appears to be stuck.", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("The %s appears to be stuck.", feanam_idx(get_feat_mimic(c_ptr))); #endif } @@ -2006,7 +2006,7 @@ feature_type *f_ptr = &f_info[c_ptr->feat]; /* Access trap name */ - cptr name = (f_name + f_ptr->name); + cptr name = feanam(f_ptr); /* Extract trap "power" */ int power = f_ptr->power; @@ -2250,7 +2250,7 @@ bool more = FALSE; - cptr name = f_name + f_info[get_feat_mimic(c_ptr)].name; + cptr name = feanam_idx(get_feat_mimic(c_ptr)); /* Take a turn */ energy_use = 100; @@ -2658,9 +2658,9 @@ /* Successful jamming */ #ifdef JP - msg_format("%sにくさびを打ち込んだ。", f_name + f_info[feat].name); + msg_format("%sにくさびを打ち込んだ。", feanam_idx(feat)); #else - msg_format("You jam the %s with a spike.", f_name + f_info[feat].name); + msg_format("You jam the %s with a spike.", feanam_idx(feat)); #endif cave_alter_feat(y, x, FF_SPIKE); diff -ur Hengband/src/cmd3.c Hengband_warwolf/src/cmd3.c --- Hengband/src/cmd3.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/cmd3.c Sun Apr 8 07:00:00 2007 @@ -2113,15 +2113,15 @@ } #ifdef JP - strcpy(temp2, r_name+r_ptr->E_name); + strcpy(temp2, monnamE(r_ptr)); #else - strcpy(temp2, r_name+r_ptr->name); + strcpy(temp2, monnam(r_ptr)); #endif for (xx=0; temp2[xx] && xx<80; xx++) if (isupper(temp2[xx])) temp2[xx]=tolower(temp2[xx]); #ifdef JP - if (my_strstr(temp2, temp) || my_strstr(r_name + r_ptr->name, temp) ) + if (my_strstr(temp2, temp) || my_strstr(monnam(r_ptr), temp) ) #else if (my_strstr(temp2, temp)) #endif diff -ur Hengband/src/cmd4.c Hengband_warwolf/src/cmd4.c --- Hengband/src/cmd4.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/cmd4.c Sun Apr 8 07:00:00 2007 @@ -448,9 +448,9 @@ else { #ifdef JP - sprintf(note_level_buf, "%d階(%s):", dun_level, d_name+d_info[dungeon_type].name); + sprintf(note_level_buf, "%d階(%s):", dun_level, dunnam_idx(dungeon_type)); #else - sprintf(note_level_buf, "%s L%d:", d_name+d_info[dungeon_type].name, dun_level); + sprintf(note_level_buf, "%s L%d:", dunnam_idx(dungeon_type), dun_level); #endif note_level = note_level_buf; } @@ -522,7 +522,7 @@ case NIKKI_RAND_QUEST_C: { char name[80]; - strcpy(name, r_name+r_info[quest[num].r_idx].name); + strcpy(name, monnam_idx(quest[num].r_idx)); #ifdef JP fprintf(fff, " %2d:%02d %20s ランダムクエスト(%s)を達成した。\n", hour, min, note_level, name); #else @@ -533,7 +533,7 @@ case NIKKI_RAND_QUEST_F: { char name[80]; - strcpy(name, r_name+r_info[quest[num].r_idx].name); + strcpy(name, monnam_idx(quest[num].r_idx)); #ifdef JP fprintf(fff, " %2d:%02d %20s ランダムクエスト(%s)から逃げ出した。\n", hour, min, note_level, name); #else @@ -544,18 +544,18 @@ case NIKKI_MAXDEAPTH: { #ifdef JP - fprintf(fff, " %2d:%02d %20s %sの最深階%d階に到達した。\n", hour, min, note_level, d_name+d_info[dungeon_type].name, num); + fprintf(fff, " %2d:%02d %20s %sの最深階%d階に到達した。\n", hour, min, note_level, dunnam_idx(dungeon_type), num); #else - fprintf(fff, " %2d:%02d %20s reached level %d of %s for the first time.\n", hour, min, note_level, num, d_name+d_info[dungeon_type].name); + fprintf(fff, " %2d:%02d %20s reached level %d of %s for the first time.\n", hour, min, note_level, num, dunnam_idx(dungeon_type)); #endif break; } case NIKKI_TRUMP: { #ifdef JP - fprintf(fff, " %2d:%02d %20s %s%sの最深階を%d階にセットした。\n", hour, min, note_level, note, d_name + d_info[num].name, max_dlv[num]); + fprintf(fff, " %2d:%02d %20s %s%sの最深階を%d階にセットした。\n", hour, min, note_level, note, dunnam_idx(num), max_dlv[num]); #else - fprintf(fff, " %2d:%02d %20s reset recall level of %s to %d %s.\n", hour, min, note_level, d_name + d_info[num].name, max_dlv[num], note); + fprintf(fff, " %2d:%02d %20s reset recall level of %s to %d %s.\n", hour, min, note_level, dunnam_idx(num), max_dlv[num], note); #endif break; } @@ -593,9 +593,9 @@ { if (!num) #ifdef JP - fprintf(fff, " %2d:%02d %20s 帰還を使って%sの%d階へ下りた。\n", hour, min, note_level, d_name+d_info[dungeon_type].name, max_dlv[dungeon_type]); + fprintf(fff, " %2d:%02d %20s 帰還を使って%sの%d階へ下りた。\n", hour, min, note_level, dunnam_idx(dungeon_type), max_dlv[dungeon_type]); #else - fprintf(fff, " %2d:%02d %20s recalled to dungeon level %d of %s.\n", hour, min, note_level, max_dlv[dungeon_type], d_name+d_info[dungeon_type].name); + fprintf(fff, " %2d:%02d %20s recalled to dungeon level %d of %s.\n", hour, min, note_level, max_dlv[dungeon_type], dunnam_idx(dungeon_type)); #endif else #ifdef JP @@ -690,9 +690,9 @@ #endif else #ifdef JP - to = format("%d階(%s)", dun_level, d_name+d_info[dungeon_type].name); + to = format("%d階(%s)", dun_level, dunnam_idx(dungeon_type)); #else - to = format("level %d of %s", dun_level, d_name+d_info[dungeon_type].name); + to = format("level %d of %s", dun_level, dunnam_idx(dungeon_type)); #endif #ifdef JP @@ -713,9 +713,9 @@ #endif else #ifdef JP - to = format("%d階(%s)", dun_level, d_name+d_info[dungeon_type].name); + to = format("%d階(%s)", dun_level, dunnam_idx(dungeon_type)); #else - to = format("level %d of %s", dun_level, d_name+d_info[dungeon_type].name); + to = format("level %d of %s", dun_level, dunnam_idx(dungeon_type)); #endif #ifdef JP @@ -1225,9 +1225,21 @@ char c; int mode = 0; + int mode_table[DISPLAY_PLAYER_MODE_NUM] = + { + DISPLAY_PLAYER_MODE_SKILLS, + DISPLAY_PLAYER_MODE_HISTORY, + DISPLAY_PLAYER_MODE_THINGS1, + DISPLAY_PLAYER_MODE_THINGS2, + }; + int mode_size = 4; char tmp[160]; + if ((p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3) && display_mutations) + { + mode_table[mode_size++] = DISPLAY_PLAYER_MODE_MUTATION; + } /* Save the screen */ screen_save(); @@ -1237,22 +1249,16 @@ { update_playtime(); - /* Display the player */ - display_player(mode); - - if (mode == 4) - { - mode = 0; - display_player(mode); - } + mode = (mode % mode_size); + display_player(mode_table[mode]); /* Prompt */ #ifdef JP Term_putstr(2, 23, -1, TERM_WHITE, - "['c'で名前変更, 'f'でファイルへ書出, 'h'でモード変更, ESCで終了]"); + "['c'で名前変更, 'f'でファイルへ書出, 'h/H'でモード変更, ESCで終了]"); #else Term_putstr(2, 23, -1, TERM_WHITE, - "['c' to change name, 'f' to file, 'h' to change mode, or ESC]"); + "['c' to change name, 'f' to file, 'h/H' to change mode, or ESC]"); #endif @@ -1289,10 +1295,18 @@ } } - /* Toggle mode */ + /* Next mode */ else if (c == 'h') { mode++; + if (mode >= mode_size) mode = 0; + } + + /* Prev mode */ + else if (c == 'H') + { + mode--; + if (mode < 0) mode = mode_size - 1; } /* Oops */ @@ -3851,7 +3865,7 @@ if (!r_ptr->name) continue; /* Dump a comment */ - auto_dump_printf("# %s\n", (r_name + r_ptr->name)); + auto_dump_printf("# %s\n", monnam(r_ptr)); /* Dump the monster attr/char info */ auto_dump_printf("R:%d:0x%02X/0x%02X\n\n", i, @@ -4005,7 +4019,7 @@ if (f_ptr->mimic != i) continue; /* Dump a comment */ - auto_dump_printf("# %s\n", (f_name + f_ptr->name)); + auto_dump_printf("# %s\n", feanam(f_ptr)); /* Dump the feature attr/char info */ auto_dump_printf("F:%d:0x%02X/0x%02X:0x%02X/0x%02X:0x%02X/0x%02X\n\n", i, @@ -4059,11 +4073,11 @@ #ifdef JP Term_putstr(5, 17, -1, TERM_WHITE, format("モンスター = %d, 名前 = %-40.40s", - r, (r_name + r_ptr->name))); + r, monnam(r_ptr))); #else Term_putstr(5, 17, -1, TERM_WHITE, format("Monster = %d, Name = %-40.40s", - r, (r_name + r_ptr->name))); + r, monnam(r_ptr))); #endif /* Label the Default values */ @@ -4182,11 +4196,11 @@ #ifdef JP Term_putstr(5, 17, -1, TERM_WHITE, format("アイテム = %d, 名前 = %-40.40s", - k, k_name + (!k_ptr->flavor ? k_ptr->name : k_ptr->flavor_name))); + k, (!k_ptr->flavor ? kindnam(k_ptr) : kindfnam(k_ptr)))); #else Term_putstr(5, 17, -1, TERM_WHITE, format("Object = %d, Name = %-40.40s", - k, k_name + (!k_ptr->flavor ? k_ptr->name : k_ptr->flavor_name))); + k, (!k_ptr->flavor ? kindnam(k_ptr) : kindfnam(k_ptr)))); #endif /* Label the Default values */ @@ -4307,11 +4321,11 @@ #ifdef JP Term_putstr(5, 17, -1, TERM_WHITE, format("地形 = %d, 名前 = %s, 明度 = %s", - f, (f_name + f_ptr->name), lighting_level_str[lighting_level])); + f, feanam(f_ptr), lighting_level_str[lighting_level])); #else Term_putstr(5, 17, -1, TERM_WHITE, format("Terrain = %d, Name = %s, Lighting = %s", - f, (f_name + f_ptr->name), lighting_level_str[lighting_level])); + f, feanam(f_ptr), lighting_level_str[lighting_level])); #endif /* Label the Default values */ @@ -6770,9 +6784,9 @@ /* Print a message */ #ifdef JP - fprintf(fff, " %s (レベル%d)\n", r_name + r_ptr->name, r_ptr->level); + fprintf(fff, " %s (レベル%d)\n", monnam(r_ptr), r_ptr->level); #else - fprintf(fff, " %s (level %d)\n", r_name + r_ptr->name, r_ptr->level); + fprintf(fff, " %s (level %d)\n", monnam(r_ptr), r_ptr->level); #endif } @@ -7323,8 +7337,7 @@ if (dead) { /* Print a message */ - fprintf(fff, " %s\n", - (r_name + r_ptr->name)); + fprintf(fff, " %s\n", monnam(r_ptr)); Total++; } } @@ -7337,25 +7350,25 @@ #ifdef JP /* p,tは人と数える by ita */ if (my_strchr("pt", r_ptr->d_char)) - fprintf(fff, " %3d 人の %s\n", This, r_name + r_ptr->name); + fprintf(fff, " %3d 人の %s\n", This, monnam(r_ptr)); else - fprintf(fff, " %3d 体の %s\n", This, r_name + r_ptr->name); + fprintf(fff, " %3d 体の %s\n", This, monnam(r_ptr)); #else if (This < 2) { - if (my_strstr(r_name + r_ptr->name, "coins")) + if (my_strstr(monnam(r_ptr), "coins")) { - fprintf(fff, " 1 pile of %s\n", (r_name + r_ptr->name)); + fprintf(fff, " 1 pile of %s\n", monnam(r_ptr)); } else { - fprintf(fff, " 1 %s\n", (r_name + r_ptr->name)); + fprintf(fff, " 1 %s\n", monnam(r_ptr)); } } else { char ToPlural[80]; - strcpy(ToPlural, (r_name + r_ptr->name)); + strcpy(ToPlural, monnam(r_ptr)); plural_aux(ToPlural); fprintf(fff, " %d %s\n", This, ToPlural); } @@ -7770,7 +7783,7 @@ attr = ((i + mon_top == mon_cur) ? TERM_L_BLUE : TERM_WHITE); /* Display the name */ - c_prt(attr, (r_name + r_ptr->name), row + i, col); + c_prt(attr, monnam(r_ptr), row + i, col); /* Hack -- visual_list mode */ if (per_page == 1) @@ -8117,7 +8130,7 @@ else { /* Flavor name */ - strcpy(o_name, k_name + flavor_k_ptr->flavor_name); + strcpy(o_name, kindfnam(flavor_k_ptr)); } /* Display the name */ @@ -8508,13 +8521,13 @@ attr = ((i + feat_top == feat_cur) ? TERM_L_BLUE : TERM_WHITE); /* Display the name */ - c_prt(attr, f_name + f_ptr->name, row_i, col); + c_prt(attr, feanam(f_ptr), row_i, col); /* Hack -- visual_list mode */ if (per_page == 1) { /* Display lighting level */ - c_prt(attr, format("(%s)", lighting_level_str[lighting_level]), row_i, col + 1 + strlen(f_name + f_ptr->name)); + c_prt(attr, format("(%s)", lighting_level_str[lighting_level]), row_i, col + 1 + strlen(feanam(f_ptr))); c_prt(attr, format("%02x/%02x", f_ptr->x_attr[lighting_level], f_ptr->x_char[lighting_level]), row_i, f_idx_col - ((p_ptr->wizard || visual_only) ? 6 : 2)); } @@ -8921,11 +8934,11 @@ bool listed = FALSE; #ifdef JP - fprintf(fff, "今日のターゲット : %s\n", (p_ptr->today_mon ? r_name + r_info[p_ptr->today_mon].name : "不明")); + fprintf(fff, "今日のターゲット : %s\n", (p_ptr->today_mon ? monnam_idx(p_ptr->today_mon) : "不明")); fprintf(fff, "\n"); fprintf(fff, "賞金首リスト\n"); #else - fprintf(fff, "Today target : %s\n", (p_ptr->today_mon ? r_name + r_info[p_ptr->today_mon].name : "unknown")); + fprintf(fff, "Today target : %s\n", (p_ptr->today_mon ? monnam_idx(p_ptr->today_mon) : "unknown")); fprintf(fff, "\n"); fprintf(fff, "List of wanted monsters\n"); #endif @@ -8935,7 +8948,7 @@ { if (kubi_r_idx[i] <= 10000) { - fprintf(fff,"%s\n", r_name + r_info[kubi_r_idx[i]].name); + fprintf(fff,"%s\n", monnam_idx(kubi_r_idx[i])); listed = TRUE; } @@ -9051,9 +9064,9 @@ } else if (max_dlv[i] == d_info[i].maxdepth) seiha = TRUE; #ifdef JP - fprintf(fff,"%c%-12s : %3d 階\n", seiha ? '!' : ' ', d_name + d_info[i].name, max_dlv[i]); + fprintf(fff,"%c%-12s : %3d 階\n", seiha ? '!' : ' ', dunnam_idx(i), max_dlv[i]); #else - fprintf(fff,"%c%-16s : level %3d\n", seiha ? '!' : ' ', d_name + d_info[i].name, max_dlv[i]); + fprintf(fff,"%c%-16s : level %3d\n", seiha ? '!' : ' ', dunnam_idx(i), max_dlv[i]); #endif } } @@ -9193,7 +9206,7 @@ case QUEST_TYPE_KILL_LEVEL: case QUEST_TYPE_KILL_ANY_LEVEL: r_ptr = &r_info[quest[i].r_idx]; - strcpy(name, r_name + r_ptr->name); + strcpy(name, monnam(r_ptr)); if (quest[i].max_num > 1) { #ifdef JP @@ -9214,7 +9227,7 @@ break; case QUEST_TYPE_FIND_ARTIFACT: - strcpy(name, a_name + a_info[quest[i].k_idx].name); + strcpy(name, artnam_idx(quest[i].k_idx)); #ifdef JP sprintf(note," - %sを見つけ出す。", name); #else @@ -9290,7 +9303,7 @@ { /* Print the quest info */ r_ptr = &r_info[quest[i].r_idx]; - strcpy(name, r_name + r_ptr->name); + strcpy(name, monnam(r_ptr)); if (quest[i].max_num > 1) { @@ -9385,7 +9398,7 @@ #else " %-40s (Dungeon level: %3d) - (Cancelled)\n", #endif - r_name+r_info[quest[q_idx].r_idx].name, + monnam_idx(quest[q_idx].r_idx), quest[q_idx].level); } else @@ -9396,7 +9409,7 @@ #else " %-40s (Dungeon level: %3d) - level %2d\n", #endif - r_name+r_info[quest[q_idx].r_idx].name, + monnam_idx(quest[q_idx].r_idx), quest[q_idx].level, quest[q_idx].complev); } @@ -9470,10 +9483,10 @@ /* Print the quest info */ #ifdef JP sprintf(tmp_str, " %-40s (%3d階) - レベル%2d\n", - r_name+r_info[quest[q_idx].r_idx].name, quest[q_idx].level, quest[q_idx].complev); + monnam_idx(quest[q_idx].r_idx), quest[q_idx].level, quest[q_idx].complev); #else sprintf(tmp_str, " %-40s (Dungeon level: %3d) - level %2d\n", - r_name+r_info[quest[q_idx].r_idx].name, quest[q_idx].level, quest[q_idx].complev); + monnam_idx(quest[q_idx].r_idx), quest[q_idx].level, quest[q_idx].complev); #endif } else @@ -9524,10 +9537,10 @@ /* Print the quest info */ #ifdef JP sprintf(tmp_str, " %s (%d階, %s)\n", - quest[i].name, quest[i].level, r_name+r_info[quest[i].r_idx].name); + quest[i].name, quest[i].level, monnam_idx(quest[i].r_idx)); #else sprintf(tmp_str, " %s (%d, %s)\n", - quest[i].name, quest[i].level, r_name+r_info[quest[i].r_idx].name); + quest[i].name, quest[i].level, monnam_idx(quest[i].r_idx)); #endif fprintf(fff, tmp_str); } diff -ur Hengband/src/cmd5.c Hengband_warwolf/src/cmd5.c --- Hengband/src/cmd5.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/cmd5.c Sun Apr 8 07:00:00 2007 @@ -2136,7 +2136,7 @@ /* Feature code (applying "mimic" field) */ feature_type *f_ptr = &f_info[get_feat_mimic(c_ptr)]; #ifdef JP - msg_format("そのモンスターは%sの%sにいる。", f_name + f_ptr->name, + msg_format("そのモンスターは%sの%sにいる。", feanam(f_ptr), ((!have_flag(f_ptr->flags, FF_MOVE) && !have_flag(f_ptr->flags, FF_CAN_FLY)) || (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ? "中" : "上"); @@ -2144,7 +2144,7 @@ msg_format("This monster is %s the %s.", ((!have_flag(f_ptr->flags, FF_MOVE) && !have_flag(f_ptr->flags, FF_CAN_FLY)) || (!have_flag(f_ptr->flags, FF_LOS) && !have_flag(f_ptr->flags, FF_TREE))) ? - "in" : "on", f_name + f_ptr->name); + "in" : "on", feanam(f_ptr)); #endif return FALSE; @@ -2332,10 +2332,10 @@ #ifdef JP sprintf(target_buf, "ペットのターゲットを指定 (現在:%s)", - (pet_t_m_idx ? (p_ptr->image ? "何か奇妙な物" : (r_name + r_info[m_list[pet_t_m_idx].ap_r_idx].name)) : "指定なし")); + (pet_t_m_idx ? (p_ptr->image ? "何か奇妙な物" : monnam_idx(m_list[pet_t_m_idx].ap_r_idx)) : "指定なし")); #else sprintf(target_buf, "specify a target of pet (now:%s)", - (pet_t_m_idx ? (p_ptr->image ? "something strange" : (r_name + r_info[m_list[pet_t_m_idx].ap_r_idx].name)) : "nothing")); + (pet_t_m_idx ? (p_ptr->image ? "something strange" : monnam_idx(m_list[pet_t_m_idx].ap_r_idx)) : "nothing")); #endif power_desc[num] = target_buf; diff -ur Hengband/src/cmd6.c Hengband_warwolf/src/cmd6.c --- Hengband/src/cmd6.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/cmd6.c Sun Apr 8 07:00:00 2007 @@ -1459,7 +1459,7 @@ switch (p_ptr->prace) { case RACE_VAMPIRE: - (void)set_food(p_ptr->food + (o_ptr->pval / 10)); + (void)set_food(p_ptr->food + (q_ptr->pval / 10)); break; case RACE_SKELETON: /* Do nothing */ @@ -1468,10 +1468,10 @@ case RACE_ZOMBIE: case RACE_DEMON: case RACE_SPECTRE: - set_food(p_ptr->food + ((o_ptr->pval) / 20)); + set_food(p_ptr->food + ((q_ptr->pval) / 20)); break; case RACE_ANDROID: - if (o_ptr->tval == TV_FLASK) + if (q_ptr->tval == TV_FLASK) { #ifdef JP msg_print("オイルを補給した。"); @@ -1482,7 +1482,7 @@ } else { - set_food(p_ptr->food + ((o_ptr->pval) / 20)); + set_food(p_ptr->food + ((q_ptr->pval) / 20)); } break; case RACE_ENT: @@ -1491,22 +1491,22 @@ #else msg_print("You are moistened."); #endif - set_food(MIN(p_ptr->food + o_ptr->pval + MAX(0, o_ptr->pval * 10) + 2000, PY_FOOD_MAX - 1)); + set_food(MIN(p_ptr->food + q_ptr->pval + MAX(0, q_ptr->pval * 10) + 2000, PY_FOOD_MAX - 1)); break; default: - (void)set_food(p_ptr->food + o_ptr->pval); + (void)set_food(p_ptr->food + q_ptr->pval); break; } break; case MIMIC_DEMON: case MIMIC_DEMON_LORD: - set_food(p_ptr->food + ((o_ptr->pval) / 20)); + set_food(p_ptr->food + ((q_ptr->pval) / 20)); break; case MIMIC_VAMPIRE: - (void)set_food(p_ptr->food + (o_ptr->pval / 10)); + (void)set_food(p_ptr->food + (q_ptr->pval / 10)); break; default: - (void)set_food(p_ptr->food + o_ptr->pval); + (void)set_food(p_ptr->food + q_ptr->pval); break; } } @@ -5206,9 +5206,9 @@ if(r_ptr->flags1 & RF1_UNIQUE) { #ifdef JP - msg_format("%s. ",r_name + r_ptr->name); + msg_format("%s. ",monnam(r_ptr)); #else - msg_format("%s. ",r_name + r_ptr->name); + msg_format("%s. ",monnam(r_ptr)); #endif } } @@ -7018,7 +7018,7 @@ #else " %-22.22s (%2d/%2d) %3d%%", #endif - k_name + k_info[k_idx].name, + kindnam_idx(k_idx), p_ptr->magic_num1[ctr+ext] ? (p_ptr->magic_num1[ctr+ext] - 1) / (EATER_ROD_CHARGE * k_info[k_idx].pval) +1 : 0, p_ptr->magic_num2[ctr+ext], chance)); @@ -7026,7 +7026,7 @@ } else { - strcat(dummy, format(" %-22.22s %2d/%2d %3d%%", k_name + k_info[k_idx].name, (s16b)(p_ptr->magic_num1[ctr+ext]/EATER_CHARGE), p_ptr->magic_num2[ctr+ext], chance)); + strcat(dummy, format(" %-22.22s %2d/%2d %3d%%", kindnam_idx(k_idx), (s16b)(p_ptr->magic_num1[ctr+ext]/EATER_CHARGE), p_ptr->magic_num2[ctr+ext], chance)); if (p_ptr->magic_num1[ctr+ext] < EATER_CHARGE) col = TERM_RED; } } @@ -7174,9 +7174,9 @@ /* Prompt */ #ifdef JP - (void) strnfmt(tmp_val, 78, "%sを使いますか? ", k_name + k_info[lookup_kind(tval ,i)].name); + (void) strnfmt(tmp_val, 78, "%sを使いますか? ", kindnam_idx(lookup_kind(tval ,i))); #else - (void) strnfmt(tmp_val, 78, "Use %s?", k_name + k_info[lookup_kind(tval ,i)].name); + (void) strnfmt(tmp_val, 78, "Use %s?", kindnam_idx(lookup_kind(tval ,i))); #endif /* Belay that order */ @@ -7224,7 +7224,7 @@ Term_erase(7, 21, 255); Term_erase(7, 20, 255); - roff_to_buf(k_text + k_info[lookup_kind(tval, i)].text, 62, temp, sizeof(temp)); + roff_to_buf(kindtext_idx(lookup_kind(tval, i)), 62, temp, sizeof(temp)); for (j = 0, line = 21; temp[j]; j += 1 + strlen(&temp[j])) { prt(&temp[j], line, 10); diff -ur Hengband/src/defines.h Hengband_warwolf/src/defines.h --- Hengband/src/defines.h Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/defines.h Mon Apr 9 12:44:08 2007 @@ -82,6 +82,12 @@ #define ANGBAND_2_8_1 #define ZANGBAND +/*** *** + *** Patch defines *** + *** ***/ +/* 種族:ワーウルフ */ +#define ADD_WEREWOLF + /* * Number of grids in each block (vertically) * Probably hard-coded to 11, see "generate.c" @@ -154,11 +160,6 @@ /* - * Total number of stores (see "store.c", etc) - */ -#define MAX_STORES 10 - -/* * Number of buildings */ #define MAX_BLDG 32 @@ -166,16 +167,24 @@ /* * Store types */ -#define STORE_GENERAL 0 -#define STORE_ARMOURY 1 -#define STORE_WEAPON 2 -#define STORE_TEMPLE 3 -#define STORE_ALCHEMIST 4 -#define STORE_MAGIC 5 -#define STORE_BLACK 6 -#define STORE_HOME 7 -#define STORE_BOOK 8 -#define STORE_MUSEUM 9 +enum +{ + STORE_GENERAL, + STORE_ARMOURY, + STORE_WEAPON, + STORE_TEMPLE, + STORE_ALCHEMIST, + STORE_MAGIC, + STORE_BLACK, + STORE_HOME, + STORE_BOOK, + STORE_MUSEUM, + +/* + * Total number of stores (see "store.c", etc) + */ + MAX_STORES +}; #define BUILDING_NON_MEMBER 0 @@ -187,18 +196,6 @@ */ #define MAX_OWNERS 32 -/* - * Maximum number of player "sex" types (see "table.c", etc) - */ -#define MAX_SEXES 2 - -/* - * Maximum number of player "class" types (see "table.c", etc) - */ -#define MAX_CLASS 27 - -#define MAX_SEIKAKU 12 - /* The number of "patrons" available (for Chaos Warriors) */ #define MAX_PATRON 16 @@ -208,42 +205,45 @@ #define MAX_SAN_COMMENT 5 /* Chaos Warrior: Reward types: */ -#define REW_POLY_SLF 1 -#define REW_GAIN_EXP 2 -#define REW_LOSE_EXP 3 -#define REW_GOOD_OBJ 4 -#define REW_GREA_OBJ 5 -#define REW_CHAOS_WP 6 -#define REW_GOOD_OBS 7 -#define REW_GREA_OBS 8 -#define REW_TY_CURSE 9 -#define REW_SUMMON_M 10 -#define REW_H_SUMMON 11 -#define REW_DO_HAVOC 12 -#define REW_GAIN_ABL 13 -#define REW_LOSE_ABL 14 -#define REW_RUIN_ABL 15 -#define REW_AUGM_ABL 16 -#define REW_POLY_WND 17 -#define REW_HEAL_FUL 18 -#define REW_HURT_LOT 19 -#define REW_CURSE_WP 20 -#define REW_CURSE_AR 21 -#define REW_PISS_OFF 22 -#define REW_WRATH 23 -#define REW_DESTRUCT 24 -#define REW_GENOCIDE 25 -#define REW_MASS_GEN 26 -#define REW_DISPEL_C 27 -#define REW_UNUSED_1 28 -#define REW_UNUSED_2 29 -#define REW_UNUSED_3 30 -#define REW_UNUSED_4 31 -#define REW_UNUSED_5 32 -#define REW_IGNORE 33 -#define REW_SER_UNDE 34 -#define REW_SER_DEMO 35 -#define REW_SER_MONS 36 +enum +{ + REW_POLY_SLF, + REW_GAIN_EXP, + REW_LOSE_EXP, + REW_GOOD_OBJ, + REW_GREA_OBJ, + REW_CHAOS_WP, + REW_GOOD_OBS, + REW_GREA_OBS, + REW_TY_CURSE, + REW_SUMMON_M, + REW_H_SUMMON, + REW_DO_HAVOC, + REW_GAIN_ABL, + REW_LOSE_ABL, + REW_RUIN_ABL, + REW_AUGM_ABL, + REW_POLY_WND, + REW_HEAL_FUL, + REW_HURT_LOT, + REW_CURSE_WP, + REW_CURSE_AR, + REW_PISS_OFF, + REW_WRATH, + REW_DESTRUCT, + REW_GENOCIDE, + REW_MASS_GEN, + REW_DISPEL_C, + REW_UNUSED_1, + REW_UNUSED_2, + REW_UNUSED_3, + REW_UNUSED_4, + REW_UNUSED_5, + REW_IGNORE, + REW_SER_UNDE, + REW_SER_DEMO, + REW_SER_MONS, +}; /* Chaos mutations */ @@ -358,6 +358,13 @@ # define MA_KNEE 1 # define MA_SLOW 2 +/* Werewolf martial arts... */ +#ifdef ADD_WEREWOLF +# define MAX_MA_WOLF 10 +# define MA_WOLF_FOOT 1 +# define MA_WOLF_EYE 2 +#endif + /* Mindcraft */ #define MAX_MIND_POWERS 21 @@ -368,12 +375,21 @@ #define MAX_SILLY_ATTACK 29 #endif -#define MIND_MINDCRAFTER 0 -#define MIND_KI 1 -#define MIND_BERSERKER 2 -#define MIND_MIRROR_MASTER 3 -#define MIND_NINJUTSU 4 +enum +{ + MIND_MINDCRAFTER, + MIND_KI, + MIND_BERSERKER, + MIND_MIRROR_MASTER, + MIND_NINJUTSU, + +/* + * Maximum number of mind types + */ + MAX_MIND_TYPES +}; +#define mind_is_from_hitpoints(mind) ((mind) == MIND_BERSERKER || (mind) == MIND_NINJUTSU) /* * Size of memory reserved for initialization of some arrays @@ -724,22 +740,30 @@ /* * Magic realms */ -#define REALM_NONE 0 -#define REALM_LIFE 1 -#define REALM_SORCERY 2 -#define REALM_NATURE 3 -#define REALM_CHAOS 4 -#define REALM_DEATH 5 -#define REALM_TRUMP 6 -#define REALM_ARCANE 7 -#define REALM_CRAFT 8 -#define REALM_DAEMON 9 -#define REALM_CRUSADE 10 -#define MAX_MAGIC 10 -#define MIN_TECHNIC 16 -#define REALM_MUSIC 16 -#define REALM_HISSATSU 17 -#define MAX_REALM 17 +enum +{ + REALM_NONE, + REALM_LIFE, + REALM_SORCERY, + REALM_NATURE, + REALM_CHAOS, + REALM_DEATH, + REALM_TRUMP, + REALM_ARCANE, + REALM_CRAFT, + REALM_DAEMON, + REALM_CRUSADE, + + MAX_MAGIC_TMP, + MAX_MAGIC = MAX_MAGIC_TMP - 1, + + MIN_TECHNIC = 16, + REALM_MUSIC = MIN_TECHNIC, + REALM_HISSATSU, + + MAX_REALM_TMP, + MAX_REALM = MAX_REALM_TMP - 1, +}; #define VALID_REALM (MAX_REALM + MAX_MAGIC - MIN_TECHNIC + 1) #define NUM_TECHNIC (MAX_REALM - MIN_TECHNIC + 1) @@ -768,6 +792,8 @@ #define SPELL_CONT 6 +enum +{ /* * Maximum number of "normal" pack slots, and the index of the "overflow" * slot, which can hold an item, but only temporarily, since it causes the @@ -776,33 +802,34 @@ * Note that "INVEN_PACK" is probably hard-coded by its use in savefiles, and * by the fact that the screen can only show 23 items plus a one-line prompt. */ -#define INVEN_PACK 23 + INVEN_PACK = 23, /* * Indexes used for various "equipment" slots (hard-coded by savefiles, etc). */ -#define INVEN_RARM 24 -#define INVEN_LARM 25 -#define INVEN_BOW 26 -#define INVEN_RIGHT 27 -#define INVEN_LEFT 28 -#define INVEN_NECK 29 -#define INVEN_LITE 30 -#define INVEN_BODY 31 -#define INVEN_OUTER 32 -#define INVEN_HEAD 33 -#define INVEN_HANDS 34 -#define INVEN_FEET 35 + INVEN_RARM, + INVEN_LARM, + INVEN_BOW, + INVEN_RIGHT, + INVEN_LEFT, + INVEN_NECK, + INVEN_LITE, + INVEN_BODY, + INVEN_OUTER, + INVEN_HEAD, + INVEN_HANDS, + INVEN_FEET, /* - * used for get_random_ego() + * Total number of inventory slots (hard-coded). */ -#define INVEN_AMMO 23 + INVEN_TOTAL +}; /* - * Total number of inventory slots (hard-coded). + * used for get_random_ego() */ -#define INVEN_TOTAL 36 +#define INVEN_AMMO 23 /* * Fake inventory slot for selecting force (hard-coded). @@ -813,110 +840,176 @@ /* * Indexes of the various "stats" (hard-coded by savefiles, etc). */ -#define A_STR 0 -#define A_INT 1 -#define A_WIS 2 -#define A_DEX 3 -#define A_CON 4 -#define A_CHR 5 +enum +{ + A_STR, + A_INT, + A_WIS, + A_DEX, + A_CON, + A_CHR, +}; /* * Player sex constants (hard-coded by save-files, arrays, etc) */ -#define SEX_FEMALE 0 -#define SEX_MALE 1 +enum +{ + SEX_FEMALE, + SEX_MALE, +/* + * Maximum number of player "sex" types (see "table.c", etc) + */ + MAX_SEXES +}; /* * Player race constants (hard-coded by save-files, arrays, etc) */ -#define RACE_HUMAN 0 -#define RACE_HALF_ELF 1 -#define RACE_ELF 2 -#define RACE_HOBBIT 3 -#define RACE_GNOME 4 -#define RACE_DWARF 5 -#define RACE_HALF_ORC 6 -#define RACE_HALF_TROLL 7 -#define RACE_AMBERITE 8 -#define RACE_HIGH_ELF 9 -#define RACE_BARBARIAN 10 -#define RACE_HALF_OGRE 11 -#define RACE_HALF_GIANT 12 -#define RACE_HALF_TITAN 13 -#define RACE_CYCLOPS 14 -#define RACE_YEEK 15 -#define RACE_KLACKON 16 -#define RACE_KOBOLD 17 -#define RACE_NIBELUNG 18 -#define RACE_DARK_ELF 19 -#define RACE_DRACONIAN 20 -#define RACE_MIND_FLAYER 21 -#define RACE_IMP 22 -#define RACE_GOLEM 23 -#define RACE_SKELETON 24 -#define RACE_ZOMBIE 25 -#define RACE_VAMPIRE 26 -#define RACE_SPECTRE 27 -#define RACE_SPRITE 28 -#define RACE_BEASTMAN 29 -#define RACE_ENT 30 -#define RACE_ANGEL 31 -#define RACE_DEMON 32 -#define RACE_DUNADAN 33 -#define RACE_S_FAIRY 34 -#define RACE_KUTA 35 -#define RACE_ANDROID 36 +enum +{ + RACE_HUMAN, + RACE_HALF_ELF, + RACE_ELF, + RACE_HOBBIT, + RACE_GNOME, + RACE_DWARF, + RACE_HALF_ORC, + RACE_HALF_TROLL, + RACE_AMBERITE, + RACE_HIGH_ELF, + RACE_BARBARIAN, + RACE_HALF_OGRE, + RACE_HALF_GIANT, + RACE_HALF_TITAN, + RACE_CYCLOPS, + RACE_YEEK, + RACE_KLACKON, + RACE_KOBOLD, + RACE_NIBELUNG, + RACE_DARK_ELF, + RACE_DRACONIAN, + RACE_MIND_FLAYER, + RACE_IMP, + RACE_GOLEM, + RACE_SKELETON, + RACE_ZOMBIE, + RACE_VAMPIRE, + RACE_SPECTRE, + RACE_SPRITE, + RACE_BEASTMAN, + RACE_ENT, + RACE_ANGEL, + RACE_DEMON, + RACE_DUNADAN, + RACE_S_FAIRY, + RACE_KUTA, + RACE_ANDROID, +#ifdef ADD_WEREWOLF + RACE_WEREWOLF, +#endif /* * Maximum number of player "race" types (see "table.c", etc) */ -#define MAX_RACES 37 + MAX_RACES +}; /* * Player class constants (hard-coded by save-files, arrays, etc) */ -#define CLASS_WARRIOR 0 -#define CLASS_MAGE 1 -#define CLASS_PRIEST 2 -#define CLASS_ROGUE 3 -#define CLASS_RANGER 4 -#define CLASS_PALADIN 5 -#define CLASS_WARRIOR_MAGE 6 -#define CLASS_CHAOS_WARRIOR 7 -#define CLASS_MONK 8 -#define CLASS_MINDCRAFTER 9 -#define CLASS_HIGH_MAGE 10 -#define CLASS_TOURIST 11 -#define CLASS_IMITATOR 12 -#define CLASS_BEASTMASTER 13 -#define CLASS_SORCERER 14 -#define CLASS_ARCHER 15 -#define CLASS_MAGIC_EATER 16 -#define CLASS_BARD 17 -#define CLASS_RED_MAGE 18 -#define CLASS_SAMURAI 19 -#define CLASS_FORCETRAINER 20 -#define CLASS_BLUE_MAGE 21 -#define CLASS_CAVALRY 22 -#define CLASS_BERSERKER 23 -#define CLASS_SMITH 24 -#define CLASS_MIRROR_MASTER 25 -#define CLASS_NINJA 26 - -#define SEIKAKU_FUTUU 0 -#define SEIKAKU_CHIKARA 1 -#define SEIKAKU_KIREMONO 2 -#define SEIKAKU_SHIAWASE 3 -#define SEIKAKU_SUBASI 4 -#define SEIKAKU_INOCHI 5 -#define SEIKAKU_COMBAT 6 -#define SEIKAKU_NAMAKE 7 -#define SEIKAKU_SEXY 8 -#define SEIKAKU_LUCKY 9 -#define SEIKAKU_GAMAN 10 -#define SEIKAKU_MUNCHKIN 11 +enum +{ + CLASS_WARRIOR, + CLASS_MAGE, + CLASS_PRIEST, + CLASS_ROGUE, + CLASS_RANGER, + CLASS_PALADIN, + CLASS_WARRIOR_MAGE, + CLASS_CHAOS_WARRIOR, + CLASS_MONK, + CLASS_MINDCRAFTER, + CLASS_HIGH_MAGE, + CLASS_TOURIST, + CLASS_IMITATOR, + CLASS_BEASTMASTER, + CLASS_SORCERER, + CLASS_ARCHER, + CLASS_MAGIC_EATER, + CLASS_BARD, + CLASS_RED_MAGE, + CLASS_SAMURAI, + CLASS_FORCETRAINER, + CLASS_BLUE_MAGE, + CLASS_CAVALRY, + CLASS_BERSERKER, + CLASS_SMITH, + CLASS_MIRROR_MASTER, + CLASS_NINJA, + +/* + * Maximum number of player "class" types (see "table.c", etc) + */ + MAX_CLASS +}; + +enum +{ + SEIKAKU_FUTUU, + SEIKAKU_CHIKARA, + SEIKAKU_KIREMONO, + SEIKAKU_SHIAWASE, + SEIKAKU_SUBASI, + SEIKAKU_INOCHI, + SEIKAKU_COMBAT, + SEIKAKU_NAMAKE, + SEIKAKU_SEXY, + SEIKAKU_LUCKY, + SEIKAKU_GAMAN, + SEIKAKU_MUNCHKIN, + +/* + * Maximum number of player "seikaku" types (see "table.c", etc) + */ + MAX_SEIKAKU +}; + + +/* + * Legal class choices for player_race + */ +#define CH0_WARRIOR (1L << CLASS_WARRIOR) +#define CH0_MAGE (1L << CLASS_MAGE) +#define CH0_PRIEST (1L << CLASS_PRIEST) +#define CH0_ROGUE (1L << CLASS_ROGUE) +#define CH0_RANGER (1L << CLASS_RANGER) +#define CH0_PALADIN (1L << CLASS_PALADIN) +#define CH0_WARRIOR_MAGE (1L << CLASS_WARRIOR_MAGE) +#define CH0_CHAOS_WARRIOR (1L << CLASS_CHAOS_WARRIOR) +#define CH0_MONK (1L << CLASS_MONK) +#define CH0_MINDCRAFTER (1L << CLASS_MINDCRAFTER) +#define CH0_HIGH_MAGE (1L << CLASS_HIGH_MAGE) +#define CH0_TOURIST (1L << CLASS_TOURIST) +#define CH0_IMITATOR (1L << CLASS_IMITATOR) +#define CH0_BEASTMASTER (1L << CLASS_BEASTMASTER) +#define CH0_SORCERER (1L << CLASS_SORCERER) +#define CH0_ARCHER (1L << CLASS_ARCHER) +#define CH0_MAGIC_EATER (1L << CLASS_MAGIC_EATER) +#define CH0_BARD (1L << CLASS_BARD) +#define CH0_RED_MAGE (1L << CLASS_RED_MAGE) +#define CH0_SAMURAI (1L << CLASS_SAMURAI) +#define CH0_FORCETRAINER (1L << CLASS_FORCETRAINER) +#define CH0_BLUE_MAGE (1L << CLASS_BLUE_MAGE) +#define CH0_CAVALRY (1L << CLASS_CAVALRY) +#define CH0_BERSERKER (1L << CLASS_BERSERKER) +#define CH0_SMITH (1L << CLASS_SMITH) +#define CH0_MIRROR_MASTER (1L << CLASS_MIRROR_MASTER) +#define CH0_NINJA (1L << CLASS_NINJA) + +/* #define CH1_XXXXX (1L << (CLASS_XXXXX-32)) */ /*** Screen Locations ***/ @@ -2874,16 +2967,18 @@ #define MAX_KATA 4 #define KATA_MASK (KATA_IAI | KATA_FUUJIN | KATA_KOUKIJIN | KATA_MUSOU) - -#define ACTION_NONE 0 -#define ACTION_SEARCH 1 -#define ACTION_REST 2 -#define ACTION_LEARN 3 -#define ACTION_FISH 4 -#define ACTION_KAMAE 5 -#define ACTION_KATA 6 -#define ACTION_SING 7 -#define ACTION_HAYAGAKE 8 +enum +{ + ACTION_NONE, + ACTION_SEARCH, + ACTION_REST, + ACTION_LEARN, + ACTION_FISH, + ACTION_KAMAE, + ACTION_KATA, + ACTION_SING, + ACTION_HAYAGAKE, +}; /* Empty hand status */ @@ -2950,109 +3045,112 @@ /* * Spell types used by project(), and related functions. */ -#define GF_ELEC 1 -#define GF_POIS 2 -#define GF_ACID 3 -#define GF_COLD 4 -#define GF_FIRE 5 -#define GF_PSY_SPEAR 9 -#define GF_MISSILE 10 -#define GF_ARROW 11 -#define GF_PLASMA 12 +enum +{ + GF_ELEC = 1, + GF_POIS = 2, + GF_ACID = 3, + GF_COLD = 4, + GF_FIRE = 5, + GF_PSY_SPEAR = 9, + GF_MISSILE = 10, + GF_ARROW = 11, + GF_PLASMA = 12, /* Replaced with GF_HOLY_FIRE and GF_HELL_FIRE */ -/* #define GF_HOLY_ORB 13 */ -#define GF_WATER 14 -#define GF_LITE 15 -#define GF_DARK 16 -#define GF_LITE_WEAK 17 -#define GF_DARK_WEAK 18 -#define GF_SHARDS 20 -#define GF_SOUND 21 -#define GF_CONFUSION 22 -#define GF_FORCE 23 -#define GF_INERTIA 24 -#define GF_MANA 26 -#define GF_METEOR 27 -#define GF_ICE 28 -#define GF_CHAOS 30 -#define GF_NETHER 31 -#define GF_DISENCHANT 32 -#define GF_NEXUS 33 -#define GF_TIME 34 -#define GF_GRAVITY 35 -#define GF_KILL_WALL 40 -#define GF_KILL_DOOR 41 -#define GF_KILL_TRAP 42 -#define GF_MAKE_WALL 45 -#define GF_MAKE_DOOR 46 -#define GF_MAKE_TRAP 47 -#define GF_MAKE_TREE 48 -#define GF_OLD_CLONE 51 -#define GF_OLD_POLY 52 -#define GF_OLD_HEAL 53 -#define GF_OLD_SPEED 54 -#define GF_OLD_SLOW 55 -#define GF_OLD_CONF 56 -#define GF_OLD_SLEEP 57 -#define GF_OLD_DRAIN 58 -#define GF_AWAY_UNDEAD 61 -#define GF_AWAY_EVIL 62 -#define GF_AWAY_ALL 63 -#define GF_TURN_UNDEAD 64 -#define GF_TURN_EVIL 65 -#define GF_TURN_ALL 66 -#define GF_DISP_UNDEAD 67 -#define GF_DISP_EVIL 68 -#define GF_DISP_ALL 69 -#define GF_DISP_DEMON 70 /* New types for Zangband begin here... */ -#define GF_DISP_LIVING 71 -#define GF_ROCKET 72 -#define GF_NUKE 73 -#define GF_MAKE_GLYPH 74 -#define GF_STASIS 75 -#define GF_STONE_WALL 76 -#define GF_DEATH_RAY 77 -#define GF_STUN 78 -#define GF_HOLY_FIRE 79 -#define GF_HELL_FIRE 80 -#define GF_DISINTEGRATE 81 -#define GF_CHARM 82 -#define GF_CONTROL_UNDEAD 83 -#define GF_CONTROL_ANIMAL 84 -#define GF_PSI 85 -#define GF_PSI_DRAIN 86 -#define GF_TELEKINESIS 87 -#define GF_JAM_DOOR 88 -#define GF_DOMINATION 89 -#define GF_DISP_GOOD 90 -#define GF_DRAIN_MANA 91 -#define GF_MIND_BLAST 92 -#define GF_BRAIN_SMASH 93 -#define GF_CAUSE_1 94 -#define GF_CAUSE_2 95 -#define GF_CAUSE_3 96 -#define GF_CAUSE_4 97 -#define GF_HAND_DOOM 98 -#define GF_CAPTURE 99 -#define GF_ANIM_DEAD 100 -#define GF_CONTROL_LIVING 101 -#define GF_IDENTIFY 102 -#define GF_ATTACK 103 -#define GF_ENGETSU 104 -#define GF_GENOCIDE 105 -#define GF_PHOTO 106 -#define GF_CONTROL_DEMON 107 -#define GF_LAVA_FLOW 108 -#define GF_BLOOD_CURSE 109 -#define GF_SEEKER 110 -#define GF_SUPER_RAY 111 -#define GF_STAR_HEAL 112 -#define GF_WATER_FLOW 113 -#define GF_CRUSADE 114 -#define GF_STASIS_EVIL 115 -#define GF_WOUNDS 116 +/* GF_HOLY_ORB = 13, */ + GF_WATER = 14, + GF_LITE = 15, + GF_DARK = 16, + GF_LITE_WEAK = 17, + GF_DARK_WEAK = 18, + GF_SHARDS = 20, + GF_SOUND = 21, + GF_CONFUSION = 22, + GF_FORCE = 23, + GF_INERTIA = 24, + GF_MANA = 26, + GF_METEOR = 27, + GF_ICE = 28, + GF_CHAOS = 30, + GF_NETHER = 31, + GF_DISENCHANT = 32, + GF_NEXUS = 33, + GF_TIME = 34, + GF_GRAVITY = 35, + GF_KILL_WALL = 40, + GF_KILL_DOOR = 41, + GF_KILL_TRAP = 42, + GF_MAKE_WALL = 45, + GF_MAKE_DOOR = 46, + GF_MAKE_TRAP = 47, + GF_MAKE_TREE = 48, + GF_OLD_CLONE = 51, + GF_OLD_POLY = 52, + GF_OLD_HEAL = 53, + GF_OLD_SPEED = 54, + GF_OLD_SLOW = 55, + GF_OLD_CONF = 56, + GF_OLD_SLEEP = 57, + GF_OLD_DRAIN = 58, + GF_AWAY_UNDEAD = 61, + GF_AWAY_EVIL = 62, + GF_AWAY_ALL = 63, + GF_TURN_UNDEAD = 64, + GF_TURN_EVIL = 65, + GF_TURN_ALL = 66, + GF_DISP_UNDEAD = 67, + GF_DISP_EVIL = 68, + GF_DISP_ALL = 69, + GF_DISP_DEMON = 70, /* New types for Zangband begin here... */ + GF_DISP_LIVING = 71, + GF_ROCKET = 72, + GF_NUKE = 73, + GF_MAKE_GLYPH = 74, + GF_STASIS = 75, + GF_STONE_WALL = 76, + GF_DEATH_RAY = 77, + GF_STUN = 78, + GF_HOLY_FIRE = 79, + GF_HELL_FIRE = 80, + GF_DISINTEGRATE = 81, + GF_CHARM = 82, + GF_CONTROL_UNDEAD = 83, + GF_CONTROL_ANIMAL = 84, + GF_PSI = 85, + GF_PSI_DRAIN = 86, + GF_TELEKINESIS = 87, + GF_JAM_DOOR = 88, + GF_DOMINATION = 89, + GF_DISP_GOOD = 90, + GF_DRAIN_MANA = 91, + GF_MIND_BLAST = 92, + GF_BRAIN_SMASH = 93, + GF_CAUSE_1 = 94, + GF_CAUSE_2 = 95, + GF_CAUSE_3 = 96, + GF_CAUSE_4 = 97, + GF_HAND_DOOM = 98, + GF_CAPTURE = 99, + GF_ANIM_DEAD = 100, + GF_CONTROL_LIVING = 101, + GF_IDENTIFY = 102, + GF_ATTACK = 103, + GF_ENGETSU = 104, + GF_GENOCIDE = 105, + GF_PHOTO = 106, + GF_CONTROL_DEMON = 107, + GF_LAVA_FLOW = 108, + GF_BLOOD_CURSE = 109, + GF_SEEKER = 110, + GF_SUPER_RAY = 111, + GF_STAR_HEAL = 112, + GF_WATER_FLOW = 113, + GF_CRUSADE = 114, + GF_STASIS_EVIL = 115, + GF_WOUNDS = 116, -#define MAX_GF 117 + MAX_GF +}; /* * Some things which induce learning @@ -4373,6 +4471,50 @@ } /* + * feature macro + */ +#define feanam(ptr) (f_name + (ptr)->name) +#define feanam_idx(idx) (f_name + f_info[(idx)].name) + +/* + * object macro + */ +#define kindnam(ptr) (k_name + (ptr)->name) +#define kindnam_idx(idx) (k_name + k_info[(idx)].name) +#define kindfnam(ptr) (k_name + (ptr)->flavor_name) +#define kindtext_idx(idx) (k_text + k_info[(idx)].text) + +/* + * artifact macro + */ +#define artnam(ptr) (a_name + (ptr)->name) +#define artnam_idx(idx) (a_name + a_info[(idx)].name) +#define arttext_idx(idx) (a_text + a_info[(idx)].text) +#define artnam_obj(ptr) (a_name + a_info[(ptr)->name1].name) + +/* + * ego macro + */ +#define egonam(ptr) (e_name + (ptr)->name) +#define egonam_obj(ptr) (e_name + e_info[(ptr)->name2].name) + +/* + * monster macro + */ +#define monnam(ptr) (r_name + (ptr)->name) +#define monnam_idx(idx) (r_name + r_info[(idx)].name) +#define montext(ptr) (r_text + (ptr)->text) +#ifdef JP +#define monnamE(ptr) (r_name + (ptr)->E_name) +#endif + +/* + * dungeon macro + */ +#define dunnam_idx(idx) (d_name + d_info[(idx)].name) +#define duntext_idx(idx) (d_text + d_info[(idx)].text) + +/* * Hack -- Prepare to use the "Secure" routines */ #if defined(SET_UID) && defined(SECURE) @@ -4381,8 +4523,6 @@ # define geteuid() PlayerUID #endif - - /*** Color constants ***/ @@ -4424,76 +4564,78 @@ * * Some "sound" constants for "Term_xtra(TERM_XTRA_SOUND, val)" */ -#define SOUND_HIT 1 -#define SOUND_MISS 2 -#define SOUND_FLEE 3 -#define SOUND_DROP 4 -#define SOUND_KILL 5 -#define SOUND_LEVEL 6 -#define SOUND_DEATH 7 -#define SOUND_STUDY 8 -#define SOUND_TELEPORT 9 -#define SOUND_SHOOT 10 -#define SOUND_QUAFF 11 -#define SOUND_ZAP 12 -#define SOUND_WALK 13 -#define SOUND_TPOTHER 14 -#define SOUND_HITWALL 15 -#define SOUND_EAT 16 -#define SOUND_STORE1 17 -#define SOUND_STORE2 18 -#define SOUND_STORE3 19 -#define SOUND_STORE4 20 -#define SOUND_DIG 21 -#define SOUND_OPENDOOR 22 -#define SOUND_SHUTDOOR 23 -#define SOUND_TPLEVEL 24 -#define SOUND_SCROLL 25 -#define SOUND_BUY 26 -#define SOUND_SELL 27 -#define SOUND_WARN 28 -#define SOUND_ROCKET 29 /* Somebody's shooting rockets */ -#define SOUND_N_KILL 30 /* The player kills a non-living/undead monster */ -#define SOUND_U_KILL 31 /* The player kills a unique */ -#define SOUND_QUEST 32 /* The player has just completed a quest */ -#define SOUND_HEAL 33 /* The player was healed a little bit */ -#define SOUND_X_HEAL 34 /* The player was healed full health */ -#define SOUND_BITE 35 /* A monster bites you */ -#define SOUND_CLAW 36 /* A monster claws you */ -#define SOUND_M_SPELL 37 /* A monster casts a miscellaneous spell */ -#define SOUND_SUMMON 38 /* A monster casts a summoning spell */ -#define SOUND_BREATH 39 /* A monster breathes */ -#define SOUND_BALL 40 /* A monster casts a ball / bolt spell */ -#define SOUND_M_HEAL 41 /* A monster heals itself somehow */ -#define SOUND_ATK_SPELL 42 /* A monster casts a misc. offensive spell */ -#define SOUND_EVIL 43 /* Something nasty has just happened! */ -#define SOUND_TOUCH 44 /* A monster touches you */ -#define SOUND_STING 45 /* A monster stings you */ -#define SOUND_CRUSH 46 /* A monster crushes / envelopes you */ -#define SOUND_SLIME 47 /* A monster drools/spits/etc on you */ -#define SOUND_WAIL 48 /* A monster wails */ -#define SOUND_WINNER 49 /* Just won the game! */ -#define SOUND_FIRE 50 /* An item was burned */ -#define SOUND_ACID 51 /* An item was destroyed by acid */ -#define SOUND_ELEC 52 /* An item was destroyed by electricity */ -#define SOUND_COLD 53 /* An item was shattered */ -#define SOUND_ILLEGAL 54 /* Illegal command attempted */ -#define SOUND_FAIL 55 /* Fail to get a spell off / activate an item */ -#define SOUND_WAKEUP 56 /* A monster wakes up */ -#define SOUND_INVULN 57 /* Invulnerability! */ -#define SOUND_FALL 58 /* Falling through a trapdoor... */ -#define SOUND_PAIN 59 /* A monster is in pain! */ -#define SOUND_DESTITEM 60 /* An item was destroyed by misc. means */ -#define SOUND_MOAN 61 /* A monster makes a moan/beg/insult attack */ -#define SOUND_SHOW 62 /* A monster makes a "show" attack */ -#define SOUND_UNUSED 63 /* (no sound for gaze attacks) */ -#define SOUND_EXPLODE 64 /* Something (or somebody) explodes */ -#define SOUND_GLASS 65 /* A glass feature was crashed */ - +enum +{ + SOUND_HIT = 1, + SOUND_MISS, + SOUND_FLEE, + SOUND_DROP, + SOUND_KILL, + SOUND_LEVEL, + SOUND_DEATH, + SOUND_STUDY, + SOUND_TELEPORT, + SOUND_SHOOT, + SOUND_QUAFF, + SOUND_ZAP, + SOUND_WALK, + SOUND_TPOTHER, + SOUND_HITWALL, + SOUND_EAT, + SOUND_STORE1, + SOUND_STORE2, + SOUND_STORE3, + SOUND_STORE4, + SOUND_DIG, + SOUND_OPENDOOR, + SOUND_SHUTDOOR, + SOUND_TPLEVEL, + SOUND_SCROLL, + SOUND_BUY, + SOUND_SELL, + SOUND_WARN, + SOUND_ROCKET, /* Somebody's shooting rockets */ + SOUND_N_KILL, /* The player kills a non-living/undead monster */ + SOUND_U_KILL, /* The player kills a unique */ + SOUND_QUEST, /* The player has just completed a quest */ + SOUND_HEAL, /* The player was healed a little bit */ + SOUND_X_HEAL, /* The player was healed full health */ + SOUND_BITE, /* A monster bites you */ + SOUND_CLAW, /* A monster claws you */ + SOUND_M_SPELL, /* A monster casts a miscellaneous spell */ + SOUND_SUMMON, /* A monster casts a summoning spell */ + SOUND_BREATH, /* A monster breathes */ + SOUND_BALL, /* A monster casts a ball / bolt spell */ + SOUND_M_HEAL, /* A monster heals itself somehow */ + SOUND_ATK_SPELL, /* A monster casts a misc. offensive spell */ + SOUND_EVIL, /* Something nasty has just happened! */ + SOUND_TOUCH, /* A monster touches you */ + SOUND_STING, /* A monster stings you */ + SOUND_CRUSH, /* A monster crushes / envelopes you */ + SOUND_SLIME, /* A monster drools/spits/etc on you */ + SOUND_WAIL, /* A monster wails */ + SOUND_WINNER, /* Just won the game! */ + SOUND_FIRE, /* An item was burned */ + SOUND_ACID, /* An item was destroyed by acid */ + SOUND_ELEC, /* An item was destroyed by electricity */ + SOUND_COLD, /* An item was shattered */ + SOUND_ILLEGAL, /* Illegal command attempted */ + SOUND_FAIL, /* Fail to get a spell off / activate an item */ + SOUND_WAKEUP, /* A monster wakes up */ + SOUND_INVULN, /* Invulnerability! */ + SOUND_FALL, /* Falling through a trapdoor... */ + SOUND_PAIN, /* A monster is in pain! */ + SOUND_DESTITEM, /* An item was destroyed by misc. means */ + SOUND_MOAN, /* A monster makes a moan/beg/insult attack */ + SOUND_SHOW, /* A monster makes a "show" attack */ + SOUND_UNUSED, /* (no sound for gaze attacks) */ + SOUND_EXPLODE, /* Something (or somebody) explodes */ + SOUND_GLASS, /* A glass feature was crashed */ /* * Mega-Hack -- maximum known sounds */ -#define SOUND_MAX 66 + SOUND_MAX +}; #define MAX_VIRTUE 18 @@ -4538,76 +4680,86 @@ /* * Buildings actions */ -#define BACT_NOTHING 0 -#define BACT_RESEARCH_ITEM 1 -#define BACT_TOWN_HISTORY 2 -#define BACT_RACE_LEGENDS 3 -#define BACT_GREET_KING 4 -#define BACT_KING_LEGENDS 5 -#define BACT_QUEST 6 -#define BACT_XXX_UNUSED 7 -#define BACT_POSTER 8 -#define BACT_ARENA_RULES 9 -#define BACT_ARENA 10 -#define BACT_ARENA_LEGENDS 11 -#define BACT_IN_BETWEEN 12 -#define BACT_GAMBLE_RULES 13 -#define BACT_CRAPS 14 -#define BACT_SPIN_WHEEL 15 -#define BACT_DICE_SLOTS 16 -#define BACT_REST 17 -#define BACT_FOOD 18 -#define BACT_RUMORS 19 -#define BACT_RESEARCH_MONSTER 20 -#define BACT_COMPARE_WEAPONS 21 -#define BACT_LEGENDS 22 -#define BACT_ENCHANT_WEAPON 23 -#define BACT_ENCHANT_ARMOR 24 -#define BACT_RECHARGE 25 -#define BACT_IDENTS 26 -#define BACT_LEARN 27 -#define BACT_HEALING 28 -#define BACT_RESTORE 29 -#define BACT_ENCHANT_ARROWS 30 -#define BACT_ENCHANT_BOW 31 -#define BACT_GREET 32 -#define BACT_RECALL 33 -#define BACT_TELEPORT_LEVEL 34 -#define BACT_LOSE_MUTATION 35 -#define BACT_BATTLE 36 -#define BACT_TSUCHINOKO 37 -#define BACT_TARGET 38 -#define BACT_KUBI 39 -#define BACT_KANKIN 40 -#define BACT_HEIKOUKA 41 -#define BACT_TELE_TOWN 42 -#define BACT_POKER 43 -#define BACT_IDENT_ONE 44 -#define BACT_RECHARGE_ALL 45 -#define BACT_EVAL_AC 46 -#define MAX_BACT 47 +enum +{ + BACT_NOTHING, + BACT_RESEARCH_ITEM, + BACT_TOWN_HISTORY, + BACT_RACE_LEGENDS, + BACT_GREET_KING, + BACT_KING_LEGENDS, + BACT_QUEST, + BACT_XXX_UNUSED, + BACT_POSTER, + BACT_ARENA_RULES, + BACT_ARENA, + BACT_ARENA_LEGENDS, + BACT_IN_BETWEEN, + BACT_GAMBLE_RULES, + BACT_CRAPS, + BACT_SPIN_WHEEL, + BACT_DICE_SLOTS, + BACT_REST, + BACT_FOOD, + BACT_RUMORS, + BACT_RESEARCH_MONSTER, + BACT_COMPARE_WEAPONS, + BACT_LEGENDS, + BACT_ENCHANT_WEAPON, + BACT_ENCHANT_ARMOR, + BACT_RECHARGE, + BACT_IDENTS, + BACT_LEARN, + BACT_HEALING, + BACT_RESTORE, + BACT_ENCHANT_ARROWS, + BACT_ENCHANT_BOW, + BACT_GREET, + BACT_RECALL, + BACT_TELEPORT_LEVEL, + BACT_LOSE_MUTATION, + BACT_BATTLE, + BACT_TSUCHINOKO, + BACT_TARGET, + BACT_KUBI, + BACT_KANKIN, + BACT_HEIKOUKA, + BACT_TELE_TOWN, + BACT_POKER, + BACT_IDENT_ONE, + BACT_RECHARGE_ALL, + BACT_EVAL_AC, + + MAX_BACT +}; /* * Quest status */ -#define QUEST_STATUS_UNTAKEN 0 -#define QUEST_STATUS_TAKEN 1 -#define QUEST_STATUS_COMPLETED 2 -#define QUEST_STATUS_REWARDED 3 -#define QUEST_STATUS_FINISHED 4 -#define QUEST_STATUS_FAILED 5 -#define QUEST_STATUS_FAILED_DONE 6 +enum +{ + QUEST_STATUS_UNTAKEN, + QUEST_STATUS_TAKEN, + QUEST_STATUS_COMPLETED, + QUEST_STATUS_REWARDED, + QUEST_STATUS_FINISHED, + QUEST_STATUS_FAILED, + QUEST_STATUS_FAILED_DONE, +}; /* * Quest type */ -#define QUEST_TYPE_KILL_LEVEL 1 -#define QUEST_TYPE_KILL_ANY_LEVEL 2 -#define QUEST_TYPE_FIND_ARTIFACT 3 -#define QUEST_TYPE_FIND_EXIT 4 -#define QUEST_TYPE_KILL_NUMBER 5 -#define QUEST_TYPE_KILL_ALL 6 -#define QUEST_TYPE_RANDOM 7 +enum +{ + QUEST_TYPE_KILL_LEVEL = 1, + QUEST_TYPE_KILL_ANY_LEVEL, + QUEST_TYPE_FIND_ARTIFACT, + QUEST_TYPE_FIND_EXIT, + QUEST_TYPE_KILL_NUMBER, + QUEST_TYPE_KILL_ALL, + QUEST_TYPE_RANDOM, +}; /* * Initialization flags @@ -5366,14 +5518,14 @@ #define MIMIC_DEMON 1 #define MIMIC_DEMON_LORD 2 #define MIMIC_VAMPIRE 3 +#define MIMIC_WOLF 4 -#define MIMIC_FLAGS choice +#define MIMIC_FLAGS choice[0] #define MIMIC_IS_NONLIVING 0x00000001 #define MIMIC_IS_DEMON 0x00000002 #define MIMIC_IS_UNDEAD 0x00000004 - #define prace_is_(A) (!p_ptr->mimic_form && (p_ptr->prace == A)) /* Sub-alignment flags for neutral monsters */ @@ -5444,16 +5596,18 @@ #define MPE_BREAK_TRAP 0x00000040 #define MPE_DONT_SWAP_MON 0x00000080 +enum +{ + MTIMED_CSLEEP, /* Monster is sleeping */ + MTIMED_FAST, /* Monster is temporarily fast */ + MTIMED_SLOW, /* Monster is temporarily slow */ + MTIMED_STUNNED, /* Monster is stunned */ + MTIMED_CONFUSED, /* Monster is confused */ + MTIMED_MONFEAR, /* Monster is afraid */ + MTIMED_INVULNER, /* Monster is temporarily invulnerable */ -#define MTIMED_CSLEEP 0 /* Monster is sleeping */ -#define MTIMED_FAST 1 /* Monster is temporarily fast */ -#define MTIMED_SLOW 2 /* Monster is temporarily slow */ -#define MTIMED_STUNNED 3 /* Monster is stunned */ -#define MTIMED_CONFUSED 4 /* Monster is confused */ -#define MTIMED_MONFEAR 5 /* Monster is afraid */ -#define MTIMED_INVULNER 6 /* Monster is temporarily invulnerable */ - -#define MAX_MTIMED 7 + MAX_MTIMED +}; #define MON_CSLEEP(M_PTR) ((M_PTR)->mtimed[MTIMED_CSLEEP]) #define MON_FAST(M_PTR) ((M_PTR)->mtimed[MTIMED_FAST]) @@ -5468,3 +5622,17 @@ */ #define SCROBJ_FAKE_OBJECT 0x00000001 #define SCROBJ_FORCE_DETAIL 0x00000002 + +/* + * mode for display_player() + */ +enum +{ + DISPLAY_PLAYER_MODE_SKILLS, + DISPLAY_PLAYER_MODE_HISTORY, + DISPLAY_PLAYER_MODE_THINGS1, + DISPLAY_PLAYER_MODE_THINGS2, +/* DISPLAY_PLAYER_MODE_CLASS,*/ + DISPLAY_PLAYER_MODE_MUTATION, + DISPLAY_PLAYER_MODE_NUM +}; diff -ur Hengband/src/dungeon.c Hengband_warwolf/src/dungeon.c --- Hengband/src/dungeon.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/dungeon.c Mon Apr 9 12:45:58 2007 @@ -1631,15 +1631,15 @@ { #ifdef JP msg_print("熱で火傷した!"); - take_hit(DAMAGE_NOESCAPE, damage, format("%sの上に浮遊したダメージ", f_name + f_info[get_feat_mimic(&cave[py][px])].name), -1); + take_hit(DAMAGE_NOESCAPE, damage, format("%sの上に浮遊したダメージ", feanam_idx(get_feat_mimic(&cave[py][px]))), -1); #else msg_print("The heat burns you!"); - take_hit(DAMAGE_NOESCAPE, damage, format("flying over %s", f_name + f_info[get_feat_mimic(&cave[py][px])].name), -1); + take_hit(DAMAGE_NOESCAPE, damage, format("flying over %s", feanam_idx(get_feat_mimic(&cave[py][px]))), -1); #endif } else { - cptr name = f_name + f_info[get_feat_mimic(&cave[py][px])].name; + cptr name = feanam_idx(get_feat_mimic(&cave[py][px])); #ifdef JP msg_format("%sで火傷した!", name); #else @@ -1878,7 +1878,11 @@ /*** Timeout Various Things ***/ /* Mimic */ - if (p_ptr->tim_mimic) + if (p_ptr->tim_mimic +#ifdef ADD_WEREWOLF + && (p_ptr->mimic_form != MIMIC_WOLF) +#endif + ) { (void)set_mimic(p_ptr->tim_mimic - 1, p_ptr->mimic_form, TRUE); } @@ -3243,6 +3247,28 @@ } +#ifdef ADD_WEREWOLF +/* + * Recharging werewolf mutation time every 10 game turns + */ +static void process_world_aux_werewolf(void) +{ + if ((p_ptr->prace != RACE_WEREWOLF) || (p_ptr->lev > 39)) return; + + if (is_daytime()) + { + if (p_ptr->mimic_form == MIMIC_WOLF) + (void)set_mimic(0, 0, TRUE); + } + else + { + if (!p_ptr->mimic_form) + (void)set_mimic(1, MIMIC_WOLF, TRUE); + } +} +#endif /* ADD_WEREWOLF */ + + /* * Handle involuntary movement once every 10 game turns */ @@ -3974,9 +4000,9 @@ { /* Message */ #ifdef JP - if (cheat_xtra) msg_format("%sの店主をシャッフルします。", f_name + f_ptr->name); + if (cheat_xtra) msg_format("%sの店主をシャッフルします。", feanam(f_ptr)); #else - if (cheat_xtra) msg_format("Shuffle a Shopkeeper of %s.", f_name + f_ptr->name); + if (cheat_xtra) msg_format("Shuffle a Shopkeeper of %s.", feanam(f_ptr)); #endif /* Shuffle it */ @@ -4166,7 +4192,10 @@ } } - +#ifdef ADD_WEREWOLF + /* Process mutation of Werewolf */ + process_world_aux_werewolf(); +#endif /* Process timed damage and regeneration */ process_world_aux_hp_and_sp(); @@ -6177,12 +6206,12 @@ if (r_info[d_info[dungeon_type].final_guardian].max_num) #ifdef JP msg_format("この階には%sの主である%sが棲んでいる。", - d_name+d_info[dungeon_type].name, - r_name+r_info[d_info[dungeon_type].final_guardian].name); + dunnam_idx(dungeon_type), + monnam_idx(d_info[dungeon_type].final_guardian)); #else msg_format("%^s lives in this level as the keeper of %s.", - r_name+r_info[d_info[dungeon_type].final_guardian].name, - d_name+d_info[dungeon_type].name); + monnam_idx(d_info[dungeon_type].final_guardian), + dunnam_idx(dungeon_type)); #endif } diff -ur Hengband/src/effects.c Hengband_warwolf/src/effects.c --- Hengband/src/effects.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/effects.c Mon Apr 9 12:47:22 2007 @@ -188,8 +188,14 @@ p_ptr->kabenuke = 0; p_ptr->tim_res_nether = 0; p_ptr->tim_res_time = 0; - p_ptr->tim_mimic = 0; - p_ptr->mimic_form = 0; +#ifdef ADD_WEREWOLF + if (p_ptr->mimic_form != MIMIC_WOLF) { +#endif + p_ptr->tim_mimic = 0; + p_ptr->mimic_form = 0; +#ifdef ADD_WEREWOLF + } +#endif p_ptr->tim_reflect = 0; p_ptr->multishadow = 0; p_ptr->dustrobe = 0; @@ -272,7 +278,13 @@ (void)set_oppose_cold(0, TRUE); (void)set_oppose_pois(0, TRUE); (void)set_ultimate_res(0, TRUE); - (void)set_mimic(0, 0, TRUE); +#ifdef ADD_WEREWOLF + if (p_ptr->mimic_form != MIMIC_WOLF) { +#endif + (void)set_mimic(0, 0, TRUE); +#ifdef ADD_WEREWOLF + } +#endif (void)set_ele_attack(0, 0); (void)set_ele_immune(0, 0); @@ -358,6 +370,13 @@ msg_print("You are no longer transformed."); #endif if (p_ptr->mimic_form == MIMIC_DEMON) set_oppose_fire(0, TRUE); +#ifdef ADD_WEREWOLF + else if (p_ptr->mimic_form == MIMIC_WOLF) set_shero(0, TRUE); + else if ((p_ptr->lev < 40) && (p_ptr->prace == RACE_WEREWOLF) && !is_daytime()) + { + return (set_mimic(1, MIMIC_WOLF, FALSE)); + } +#endif p_ptr->mimic_form=0; notice = TRUE; p = 0; @@ -1442,6 +1461,9 @@ if (p_ptr->is_dead) return FALSE; if (p_ptr->pclass == CLASS_BERSERKER) v = 1; +#ifdef ADD_WEREWOLF + if (p_ptr->mimic_form == MIMIC_WOLF) v = 1; +#endif /* Open */ if (v) { @@ -5216,7 +5238,7 @@ if (p_ptr->inside_arena) { - cptr m_name = r_name+r_info[arena_info[p_ptr->arena_number].r_idx].name; + cptr m_name = monnam_idx(arena_info[p_ptr->arena_number].r_idx); #ifdef JP msg_format("あなたは%sの前に敗れ去った。", m_name); #else diff -ur Hengband/src/externs.h Hengband_warwolf/src/externs.h --- Hengband/src/externs.h Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/externs.h Mon Apr 9 12:47:47 2007 @@ -117,6 +117,10 @@ extern cptr ident_info[]; extern mbe_info_type mbe_info[]; extern byte feature_action_flags[FF_FLAG_MAX]; +#ifdef ADD_WEREWOLF +extern martial_arts ma_blows_wolf[MAX_MA_WOLF]; +extern int werewolf_ave_damage[PY_MAX_LEVEL+1]; +#endif /* variable.c */ extern cptr copyright[5]; @@ -1523,7 +1527,7 @@ extern void show_highclass(void); /* mind.c */ -extern mind_power mind_powers[5]; +extern mind_power mind_powers[MAX_MIND_TYPES]; extern void mindcraft_info(char *p, int use_mind, int power); extern void do_cmd_mind(void); extern void do_cmd_mind_browse(void); diff -ur Hengband/src/files.c Hengband_warwolf/src/files.c --- Hengband/src/files.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/files.c Mon Apr 9 12:48:13 2007 @@ -2145,6 +2145,18 @@ else basedam = monk_ave_damage[level][0]; } +#ifdef ADD_WEREWOLF + else if ((p_ptr->mimic_form == MIMIC_WOLF) && (empty_hands(TRUE) & EMPTY_HAND_RARM)) + { + int level = p_ptr->lev; + if (i) + { + damage[i] = 0; + break; + } + basedam = werewolf_ave_damage[level]; + } +#endif else { o_ptr = &inventory[INVEN_RARM + i]; @@ -2361,6 +2373,13 @@ add_flag(flgs, TR_SEE_INVIS); add_flag(flgs, TR_SPEED); break; +#ifdef ADD_WEREWOLF + case MIMIC_WOLF: + add_flag(flgs, TR_RES_FEAR); + add_flag(flgs, TR_FREE_ACT); + add_flag(flgs, TR_REGEN); + break; +#endif } } else @@ -3709,11 +3728,11 @@ * * The top one and bottom two lines are left blank. * - * Mode 0 = standard display with skills - * Mode 1 = standard display with history - * Mode 2 = summary of various things - * Mode 3 = summary of various things (part 2) - * Mode 4 = mutations + * DISPLAY_PLAYER_MODE_SKILLS = standard display with skills + * DISPLAY_PLAYER_MODE_HISTORY = standard display with history + * DISPLAY_PLAYER_MODE_THINGS1 = summary of various things + * DISPLAY_PLAYER_MODE_THINGS2 = summary of various things (part 2) + * DISPLAY_PLAYER_MODE_CLASS = class specific */ void display_player(int mode) { @@ -3723,17 +3742,12 @@ char tmp[64]; - /* XXX XXX XXX */ - if ((p_ptr->muta1 || p_ptr->muta2 || p_ptr->muta3) && display_mutations) - mode = (mode % 5); - else - mode = (mode % 4); - /* Erase screen */ clear_from(0); /* Standard */ - if ((mode == 0) || (mode == 1)) + if ((mode == DISPLAY_PLAYER_MODE_SKILLS) || + (mode == DISPLAY_PLAYER_MODE_HISTORY)) { /* Name, Sex, Race, Class */ #ifdef JP @@ -3829,7 +3843,7 @@ } /* Display "history" info */ - if (mode == 1) + if (mode == DISPLAY_PLAYER_MODE_HISTORY) { char statmsg[1000]; @@ -3956,7 +3970,7 @@ } /* Special */ - else if (mode == 2) + else if (mode == DISPLAY_PLAYER_MODE_THINGS1) { /* See "http://www.cs.berkeley.edu/~davidb/angband.html" */ @@ -3967,12 +3981,12 @@ } /* Special */ - else if (mode == 3) + else if (mode == DISPLAY_PLAYER_MODE_THINGS2) { display_player_other_flag_info(); } - else if (mode == 4) + else if (mode == DISPLAY_PLAYER_MODE_MUTATION) { do_cmd_knowledge_mutations(); } @@ -4438,9 +4452,9 @@ else if (max_dlv[y] == d_info[y].maxdepth) seiha = TRUE; #ifdef JP - fprintf(fff, " %c%-12s: %3d 階\n", seiha ? '!' : ' ', d_name+d_info[y].name, max_dlv[y]); + fprintf(fff, " %c%-12s: %3d 階\n", seiha ? '!' : ' ', dunnam_idx(y), max_dlv[y]); #else - fprintf(fff, " %c%-16s: level %3d\n", seiha ? '!' : ' ', d_name+d_info[y].name, max_dlv[y]); + fprintf(fff, " %c%-16s: level %3d\n", seiha ? '!' : ' ', dunnam_idx(y), max_dlv[y]); #endif } } @@ -4605,10 +4619,10 @@ { #ifdef JP fprintf(fff, "\n 闘技場: %d回戦で%sの前に敗北\n", -p_ptr->arena_number, - r_name + r_info[arena_info[-1 - p_ptr->arena_number].r_idx].name); + monnam_idx(arena_info[-1 - p_ptr->arena_number].r_idx)); #else fprintf(fff, "\n Arena: Defeated by %s in the %d%s fight\n", - r_name + r_info[arena_info[-1 - p_ptr->arena_number].r_idx].name, + monnam_idx(arena_info[-1 - p_ptr->arena_number].r_idx]), -p_ptr->arena_number, get_ordinal_number_suffix(-p_ptr->arena_number)); #endif } @@ -4747,9 +4761,9 @@ monster_race *r_ptr = &r_info[who[k]]; #ifdef JP - fprintf(fff, " %-40s (レベル%3d)\n", (r_name + r_ptr->name), r_ptr->level); + fprintf(fff, " %-40s (レベル%3d)\n", monnam(r_ptr), r_ptr->level); #else - fprintf(fff, " %-40s (level %3d)\n", (r_name + r_ptr->name), r_ptr->level); + fprintf(fff, " %-40s (level %3d)\n", monnam(r_ptr), r_ptr->level); #endif } diff -ur Hengband/src/flavor.c Hengband_warwolf/src/flavor.c --- Hengband/src/flavor.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/flavor.c Sun Apr 8 07:00:00 2007 @@ -1193,7 +1193,7 @@ void object_desc(char *buf, object_type *o_ptr, u32b mode) { /* Extract object kind name */ - cptr kindname = k_name + k_info[o_ptr->k_idx].name; + cptr kindname = kindnam_idx(o_ptr->k_idx); /* Extract default "base" string */ cptr basenm = kindname; @@ -1294,10 +1294,10 @@ else { #ifdef JP - sprintf(tmp_val2, " (%s)",r_name + r_ptr->name); + sprintf(tmp_val2, " (%s)",monnam(r_ptr)); modstr = tmp_val2; #else - cptr t = r_name + r_ptr->name; + cptr t = monnam(r_ptr); if (!(r_ptr->flags1 & RF1_UNIQUE)) { @@ -1324,9 +1324,9 @@ monster_race *r_ptr = &r_info[o_ptr->pval]; #ifdef JP - modstr = r_name + r_ptr->name; + modstr = monnam(r_ptr); #else - cptr t = r_name + r_ptr->name; + cptr t = monnam(r_ptr); if (!(r_ptr->flags1 & RF1_UNIQUE)) { @@ -1349,7 +1349,7 @@ { monster_race *r_ptr = &r_info[o_ptr->pval]; - modstr = r_name + r_ptr->name; + modstr = monnam(r_ptr); #ifdef JP basenm = "#%"; @@ -1409,7 +1409,7 @@ } /* Color the object */ - modstr = k_name + flavor_k_ptr->flavor_name; + modstr = kindfnam(flavor_k_ptr); #ifdef JP if (!flavor) basenm = "%のアミュレット"; @@ -1435,7 +1435,7 @@ } /* Color the object */ - modstr = k_name + flavor_k_ptr->flavor_name; + modstr = kindfnam(flavor_k_ptr); #ifdef JP if (!flavor) basenm = "%の指輪"; @@ -1460,7 +1460,7 @@ case TV_STAFF: { /* Color the object */ - modstr = k_name + flavor_k_ptr->flavor_name; + modstr = kindfnam(flavor_k_ptr); #ifdef JP if (!flavor) basenm = "%の杖"; @@ -1478,7 +1478,7 @@ case TV_WAND: { /* Color the object */ - modstr = k_name + flavor_k_ptr->flavor_name; + modstr = kindfnam(flavor_k_ptr); #ifdef JP if (!flavor) basenm = "%の魔法棒"; @@ -1496,7 +1496,7 @@ case TV_ROD: { /* Color the object */ - modstr = k_name + flavor_k_ptr->flavor_name; + modstr = kindfnam(flavor_k_ptr); #ifdef JP if (!flavor) basenm = "%のロッド"; @@ -1514,7 +1514,7 @@ case TV_SCROLL: { /* Color the object */ - modstr = k_name + flavor_k_ptr->flavor_name; + modstr = kindfnam(flavor_k_ptr); #ifdef JP if (!flavor) basenm = "%の巻物"; @@ -1532,7 +1532,7 @@ case TV_POTION: { /* Color the object */ - modstr = k_name + flavor_k_ptr->flavor_name; + modstr = kindfnam(flavor_k_ptr); #ifdef JP if (!flavor) basenm = "%の薬"; @@ -1553,7 +1553,7 @@ if (!k_ptr->flavor_name) break; /* Color the object */ - modstr = k_name + flavor_k_ptr->flavor_name; + modstr = kindfnam(flavor_k_ptr); #ifdef JP if (!flavor) basenm = "%のキノコ"; @@ -1764,7 +1764,7 @@ /* Use full name from k_info or a_info */ if (aware && have_flag(flgs, TR_FULL_NAME)) { - if (known && o_ptr->name1) basenm = a_name + a_info[o_ptr->name1].name; + if (known && o_ptr->name1) basenm = artnam_obj(o_ptr); else basenm = kindname; } @@ -1928,18 +1928,16 @@ /* 伝説のアイテム */ else if (o_ptr->name1 && !have_flag(flgs, TR_FULL_NAME)) { - artifact_type *a_ptr = &a_info[o_ptr->name1]; /* '『' から始まらない伝説のアイテムの名前は最初に付加する */ - if (strncmp(a_name + a_ptr->name, "『", 2) != 0) + if (strncmp(artnam_obj(o_ptr), "『", 2) != 0) { - t = object_desc_str(t, a_name + a_ptr->name); + t = object_desc_str(t, artnam_obj(o_ptr)); } } /* 名のあるアイテム */ else if (object_is_ego(o_ptr)) { - ego_item_type *e_ptr = &e_info[o_ptr->name2]; - t = object_desc_str(t, e_name + e_ptr->name); + t = object_desc_str(t, egonam_obj(o_ptr)); } } #endif @@ -2033,10 +2031,9 @@ } else if (object_is_fixed_artifact(o_ptr)) { - artifact_type *a_ptr = &a_info[o_ptr->name1]; - if (strncmp(a_name + a_ptr->name, "『", 2) == 0) + if (strncmp(artnam_obj(o_ptr), "『", 2) == 0) { - t = object_desc_str(t, a_name + a_ptr->name); + t = object_desc_str(t, artnam_obj(o_ptr)); } } else if (o_ptr->inscription) @@ -2084,10 +2081,8 @@ /* Grab any artifact name */ else if (object_is_fixed_artifact(o_ptr)) { - artifact_type *a_ptr = &a_info[o_ptr->name1]; - t = object_desc_chr(t, ' '); - t = object_desc_str(t, a_name + a_ptr->name); + t = object_desc_str(t, artnam_obj(o_ptr)); } /* Grab any ego-item name */ @@ -2095,10 +2090,8 @@ { if (object_is_ego(o_ptr)) { - ego_item_type *e_ptr = &e_info[o_ptr->name2]; - t = object_desc_chr(t, ' '); - t = object_desc_str(t, e_name + e_ptr->name); + t = object_desc_str(t, egonam_obj(o_ptr)); } if (o_ptr->inscription && my_strchr(quark_str(o_ptr->inscription), '#')) diff -ur Hengband/src/init1.c Hengband_warwolf/src/init1.c --- Hengband/src/init1.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/init1.c Sun Apr 8 18:56:50 2007 @@ -1081,6 +1081,71 @@ return (0); } +typedef int (*func_get_index)(char *); + +/* + * get class index from name + */ +static int get_class_index(char *s) +{ + int i; + char *title; + + for (i = 0; i < MAX_CLASS; i++) + { +#ifdef JP + title = (char*)class_info[i].E_title; +#else + title = (char*)class_info[i].title; +#endif + if (!strcmp(s, title)) return i; + } + + return -1; +} + +/* + * get race index from name + */ +static int get_race_index(char *s) +{ + int i; + char *title; + + for (i = 0; i < MAX_RACES; i++) + { +#ifdef JP + title = (char*)race_info[i].E_title; +#else + title = (char*)race_info[i].title; +#endif + if (!strcmp(s, title)) return i; + } + + return -1; +} + +/* + * get magic index from name + */ +static int get_magic_index(char *s) +{ + int i; + char *title; + + for (i = 0; i < MAX_MAGIC; i++) + { +#ifdef JP + title = (char*)E_realm_names[i+1]; +#else + title = (char*)realm_names[i+1]; +#endif + if (!strcmp(s, title)) return i; + } + + return -1; +} + /* * Initialize the "v_info" array, by parsing an ascii "template" file @@ -1179,8 +1244,20 @@ /* Process 'N' for "New/Number/Name" */ if (buf[0] == 'N') { - /* Get the index */ - i = atoi(buf+2); + if (isdigit(*(buf+2))) + { + /* Get the index */ + i = atoi(buf+2); + } + else + { + i = get_class_index(buf + 2); + if (i < 0) + { + s_ptr = NULL; + return (0); + } + } /* Verify information */ if (i <= error_idx) return (4); @@ -1196,7 +1273,7 @@ } /* There better be a current s_ptr */ - else if (!s_ptr) return (3); + else if (!s_ptr) return (0); /* Process 'W' for "Weapon exp" */ else if (buf[0] == 'W') @@ -1265,8 +1342,20 @@ /* Process 'N' for "New/Number/Name" */ if (buf[0] == 'N') { - /* Get the index */ - i = atoi(buf+2); + if (isdigit(*(buf+2))) + { + /* Get the index */ + i = atoi(buf+2); + } + else + { + i = get_class_index(buf + 2); + if (i < 0) + { + m_ptr = NULL; + return (0); + } + } /* Verify information */ if (i <= error_idx) return (4); @@ -1282,7 +1371,7 @@ } /* There better be a current m_ptr */ - else if (!m_ptr) return (3); + else if (!m_ptr) return (0); /* Process 'I' for "Info" (one line only) */ else if (buf[0] == 'I') @@ -1342,9 +1431,35 @@ /* Process 'R' for "Realm" (one line only) */ else if (buf[0] == 'R') { - /* Scan for the values */ - if (2 != sscanf(buf+2, "%d:%d", - &realm, &readable)) return (1); + if (isdigit(*(buf+2))) + { + /* Scan for the values */ + if (2 != sscanf(buf+2, "%d:%d", + &realm, &readable)) return (1); + } + else + { + /* Find the colon before the name */ + s = my_strchr(buf+2, ':'); + + /* Verify that colon */ + if (!s || !*(s+1)) return (1); + + /* Nuke the colon, advance to the name */ + *s++ = '\0'; + + i = get_magic_index(buf+2); + if (i < 0) + { + realm = -1; + readable = 0; + } + else + { + realm = i; + readable = atoi(s); + } + } magic_idx = 0; } @@ -1353,7 +1468,7 @@ { int level, mana, fail, exp; - if (!readable) return (1); + if (realm < 0 || !readable) return (0); /* Scan for the values */ if (4 != sscanf(buf+2, "%d:%d:%d:%d", &level, &mana, &fail, &exp)) return (1); @@ -3446,12 +3561,72 @@ /* + * Process "B::C:..." -- Building class member definition + * Process "B::R:..." -- Building race member definition + * Process "B::M:..." -- Building magic member definition + */ +static errr parse_line_building_member(char *buf, func_get_index get_index, s16b num, s16b *member, int def) +{ + char *zz[MAX(MAX(MAX_CLASS, MAX_RACES), MAX_MAGIC)]; + int size = tokenize(buf, num, zz, 0); + int i, n, m; + int non = 0; + char *mptr; + + /* get default value and none setting value */ + for (i = 0; i < size; i++) + { + if (!strncmp(zz[i], "Default#", 8) && isdigit(zz[i][8])) + { + def = atoi(zz[i] + 8); + } + if (!strncmp(zz[i], "None#", 5) && isdigit(zz[i][5])) + { + non = atoi(zz[i] + 5); + } + } + + /* set none setting value */ + for (n = 0; n < num; n++) member[n] = non; + + /* analyse */ + for (i = 0; i < size; i++) + { + m = def; + + if (!strncmp(zz[i], "Default#", 8)) continue; + if (!strncmp(zz[i], "None#", 5)) continue; + + mptr = my_strchr(zz[i], '#'); + if (mptr) + { + *mptr++ = '\0'; + if (*mptr) m = atoi(mptr); + } + + n = (*get_index)(zz[i]); + if (n >= 0 && n < num) + { + member[n] = m; + } + else + { +#if 0 /* through */ + return (PARSE_ERROR_INVALID_FLAG); +#endif + } + } + + return (0); +} + +/* * Process "B:::..." -- Building definition */ static errr parse_line_building(char *buf) { int i; - char *zz[37]; + char *zz[MAX(MAX(MAX(MAX_CLASS, MAX_RACES), MAX_MAGIC), 8)]; int index; char *s; @@ -3537,6 +3712,12 @@ /* Building Classes */ case 'C': { + if (*(s+2) == '\0' || !isdigit(*(s+2))) + { + return parse_line_building_member( + s + 2, get_class_index, MAX_CLASS, building[index].member_class, 2); + } + else if (tokenize(s + 2, MAX_CLASS, zz, 0) == MAX_CLASS) { for (i = 0; i < MAX_CLASS; i++) @@ -3553,6 +3734,12 @@ /* Building Races */ case 'R': { + if (*(s+2) == '\0' || !isdigit(*(s+2))) + { + return parse_line_building_member( + s + 2, get_race_index, MAX_RACES, building[index].member_race, 1); + } + else if (tokenize(s+2, MAX_RACES, zz, 0) == MAX_RACES) { for (i = 0; i < MAX_RACES; i++) @@ -3569,6 +3756,12 @@ /* Building Realms */ case 'M': { + if (*(s+2) == '\0' || !isdigit(*(s+2))) + { + return parse_line_building_member( + s + 2, get_magic_index, MAX_MAGIC, building[index].member_realm, 1); + } + else if (tokenize(s+2, MAX_MAGIC, zz, 0) == MAX_MAGIC) { for (i = 0; i < MAX_MAGIC; i++) @@ -4551,7 +4744,7 @@ r_ptr = &r_info[i]; /* Ignore empty monsters */ - if (!strlen(r_name + r_ptr->name)) continue; + if (!strlen(monnam(r_ptr))) continue; /* Ignore useless monsters */ if (i && !r_ptr->speed) continue; @@ -4587,7 +4780,7 @@ f_ptr[9] = r_ptr->flagsr; n_ptr[9] = r_info_flagsr; /* Write New/Number/Name */ - fprintf(fff, "N:%d:%s\n", z + 1, r_name + r_ptr->name); + fprintf(fff, "N:%d:%s\n", z + 1, monnam(r_ptr)); /* Write Graphic */ fprintf(fff, "G:%c:%c\n", r_ptr->d_char, color_char[r_ptr->d_attr]); @@ -4696,7 +4889,7 @@ } /* Acquire the description */ - desc = r_text + r_ptr->text; + desc = montext(r_ptr); dlen = strlen(desc); /* Write Description */ diff -ur Hengband/src/main-win.c Hengband_warwolf/src/main-win.c --- Hengband/src/main-win.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/main-win.c Sun Apr 8 07:00:00 2007 @@ -4010,7 +4010,34 @@ if (GetSaveFileName(&ofn)) { + bool old_use_graphics = use_graphics; + if (old_use_graphics) + { + /* スクリーンダンプ出力時にタイルモードを一時的に無効にする */ + use_graphics = FALSE; + reset_visuals(); + + /* Redraw everything */ + p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY); + + /* Hack -- update */ + handle_stuff(); + } do_cmd_save_screen_html_aux(buf, 0); + if (old_use_graphics) + { + /* タイルモードを元に戻す */ + use_graphics = TRUE; + reset_visuals(); + // 本当はここでprfを読み直さないといけないんだけど…… + // load_all_pref_files(); + + /* Redraw everything */ + p_ptr->redraw |= (PR_WIPE | PR_BASIC | PR_EXTRA | PR_MAP | PR_EQUIPPY); + + /* Hack -- update */ + handle_stuff(); + } } break; } diff -ur Hengband/src/melee2.c Hengband_warwolf/src/melee2.c --- Hengband/src/melee2.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/melee2.c Sun Apr 8 07:00:00 2007 @@ -4632,17 +4632,17 @@ while (!hallu_race->name || (hallu_race->flags1 & RF1_UNIQUE)); #ifdef JP - msg_format("%sは%sに進化した。", m_name, r_name + hallu_race->name); + msg_format("%sは%sに進化した。", m_name, monnam(hallu_race)); #else - msg_format("%^s evolved into %s.", m_name, r_name + hallu_race->name); + msg_format("%^s evolved into %s.", m_name, monnam(hallu_race)); #endif } else { #ifdef JP - msg_format("%sは%sに進化した。", m_name, r_name + r_ptr->name); + msg_format("%sは%sに進化した。", m_name, monnam(r_ptr)); #else - msg_format("%^s evolved into %s.", m_name, r_name + r_ptr->name); + msg_format("%^s evolved into %s.", m_name, monnam(r_ptr)); #endif } } diff -ur Hengband/src/mind.c Hengband_warwolf/src/mind.c --- Hengband/src/mind.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/mind.c Sun Apr 8 07:00:00 2007 @@ -14,7 +14,7 @@ #include "mindtips.h" -mind_power mind_powers[5] = +mind_power mind_powers[MAX_MIND_TYPES] = { { { @@ -295,131 +295,130 @@ cptr s_dur = "dur "; cptr s_range = "range "; #endif - int plev = p_ptr->lev; + int plev = p_ptr->lev; - strcpy(p, ""); + strcpy(p, ""); - switch (use_mind) - { - case MIND_MINDCRAFTER: - switch (power) + switch (use_mind) { - case 0: break; - case 1: sprintf(p, " %s%dd%d", s_dam, 3 + ((plev - 1) / 4), 3 + plev/15); break; - case 2: sprintf(p, " %s10", s_range); break; - case 3: sprintf(p, " %s%d", s_range, plev * 5); break; - case 4: break; - case 5: sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 4)); break; - case 6: sprintf(p, " %s%d", s_dur, plev); break; - case 7: break; - case 8: sprintf(p, (plev < 25 ? " %s%d" : " %sd%d"), s_dam, (plev < 25 ? plev * 3 / 2 : plev * ((plev - 5) / 10 + 1))); break; - case 9: sprintf(p, " %s10+d%d", s_dur, plev * 3 / 2); break; + case MIND_MINDCRAFTER: + switch (power) + { + case 0: break; + case 1: sprintf(p, " %s%dd%d", s_dam, 3 + ((plev - 1) / 4), 3 + plev/15); break; + case 2: sprintf(p, " %s10", s_range); break; + case 3: sprintf(p, " %s%d", s_range, plev * 5); break; + case 4: break; + case 5: sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 4)); break; + case 6: sprintf(p, " %s%d", s_dur, plev); break; + case 7: break; + case 8: sprintf(p, (plev < 25 ? " %s%d" : " %sd%d"), s_dam, (plev < 25 ? plev * 3 / 2 : plev * ((plev - 5) / 10 + 1))); break; + case 9: sprintf(p, " %s10+d%d", s_dur, plev * 3 / 2); break; #ifdef JP - case 10: sprintf(p, " 最大重量:%d.%dkg", lbtokg1(plev * 15),lbtokg2(plev * 15)); break; + case 10: sprintf(p, " 最大重量:%d.%dkg", lbtokg1(plev * 15),lbtokg2(plev * 15)); break; #else - case 10: sprintf(p, " max wgt %d", plev * 15); break; + case 10: sprintf(p, " max wgt %d", plev * 15); break; #endif - case 11: sprintf(p, " %s%dd6", s_dam, plev / 2); break; - case 12: sprintf(p, " %sd%d+%d", s_dam, plev * 3, plev * 3); break; + case 11: sprintf(p, " %s%dd6", s_dam, plev / 2); break; + case 12: sprintf(p, " %sd%d+%d", s_dam, plev * 3, plev * 3); break; #ifdef JP - case 13: sprintf(p, " 行動:%ld回", (p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break; + case 13: sprintf(p, " 行動:%ld回", (p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break; #else - case 13: sprintf(p, " %ld acts.", (p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break; + case 13: sprintf(p, " %ld acts.", (p_ptr->csp + 100-p_ptr->energy_need - 50)/100); break; #endif - } - break; - case MIND_KI: - { - int boost = p_ptr->magic_num1[0]; + } + break; - if (heavy_armor()) boost /= 2; + case MIND_KI: + { + int boost = p_ptr->magic_num1[0]; + + if (heavy_armor()) boost /= 2; - switch (power) - { - case 0: sprintf(p, " %s%dd4", s_dam, 3 + ((plev - 1) / 5) + boost / 12); break; - case 1: break; - case 2: sprintf(p, " %s%d+d30", s_dur, 30 + boost / 5); break; - case 3: sprintf(p, " %s%dd5", s_dam, 5 + ((plev - 1) / 5) + boost / 10); break; - case 4: sprintf(p, " %s%d+d20", s_dur, 20 + boost / 5); break; - case 5: break; - case 6: sprintf(p, " %s%d+d%d", s_dur, 15 + boost / 7, plev / 2); break; - case 7: sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 5) + boost / 12); break; - case 8: sprintf(p, " %s10d6+%d", s_dam, plev * 3 / 2 + boost * 3 / 5); break; - case 9: break; -#ifdef JP - case 10: sprintf(p, " 最大%d体", 1+boost/100); break; + switch (power) + { + case 0: sprintf(p, " %s%dd4", s_dam, 3 + ((plev - 1) / 5) + boost / 12); break; + case 1: break; + case 2: sprintf(p, " %s%d+d30", s_dur, 30 + boost / 5); break; + case 3: sprintf(p, " %s%dd5", s_dam, 5 + ((plev - 1) / 5) + boost / 10); break; + case 4: sprintf(p, " %s%d+d20", s_dur, 20 + boost / 5); break; + case 5: break; + case 6: sprintf(p, " %s%d+d%d", s_dur, 15 + boost / 7, plev / 2); break; + case 7: sprintf(p, " %s%dd8", s_dam, 8 + ((plev - 5) / 5) + boost / 12); break; + case 8: sprintf(p, " %s10d6+%d", s_dam, plev * 3 / 2 + boost * 3 / 5); break; + case 9: break; +#ifdef JP + case 10: sprintf(p, " 最大%d体", 1+boost/100); break; #else - case 10: sprintf(p, " max %d", 1+boost/100); break; + case 10: sprintf(p, " max %d", 1+boost/100); break; #endif - case 11: sprintf(p, " %s%d", s_dam, 100 + plev + boost); break; - case 12: sprintf(p, " %s%dd15", s_dam, 10 + plev / 2 + boost * 3 / 10); break; + case 11: sprintf(p, " %s%d", s_dam, 100 + plev + boost); break; + case 12: sprintf(p, " %s%dd15", s_dam, 10 + plev / 2 + boost * 3 / 10); break; #ifdef JP - case 13: sprintf(p, " 行動:%d+d16回", 16+boost/20); break; + case 13: sprintf(p, " 行動:%d+d16回", 16+boost/20); break; #else - case 13: sprintf(p, " %d+d16 acts", 16+boost/20); break; + case 13: sprintf(p, " %d+d16 acts", 16+boost/20); break; #endif - } - break; - case MIND_MIRROR_MASTER: - { - switch (power) - { - case 0: break; - case 1: break; - case 2: sprintf(p, " %s%dd4", s_dam, 3 + ((plev - 1) / 5) ); break; - case 3: sprintf(p, " %s10", s_range); break; - case 4: break; - case 5: sprintf(p, " %s%d", s_range, plev *5); break; - case 6: sprintf(p, " %s20+d20", s_dur); break; - case 7: break; - case 8: sprintf(p, " %s%dd8", s_dam, 8+((plev -5)/4) ); break; - case 9: break; - case 10: sprintf(p, " %s%dd8", s_dam, 11+(plev-5)/4 ); break; - case 11: break; - case 12: sprintf(p, " %s20+d20", s_dur); break; - case 13: sprintf(p, " %s150+d%d", s_dam, plev*2 ); break; - case 14: break; - case 15: break; - case 16: sprintf(p, " %s%d", s_range, plev/2 +10); break; - case 17: break; - case 18: sprintf(p, " %s6+d6", s_dur); break; - case 19: sprintf(p, " %s%d", s_dam, plev*11+5 ); break; - case 20: sprintf(p, " %s4+d4", s_dur); break; - } - break; + } + break; } - case MIND_NINJUTSU: - { - switch (power) - { - case 0: break; - case 1: break; - case 2: sprintf(p, " %s10", s_range); break; - case 3: break; - case 4: sprintf(p, " %s%d", s_range , plev *5); break; - case 5: sprintf(p, " %s30", s_range); break; - case 6: break; - case 7: break; - case 8: sprintf(p, " %s20+d20", s_dur); break; - case 9: sprintf(p, " %s%d", s_dam, (50+plev)/2 ); break; - case 10: break; - case 11: break; - case 12: break; - case 13: break; - case 14: break; - case 15: break; - case 16: sprintf(p, " %s%d+d%d", s_dur, plev/2, plev/2); break; - case 17: sprintf(p, " %s%d*3", s_dam, (75+plev*2/3)/2 ); break; - case 18: sprintf(p, " %s%dd10", s_dam, 6+plev/8 ); break; - case 19: sprintf(p, " %s6+d6", s_dur); break; - } - break; + + case MIND_MIRROR_MASTER: + switch (power) + { + case 0: break; + case 1: break; + case 2: sprintf(p, " %s%dd4", s_dam, 3 + ((plev - 1) / 5) ); break; + case 3: sprintf(p, " %s10", s_range); break; + case 4: break; + case 5: sprintf(p, " %s%d", s_range, plev *5); break; + case 6: sprintf(p, " %s20+d20", s_dur); break; + case 7: break; + case 8: sprintf(p, " %s%dd8", s_dam, 8+((plev -5)/4) ); break; + case 9: break; + case 10: sprintf(p, " %s%dd8", s_dam, 11+(plev-5)/4 ); break; + case 11: break; + case 12: sprintf(p, " %s20+d20", s_dur); break; + case 13: sprintf(p, " %s150+d%d", s_dam, plev*2 ); break; + case 14: break; + case 15: break; + case 16: sprintf(p, " %s%d", s_range, plev/2 +10); break; + case 17: break; + case 18: sprintf(p, " %s6+d6", s_dur); break; + case 19: sprintf(p, " %s%d", s_dam, plev*11+5 ); break; + case 20: sprintf(p, " %s4+d4", s_dur); break; + } + break; + + case MIND_NINJUTSU: + switch (power) + { + case 0: break; + case 1: break; + case 2: sprintf(p, " %s10", s_range); break; + case 3: break; + case 4: sprintf(p, " %s%d", s_range , plev *5); break; + case 5: sprintf(p, " %s30", s_range); break; + case 6: break; + case 7: break; + case 8: sprintf(p, " %s20+d20", s_dur); break; + case 9: sprintf(p, " %s%d", s_dam, (50+plev)/2 ); break; + case 10: break; + case 11: break; + case 12: break; + case 13: break; + case 14: break; + case 15: break; + case 16: sprintf(p, " %s%d+d%d", s_dur, plev/2, plev/2); break; + case 17: sprintf(p, " %s%d*3", s_dam, (75+plev*2/3)/2 ); break; + case 18: sprintf(p, " %s%dd10", s_dam, 6+plev/8 ); break; + case 19: sprintf(p, " %s6+d6", s_dur); break; + } + break; } - } - } } - /* +/* * Allow user to choose a mindcrafter power. * * If a valid spell is chosen, saves it in '*sn' and returns TRUE @@ -433,94 +432,88 @@ * when you run it. It's probably easy to fix but I haven't tried, * sorry. */ - static int get_mind_power(int *sn, bool only_browse) - { - int i; - int num = 0; - int y = 1; - int x = 10; - int minfail = 0; - int plev = p_ptr->lev; - int chance = 0; - int ask = TRUE; - char choice; - char out_val[160]; - char comment[80]; - cptr p; - - mind_type spell; - mind_power *mind_ptr; - bool flag, redraw; - int use_mind; - int menu_line = (use_menu ? 1 : 0); +static int get_mind_power(int *sn, bool only_browse) +{ + int i; + int num = 0; + int y = 1; + int x = 10; + int minfail = 0; + int plev = p_ptr->lev; + int chance = 0; + int ask = TRUE; + char choice; + char out_val[160]; + char comment[80]; + cptr p; - switch(p_ptr->pclass) + mind_type spell; + mind_power *mind_ptr; + bool flag, redraw; + int use_mind; + int menu_line = (use_menu ? 1 : 0); + + switch(p_ptr->pclass) { case CLASS_MINDCRAFTER: - { - use_mind = MIND_MINDCRAFTER; + use_mind = MIND_MINDCRAFTER; #ifdef JP - p = "超能力"; + p = "超能力"; #else - p = "mindcraft"; + p = "mindcraft"; #endif - break; - } + break; + case CLASS_FORCETRAINER: - { - use_mind = MIND_KI; + use_mind = MIND_KI; #ifdef JP - p = "練気術"; + p = "練気術"; #else - p = "Force"; + p = "Force"; #endif - break; - } + break; + case CLASS_BERSERKER: - { - use_mind = MIND_BERSERKER; + use_mind = MIND_BERSERKER; #ifdef JP - p = "技"; + p = "技"; #else - p = "brutal power"; + p = "brutal power"; #endif - break; - } + break; + case CLASS_MIRROR_MASTER: - { - use_mind = MIND_MIRROR_MASTER; + use_mind = MIND_MIRROR_MASTER; #ifdef JP - p = "鏡魔法"; + p = "鏡魔法"; #else - p = "magic"; + p = "magic"; #endif break; - } + case CLASS_NINJA: - { - use_mind = MIND_NINJUTSU; + use_mind = MIND_NINJUTSU; #ifdef JP - p = "忍術"; + p = "忍術"; #else - p = "ninjutsu"; + p = "ninjutsu"; #endif - break; - } + break; + default: - { - use_mind = 0; + use_mind = 0; #ifdef JP - p = "超能力"; + p = "超能力"; #else - p = "mindcraft"; + p = "mindcraft"; #endif - break; - } + break; } - mind_ptr = &mind_powers[use_mind]; + + mind_ptr = &mind_powers[use_mind]; /* Assume cancelled */ - *sn = (-1); + *sn = (-1); #ifdef ALLOW_REPEAT /* TNB */ @@ -540,34 +533,34 @@ #endif /* ALLOW_REPEAT -- TNB */ - /* Nothing chosen yet */ - flag = FALSE; + /* Nothing chosen yet */ + flag = FALSE; - /* No redraw yet */ - redraw = FALSE; + /* No redraw yet */ + redraw = FALSE; - for (i = 0; i < MAX_MIND_POWERS; i++) + for (i = 0; i < MAX_MIND_POWERS; i++) { - if (mind_ptr->info[i].min_lev <= plev) - { - num++; - } + if (mind_ptr->info[i].min_lev <= plev) + { + num++; + } } - /* Build a prompt (accept all spells) */ - if (only_browse) + /* Build a prompt (accept all spells) */ + if (only_browse) { #ifdef JP - (void) strnfmt(out_val, 78, "(%^s %c-%c, '*'で一覧, ESC) どの%sについて知りますか?", + (void) strnfmt(out_val, 78, "(%^s %c-%c, '*'で一覧, ESC) どの%sについて知りますか?", #else - (void) strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) Use which %s? ", + (void) strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) Use which %s? ", #endif p, I2A(0), I2A(num - 1), p); - } + } else - { + { #ifdef JP -(void) strnfmt(out_val, 78, "(%^s %c-%c, '*'で一覧, ESC) どの%sを使いますか?", + (void) strnfmt(out_val, 78, "(%^s %c-%c, '*'で一覧, ESC) どの%sを使いますか?", #else (void)strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) Use which %s? ", #endif @@ -639,15 +632,15 @@ /* Display a list of spells */ prt("", y, x); #ifdef JP -put_str("名前", y, x + 5); + put_str("名前", y, x + 5); #else put_str("Name", y, x + 5); #endif #ifdef JP -put_str(format("Lv %s 失率 効果", ((use_mind == MIND_BERSERKER) || (use_mind == MIND_NINJUTSU)) ? "HP" : "MP"), y, x + 35); +put_str(format("Lv %s 失率 効果", (mind_is_from_hitpoints(use_mind)) ? "HP" : "MP"), y, x + 35); #else -put_str(format("Lv %s Fail Info", ((use_mind == MIND_BERSERKER) || (use_mind == MIND_NINJUTSU)) ? "HP" : "MP"), y, x + 35); +put_str(format("Lv %s Fail Info", (mind_is_from_hitpoints(use_mind])) ? "HP" : "MP"), y, x + 35); #endif has_weapon[0] = buki_motteruka(INVEN_RARM); has_weapon[1] = buki_motteruka(INVEN_LARM); @@ -690,7 +683,7 @@ } /* Not enough mana to cast */ - if ((use_mind != MIND_BERSERKER) && (use_mind != MIND_NINJUTSU) && (mana_cost > p_ptr->csp)) + if (!mind_is_from_hitpoints(use_mind) && (mana_cost > p_ptr->csp)) { chance += 5 * (mana_cost - p_ptr->csp); } @@ -1869,7 +1862,7 @@ } /* Verify "dangerous" spells */ - if ((use_mind == MIND_BERSERKER) || (use_mind == MIND_NINJUTSU)) + if (mind_is_from_hitpoints(use_mind)) { if (mana_cost > p_ptr->chp) { @@ -1913,7 +1906,7 @@ chance -= 3 * (adj_mag_stat[p_ptr->stat_ind[mp_ptr->spell_stat]] - 1); /* Not enough mana to cast */ - if ((mana_cost > p_ptr->csp) && (use_mind != MIND_BERSERKER) && (use_mind != MIND_NINJUTSU)) + if ((mana_cost > p_ptr->csp) && !mind_is_from_hitpoints(use_mind)) { chance += 5 * (mana_cost - p_ptr->csp); } @@ -1951,7 +1944,7 @@ sound(SOUND_FAIL); - if ((use_mind != MIND_BERSERKER) && (use_mind != MIND_NINJUTSU)) + if (!mind_is_from_hitpoints(use_mind)) { if ((use_mind == MIND_KI) && (n != 5) && p_ptr->magic_num1[0]) { @@ -2106,7 +2099,7 @@ if( n==3 || n==5 || n==7 || n==16 )energy_use = 50; } - if ((use_mind == MIND_BERSERKER) || (use_mind == MIND_NINJUTSU)) + if (mind_is_from_hitpoints(use_mind)) { #ifdef JP take_hit(DAMAGE_USELIFE, mana_cost, "過度の集中", -1); diff -ur Hengband/src/mindtips.h Hengband_warwolf/src/mindtips.h --- Hengband/src/mindtips.h Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/mindtips.h Sun Apr 8 07:00:00 2007 @@ -1,5 +1,5 @@ #ifdef JP -static cptr mind_tips[5][MAX_MIND_POWERS] = +static cptr mind_tips[MAX_MIND_TYPES][MAX_MIND_POWERS] = { { "近くの全ての見えるモンスターを感知する。レベル5で罠/扉、15で透明なモンスター、30で財宝とアイテムを感知できるようになる。レベル20で周辺の地形を感知し、45でその階全体を永久に照らし、ダンジョン内のすべてのアイテムを感知する。レベル25で一定時間テレパシーを得る。", @@ -118,7 +118,7 @@ }, }; #else -static cptr mind_tips[5][MAX_MIND_POWERS] = +static cptr mind_tips[MAX_MIND_TYPES][MAX_MIND_POWERS] = { { "Detects visible monsters in your vicinity and more and more. Detects traps and doors at level 5, invisible monsters at level 15, items at level 30. And magic mapping at level 20. Lights and know the whole level at level 45. Gives telepathy at level 25.", diff -ur Hengband/src/monster1.c Hengband_warwolf/src/monster1.c --- Hengband/src/monster1.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/monster1.c Sun Apr 8 07:00:00 2007 @@ -409,7 +409,7 @@ /* Descriptions */ { - cptr tmp = r_text + r_ptr->text; + cptr tmp = montext(r_ptr); if (tmp[0]) { @@ -2134,7 +2134,7 @@ #else hooked_roff(format("%^s will evolve into ", wd_he[msex])); #endif - hook_c_roff(TERM_YELLOW, format("%s", r_name+r_info[r_ptr->next_r_idx].name)); + hook_c_roff(TERM_YELLOW, format("%s", monnam_idx(r_ptr->next_r_idx))); #ifdef JP hooked_roff(format("に進化する。")); #else @@ -3039,7 +3039,7 @@ #endif /* Dump the name */ - Term_addstr(-1, TERM_WHITE, (r_name + r_ptr->name)); + Term_addstr(-1, TERM_WHITE, monnam(r_ptr)); /* Append the "standard" attr/char info */ Term_addstr(-1, TERM_WHITE, " ('"); diff -ur Hengband/src/monster2.c Hengband_warwolf/src/monster2.c --- Hengband/src/monster2.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/monster2.c Sun Apr 8 07:00:00 2007 @@ -1506,8 +1506,8 @@ r_ptr = &r_info[m_ptr->ap_r_idx]; /* Mode of MD_TRUE_NAME will reveal Chameleon's true name */ - if (mode & MD_TRUE_NAME) name = (r_name + real_r_ptr(m_ptr)->name); - else name = (r_name + r_ptr->name); + if (mode & MD_TRUE_NAME) name = monnam(real_r_ptr(m_ptr)); + else name = monnam(r_ptr); /* Are we hallucinating? (Idea from Nethack...) */ if (p_ptr->image && !(mode & MD_IGNORE_HALLU)) @@ -1533,7 +1533,7 @@ } while (!hallu_race->name || (hallu_race->flags1 & RF1_UNIQUE)); - strcpy(silly_name, (r_name + hallu_race->name)); + strcpy(silly_name, monnam(hallu_race)); } /* Better not strcpy it, or we could corrupt r_info... */ @@ -2984,7 +2984,7 @@ monster_race *r_ptr = &r_info[r_idx]; - cptr name = (r_name + r_ptr->name); + cptr name = monnam(r_ptr); int cmi; diff -ur Hengband/src/mspells1.c Hengband_warwolf/src/mspells1.c --- Hengband/src/mspells1.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/mspells1.c Mon Apr 9 12:48:21 2007 @@ -858,7 +858,11 @@ if (p_ptr->dustrobe) return (TRUE); /* Berserk Strength */ - if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER)) return (TRUE); + if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER) +#ifdef ADD_WEREWOLF + && (p_ptr->mimic_form != MIMIC_WOLF) +#endif + ) return (TRUE); /* Demon Lord */ if (p_ptr->mimic_form == MIMIC_DEMON_LORD) return (TRUE); diff -ur Hengband/src/mutation.c Hengband_warwolf/src/mutation.c --- Hengband/src/mutation.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/mutation.c Sun Apr 8 07:00:00 2007 @@ -3488,9 +3488,9 @@ else if (have_flag(f_ptr->flags, FF_PERMANENT)) { #ifdef JP - msg_format("いてっ!この%sはあなたの歯より硬い!", f_name + mimic_f_ptr->name); + msg_format("いてっ!この%sはあなたの歯より硬い!", feanam(mimic_f_ptr)); #else - msg_format("Ouch! This %s is harder than your teeth!", f_name + mimic_f_ptr->name); + msg_format("Ouch! This %s is harder than your teeth!", feanam(mimic_f_ptr)); #endif break; } @@ -3535,9 +3535,9 @@ else { #ifdef JP - msg_format("この%sはとてもおいしい!", f_name + mimic_f_ptr->name); + msg_format("この%sはとてもおいしい!", feanam(mimic_f_ptr)); #else - msg_format("This %s is very filling!", f_name + mimic_f_ptr->name); + msg_format("This %s is very filling!", feanam(mimic_f_ptr)); #endif (void)set_food(p_ptr->food + 10000); } diff -ur Hengband/src/obj_kind.c Hengband_warwolf/src/obj_kind.c --- Hengband/src/obj_kind.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/obj_kind.c Sun Apr 8 07:00:00 2007 @@ -20,7 +20,7 @@ if (vanilla_town) return FALSE; /* Today's wanted */ - if (p_ptr->today_mon > 0 && (streq(r_name + r_info[o_ptr->pval].name, r_name + r_info[today_mon].name))) return TRUE; + if (p_ptr->today_mon > 0 && (streq(monnam_idx(o_ptr->pval), monnam_idx(today_mon)))) return TRUE; /* Tsuchinoko */ if (o_ptr->pval == MON_TSUCHINOKO) return TRUE; diff -ur Hengband/src/object1.c Hengband_warwolf/src/object1.c --- Hengband/src/object1.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/object1.c Sun Apr 8 07:00:00 2007 @@ -2366,8 +2366,8 @@ { char temp[70 * 20]; - roff_to_buf(o_ptr->name1 ? (a_text + a_info[o_ptr->name1].text) : - (k_text + k_info[o_ptr->k_idx].text), + roff_to_buf(o_ptr->name1 ? arttext_idx(o_ptr->name1) : + kindtext_idx(o_ptr->k_idx), 77 - 15, temp, sizeof(temp)); for (j = 0; temp[j]; j += 1 + strlen(&temp[j])) { info[i] = &temp[j]; i++;} @@ -3888,8 +3888,8 @@ if ((o_ptr->tval == TV_STATUE) && (o_ptr->sval == SV_PHOTO)) { monster_race *r_ptr = &r_info[o_ptr->pval]; - int namelen = strlen(r_name + r_ptr->name); - prt(format("%s: '", r_name + r_ptr->name), 1, 15); + int namelen = strlen(monnam(r_ptr)); + prt(format("%s: '", monnam(r_ptr)), 1, 15); Term_queue_bigchar(18 + namelen, 1, r_ptr->x_attr, r_ptr->x_char, 0, 0); prt("'", 1, (use_bigtile ? 20 : 19) + namelen); } diff -ur Hengband/src/object2.c Hengband_warwolf/src/object2.c --- Hengband/src/object2.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/object2.c Sun Apr 8 07:00:00 2007 @@ -3966,7 +3966,7 @@ msg_format("Figurine of %s, depth +%d%s", #endif - r_name + r_ptr->name, check - 1, + monnam(r_ptr), check - 1, !object_is_cursed(o_ptr) ? "" : " {cursed}"); } @@ -4025,7 +4025,7 @@ msg_format("Corpse of %s, depth +%d", #endif - r_name + r_ptr->name, check - 1); + monnam(r_ptr), check - 1); } object_aware(o_ptr); @@ -4057,9 +4057,9 @@ if (cheat_peek) { #ifdef JP - msg_format("%sの像", r_name + r_ptr->name); + msg_format("%sの像", monnam(r_ptr)); #else - msg_format("Statue of %s", r_name + r_ptr->name); + msg_format("Statue of %s", monnam(r_ptr)); #endif } diff -ur Hengband/src/racial.c Hengband_warwolf/src/racial.c --- Hengband/src/racial.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/racial.c Mon Apr 9 12:48:56 2007 @@ -1487,6 +1487,11 @@ } break; +#ifdef ADD_WEREWOLF + case MIMIC_WOLF: + (void)set_mimic(0, 0, TRUE); + break; +#endif } } @@ -2123,6 +2128,12 @@ } break; +#ifdef ADD_WEREWOLF + case RACE_WEREWOLF: + (void)set_mimic(1, MIMIC_WOLF, TRUE); + break; +#endif + default: #ifdef JP msg_print("この種族は特殊な能力を持っていません。"); @@ -2683,6 +2694,21 @@ power_desc[num].fail = 9; power_desc[num++].number = -1; break; +#ifdef ADD_WEREWOLF + case MIMIC_WOLF: +#ifdef JP +strcpy(power_desc[num].name, "変身(人)"); +#else + strcpy(power_desc[num].name, "Poly to Human"); +#endif + + power_desc[num].level = 40; + power_desc[num].cost = 100; + power_desc[num].stat = A_WIS; + power_desc[num].fail = 12; + power_desc[num++].number = -1; + break; +#endif } } else @@ -3103,6 +3129,21 @@ power_desc[num].stat = A_STR; power_desc[num++].number = -1; break; +#ifdef ADD_WEREWOLF + case RACE_WEREWOLF: +#ifdef JP +strcpy(power_desc[num].name, "変身(狼)"); +#else + strcpy(power_desc[num].name, "Poly to Wolf"); +#endif + + power_desc[num].level = 40; + power_desc[num].cost = 100; + power_desc[num].stat = A_WIS; + power_desc[num].fail = 12; + power_desc[num++].number = -1; + break; +#endif default: { break; diff -ur Hengband/src/rooms.c Hengband_warwolf/src/rooms.c --- Hengband/src/rooms.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/rooms.c Sun Apr 8 07:00:00 2007 @@ -2023,7 +2023,7 @@ switch (type) { case NEST_TYPE_CLONE: - sprintf(inner_buf, "(%s)", r_name + r_info[vault_aux_race].name); + sprintf(inner_buf, "(%s)", monnam_idx(vault_aux_race)); break; case NEST_TYPE_SYMBOL_GOOD: case NEST_TYPE_SYMBOL_EVIL: @@ -2329,7 +2329,7 @@ if (nest_mon_info[i].r_idx != nest_mon_info[i + 1].r_idx) break; if (!nest_mon_info[i + 1].used) break; } - msg_print(r_name + r_info[nest_mon_info[i].r_idx].name); + msg_print(monnam_idx(nest_mon_info[i].r_idx)); } } @@ -2545,7 +2545,7 @@ if (cheat_hear) { /* Message */ - msg_print(r_name + r_info[what[i]].name); + msg_print(monnam_idx(what[i])); } } @@ -5864,7 +5864,7 @@ if (cheat_hear) { /* Message */ - msg_print(r_name + r_info[what[i]].name); + msg_print(monnam_idx(what[i])); } } @@ -5959,9 +5959,9 @@ if (cheat_room) { #ifdef JP - msg_format("%sの部屋", f_name + f_info[trap].name); + msg_format("%sの部屋", feanam_idx(trap)); #else - msg_format("Room of %s", f_name + f_info[trap].name); + msg_format("Room of %s", feanam_idx(trap)); #endif } diff -ur Hengband/src/spells1.c Hengband_warwolf/src/spells1.c --- Hengband/src/spells1.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/spells1.c Sun Apr 8 07:00:00 2007 @@ -845,9 +845,9 @@ { /* Message */ #ifdef JP - msg_format("%sに何かがつっかえて開かなくなった。", f_name + mimic_f_ptr->name); + msg_format("%sに何かがつっかえて開かなくなった。", feanam(mimic_f_ptr)); #else - msg_format("The %s seems stuck.", f_name + mimic_f_ptr->name); + msg_format("The %s seems stuck.", feanam(mimic_f_ptr)); #endif obvious = TRUE; @@ -865,9 +865,9 @@ if (known && (c_ptr->info & (CAVE_MARK))) { #ifdef JP - msg_format("%sが溶けて泥になった!", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("%sが溶けて泥になった!", feanam_idx(get_feat_mimic(c_ptr))); #else - msg_format("The %s turns into mud!", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("The %s turns into mud!", feanam_idx(get_feat_mimic(c_ptr))); #endif obvious = TRUE; @@ -1123,9 +1123,9 @@ if (known && (c_ptr->info & CAVE_MARK)) { #ifdef JP - msg_format("%sが割れた!", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("%sが割れた!", feanam_idx(get_feat_mimic(c_ptr))); #else - msg_format("The %s was crashed!", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("The %s was crashed!", feanam_idx(get_feat_mimic(c_ptr))); #endif sound(SOUND_GLASS); } @@ -1159,9 +1159,9 @@ if (known && (c_ptr->info & CAVE_MARK)) { #ifdef JP - msg_format("%sが割れた!", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("%sが割れた!", feanam_idx(get_feat_mimic(c_ptr))); #else - msg_format("The %s was crashed!", f_name + f_info[get_feat_mimic(c_ptr)].name); + msg_format("The %s was crashed!", feanam_idx(get_feat_mimic(c_ptr))); #endif sound(SOUND_GLASS); } diff -ur Hengband/src/spells2.c Hengband_warwolf/src/spells2.c --- Hengband/src/spells2.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/spells2.c Mon Apr 9 12:49:28 2007 @@ -254,6 +254,18 @@ info[i++] = Dummy; } break; +#ifdef ADD_WEREWOLF + case MIMIC_WOLF: + if (plev > 39) + { +#ifdef JP +info[i++] = "あなたは自力で人間に戻ることができる。(100 MP)"; +#else + info[i++] = "You can transform to human for oneself. (cost 100)."; +#endif + } + break; +#endif } } else @@ -571,6 +583,18 @@ info[i++] = Dummy; break; +#ifdef ADD_WEREWOLF + case RACE_WEREWOLF: + if (plev > 39) + { +#ifdef JP +info[i++] = "あなたは自力で狼に変身することができる。(100 MP)"; +#else + info[i++] = "You can transform to wolf for oneself. (cost 100)."; +#endif + } + break; +#endif default: break; } @@ -5017,7 +5041,7 @@ char buf[80]; /* Get base name of monster */ - strcpy(buf, (r_name + r_ptr->name)); + strcpy(buf, monnam(r_ptr)); #ifdef JP /* Note that we learnt some new flags -Mogami- */ diff -ur Hengband/src/spells3.c Hengband_warwolf/src/spells3.c --- Hengband/src/spells3.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/spells3.c Mon Apr 9 12:49:42 2007 @@ -823,9 +823,9 @@ else { #ifdef JP - msg_format("まだ%sに入ったことはない。", d_name + d_info[DUNGEON_ANGBAND].name); + msg_format("まだ%sに入ったことはない。", dunnam_idx(DUNGEON_ANGBAND)); #else - msg_format("You haven't entered %s yet.", d_name + d_info[DUNGEON_ANGBAND].name); + msg_format("You haven't entered %s yet.", dunnam_idx(DUNGEON_ANGBAND)); #endif msg_print(NULL); return 0; @@ -850,9 +850,9 @@ else if (max_dlv[i] == d_info[i].maxdepth) seiha = TRUE; #ifdef JP - sprintf(buf," %c) %c%-12s : 最大 %d 階", 'a'+num, seiha ? '!' : ' ', d_name + d_info[i].name, max_dlv[i]); + sprintf(buf," %c) %c%-12s : 最大 %d 階", 'a'+num, seiha ? '!' : ' ', dunnam_idx(i), max_dlv[i]); #else - sprintf(buf," %c) %c%-16s : Max level %d", 'a'+num, seiha ? '!' : ' ', d_name + d_info[i].name, max_dlv[i]); + sprintf(buf," %c) %c%-16s : Max level %d", 'a'+num, seiha ? '!' : ' ', dunnam_idx(i), max_dlv[i]); #endif prt(buf, y + num, x); dun[num++] = i; @@ -1041,7 +1041,7 @@ #endif /* Accept request */ #ifdef JP -msg_format("%sの帰還レベルを %d 階にセット。", d_name+d_info[select_dungeon].name, dummy, dummy * 50); +msg_format("%sの帰還レベルを %d 階にセット。", dunnam_idx(select_dungeon), dummy, dummy * 50); #else msg_format("Recall depth set to level %d (%d').", dummy, dummy * 50); #endif @@ -5982,6 +5982,9 @@ case RACE_BARBARIAN: case RACE_BEASTMAN: case RACE_DUNADAN: +#ifdef ADD_WEREWOLF + case RACE_WEREWOLF: +#endif summon_kin_type = 'p'; break; case RACE_HALF_ELF: @@ -6071,6 +6074,11 @@ case MIMIC_VAMPIRE: summon_kin_type = 'V'; break; +#ifdef ADD_WEREWOLF + case MIMIC_WOLF: + summon_kin_type = 'C'; + break; +#endif } return summon_specific((pet ? -1 : 0), y, x, level, SUMMON_KIN, mode); } diff -ur Hengband/src/store.c Hengband_warwolf/src/store.c --- Hengband/src/store.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/store.c Mon Apr 9 12:50:26 2007 @@ -661,229 +661,387 @@ /*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, Kuta*/ + Angel, Demon, Kuta, Werewolf*/ /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 120, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 120, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 120, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 120, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 120, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 120, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 160, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 120, +#endif + }, /* Kuta */ { 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, /* 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, +#ifdef ADD_WEREWOLF + 95, +#endif + }, + +#ifdef ADD_WEREWOLF + /* Werewolf: 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, + 95, + }, +#endif }; @@ -2077,7 +2235,11 @@ else { /* Hack -- Pick an item to sell */ - i = st_ptr->table[randint0(st_ptr->table_num)]; + for(;;) { + i = st_ptr->table[randint0(st_ptr->table_num)]; + /* item to sell without special class item */ + break; + } /* Hack -- fake level for apply_magic() */ level = rand_range(1, STORE_OBJ_LEVEL); @@ -2494,7 +2656,7 @@ /* Normal stores */ else { - cptr store_name = (f_name + f_info[cur_store_feat].name); + cptr store_name = feanam_idx(cur_store_feat); cptr owner_name = (ot_ptr->owner_name); cptr race_name = race_info[ot_ptr->owner_race].title; @@ -3651,7 +3813,7 @@ ot_ptr->owner_name, race_info[ot_ptr->owner_race].title); put_str(buf, 3, 10); sprintf(buf, "%s (%ld)", - (f_name + f_info[cur_store_feat].name), (long)(ot_ptr->max_cost)); + feanam_idx(cur_store_feat), (long)(ot_ptr->max_cost)); prt(buf, 3, 50); } diff -ur Hengband/src/tables.c Hengband_warwolf/src/tables.c --- Hengband/src/tables.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/tables.c Mon Apr 9 12:50:59 2007 @@ -2841,7 +2841,19 @@ 72, 6, 180, 25, 66, 4, 150, 20, 0, - 0x7FFFFFF, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_RANGER | CH0_PALADIN | CH0_WARRIOR_MAGE | + CH0_CHAOS_WARRIOR | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_TOURIST | CH0_IMITATOR | + CH0_BEASTMASTER | CH0_SORCERER | CH0_ARCHER | + CH0_MAGIC_EATER | CH0_BARD | CH0_RED_MAGE | + CH0_SAMURAI | CH0_FORCETRAINER | CH0_BLUE_MAGE | + CH0_CAVALRY | CH0_BERSERKER | CH0_SMITH | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -2856,7 +2868,17 @@ 66, 6, 130, 15, 62, 6, 100, 10, 2, - 0x677E7FF, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_RANGER | CH0_PALADIN | CH0_WARRIOR_MAGE | + CH0_CHAOS_WARRIOR | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_BEASTMASTER | CH0_SORCERER | + CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | CH0_RED_MAGE | + CH0_FORCETRAINER | CH0_BLUE_MAGE | CH0_CAVALRY | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + }, }, { #ifdef JP @@ -2871,8 +2893,16 @@ 60, 4, 100, 6, 54, 4, 80, 6, 3, - 0x677E75B, - + { + CH0_WARRIOR | CH0_MAGE | CH0_ROGUE | CH0_RANGER | + CH0_WARRIOR_MAGE | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_BEASTMASTER | CH0_SORCERER | + CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | CH0_RED_MAGE | + CH0_FORCETRAINER | CH0_BLUE_MAGE | CH0_CAVALRY | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + }, }, { #ifdef JP @@ -2887,7 +2917,15 @@ 36, 3, 60, 3, 33, 3, 50, 3, 4, - 0x76FFC0B, + { + CH0_WARRIOR | CH0_MAGE | CH0_ROGUE | CH0_HIGH_MAGE | + CH0_TOURIST | CH0_IMITATOR | CH0_BEASTMASTER | + CH0_SORCERER | CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | + CH0_RED_MAGE | CH0_SAMURAI | CH0_BLUE_MAGE | + CH0_CAVALRY | CH0_SMITH | CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -2902,7 +2940,15 @@ 42, 3, 90, 6, 39, 3, 75, 3, 4, - 0x767D60F, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_MINDCRAFTER | CH0_HIGH_MAGE | CH0_IMITATOR | + CH0_SORCERER | CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | + CH0_RED_MAGE | CH0_BLUE_MAGE | CH0_CAVALRY | CH0_SMITH | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -2917,7 +2963,12 @@ 48, 3, 150, 10, 46, 3, 120, 10, 5, - 0x1890005, + { + CH0_WARRIOR | CH0_PRIEST | CH0_MAGIC_EATER | + CH0_SAMURAI | CH0_BERSERKER | CH0_SMITH + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -2932,7 +2983,14 @@ 66, 1, 150, 5, 62, 1, 120, 5, 3, - 0x5D8818D, + { + CH0_WARRIOR | CH0_PRIEST | CH0_ROGUE | + CH0_CHAOS_WARRIOR | CH0_MONK | CH0_ARCHER | CH0_SAMURAI | + CH0_FORCETRAINER | CH0_CAVALRY | CH0_BERSERKER | + CH0_SMITH | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -2947,7 +3005,11 @@ 96, 10, 250, 50, 84, 8, 225, 40, 3, - 0x0880005, + { + CH0_WARRIOR | CH0_PRIEST | CH0_SAMURAI | CH0_BERSERKER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -2962,7 +3024,18 @@ 82, 5, 190, 20, 78, 6, 180, 15, 0, - 0x7FFF7FF, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_RANGER | CH0_PALADIN | CH0_WARRIOR_MAGE | + CH0_CHAOS_WARRIOR | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_IMITATOR | CH0_BEASTMASTER | + CH0_SORCERER | CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | + CH0_RED_MAGE | CH0_SAMURAI | CH0_FORCETRAINER | + CH0_BLUE_MAGE | CH0_CAVALRY | CH0_BERSERKER | + CH0_SMITH | CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -2977,7 +3050,16 @@ 90, 10, 190, 20, 82, 10, 180, 15, 4, - 0x777E75B, + { + CH0_WARRIOR | CH0_MAGE | CH0_ROGUE | CH0_RANGER | + CH0_WARRIOR_MAGE | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_BEASTMASTER | CH0_SORCERER | + CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | CH0_RED_MAGE | + CH0_FORCETRAINER | CH0_BLUE_MAGE | CH0_CAVALRY | + CH0_SMITH | CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -2992,7 +3074,13 @@ 82, 5, 200, 20, 78, 6, 190, 15, 0, - 0x5C0A09D, + { + CH0_WARRIOR | CH0_PRIEST | CH0_ROGUE | CH0_RANGER | + CH0_CHAOS_WARRIOR | CH0_BEASTMASTER | CH0_ARCHER | + CH0_CAVALRY | CH0_BERSERKER | CH0_SMITH | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3007,7 +3095,12 @@ 92, 10, 255, 60, 80, 8, 235, 60, 3, - 0x0A80407, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_HIGH_MAGE | + CH0_SAMURAI | CH0_BLUE_MAGE | CH0_BERSERKER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3022,7 +3115,11 @@ 100,10, 255, 65, 80, 10, 240, 64, 3, - 0x0880011, + { + CH0_WARRIOR | CH0_RANGER | CH0_SAMURAI | CH0_BERSERKER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3037,7 +3134,15 @@ 111, 11, 255, 86, 99, 11, 250, 86, 0, - 0x23D4727, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_PALADIN | + CH0_MONK | CH0_MINDCRAFTER | CH0_HIGH_MAGE | + CH0_SORCERER | CH0_MAGIC_EATER | CH0_RED_MAGE | + CH0_SAMURAI | CH0_FORCETRAINER | CH0_BLUE_MAGE | + CH0_MIRROR_MASTER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3052,7 +3157,12 @@ 92, 10, 255, 60, 80, 8, 235, 60, 1, - 0x0888005, + { + CH0_WARRIOR | CH0_PRIEST | CH0_ARCHER | CH0_SAMURAI | + CH0_BERSERKER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3067,7 +3177,15 @@ 50, 3, 90, 6, 50, 3, 75, 3, 2, - 0x667360F, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_MINDCRAFTER | CH0_HIGH_MAGE | CH0_IMITATOR | + CH0_BEASTMASTER | CH0_MAGIC_EATER | CH0_BARD | + CH0_RED_MAGE | CH0_BLUE_MAGE | CH0_CAVALRY | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3082,7 +3200,13 @@ 60, 3, 80, 4, 54, 3, 70, 4, 2, - 0x04D8011, + { + CH0_WARRIOR | CH0_RANGER | CH0_ARCHER | + CH0_MAGIC_EATER | CH0_RED_MAGE | CH0_SAMURAI | + CH0_CAVALRY + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3097,7 +3221,12 @@ 60, 1, 130, 5, 55, 1, 100, 5, 3, - 0x444A009, + { + CH0_WARRIOR | CH0_ROGUE | CH0_BEASTMASTER | + CH0_ARCHER | CH0_RED_MAGE | CH0_CAVALRY | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3112,7 +3241,13 @@ 43, 3, 92, 6, 40, 3, 78, 3, 5, - 0x569040F, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_HIGH_MAGE | CH0_MAGIC_EATER | CH0_SAMURAI | + CH0_BLUE_MAGE | CH0_CAVALRY | CH0_SMITH | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3127,7 +3262,16 @@ 60, 4, 100, 6, 54, 4, 80, 6, 5, - 0x677C7DF, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_RANGER | CH0_WARRIOR_MAGE | CH0_CHAOS_WARRIOR | + CH0_MONK | CH0_MINDCRAFTER | CH0_HIGH_MAGE | + CH0_SORCERER | CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | + CH0_RED_MAGE | CH0_FORCETRAINER | CH0_BLUE_MAGE | + CH0_CAVALRY | CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3142,7 +3286,17 @@ 76, 1, 160, 5, 72, 1, 130, 5, 2, - 0x7FFE757, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_RANGER | + CH0_WARRIOR_MAGE | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_BEASTMASTER | CH0_SORCERER | + CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | CH0_RED_MAGE | + CH0_SAMURAI | CH0_FORCETRAINER | CH0_BLUE_MAGE | + CH0_CAVALRY | CH0_BERSERKER | CH0_SMITH | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3157,7 +3311,14 @@ 68, 6, 142, 15, 63, 6, 112, 10, 4, - 0x2334746, + { + CH0_MAGE | CH0_PRIEST | CH0_WARRIOR_MAGE | CH0_MONK | + CH0_MINDCRAFTER | CH0_HIGH_MAGE | CH0_SORCERER | + CH0_MAGIC_EATER | CH0_BARD | CH0_FORCETRAINER | + CH0_BLUE_MAGE | CH0_MIRROR_MASTER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3172,7 +3333,16 @@ 68, 1, 150, 5, 64, 1, 120, 5, 3, - 0x6B537CB, + { + CH0_WARRIOR | CH0_MAGE | CH0_ROGUE | CH0_WARRIOR_MAGE | + CH0_CHAOS_WARRIOR | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_IMITATOR | CH0_BEASTMASTER | + CH0_MAGIC_EATER | CH0_RED_MAGE | CH0_FORCETRAINER | + CH0_BLUE_MAGE | CH0_BERSERKER | CH0_MIRROR_MASTER | + CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3187,7 +3357,11 @@ 66, 1, 200, 6, 62, 1, 180, 6, 4, - 0x0800001, + { + CH0_WARRIOR | CH0_BERSERKER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3202,7 +3376,14 @@ 72, 6, 50, 5, 66, 4, 50, 5, 2, - 0x234070F, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_MONK | CH0_MINDCRAFTER | CH0_HIGH_MAGE | + CH0_RED_MAGE | CH0_FORCETRAINER | CH0_BLUE_MAGE | + CH0_MIRROR_MASTER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3217,7 +3398,11 @@ 72, 6, 100, 25, 66, 4, 100, 20, 2, - 0x0800001, + { + CH0_WARRIOR | CH0_BERSERKER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3232,7 +3417,17 @@ 72, 6, 180, 25, 66, 4, 150, 20, 5, - 0x67DC7FF, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_RANGER | CH0_PALADIN | CH0_WARRIOR_MAGE | + CH0_CHAOS_WARRIOR | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_SORCERER | CH0_ARCHER | + CH0_MAGIC_EATER | CH0_RED_MAGE | CH0_SAMURAI | + CH0_FORCETRAINER | CH0_BLUE_MAGE | CH0_CAVALRY | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3247,7 +3442,14 @@ 72, 6, 100, 25, 66, 4, 100, 20, 5, - 0x631474A, + { + CH0_WARRIOR | CH0_MAGE | CH0_ROGUE | CH0_WARRIOR_MAGE | + CH0_MONK | CH0_MINDCRAFTER | CH0_HIGH_MAGE | + CH0_SORCERER | CH0_MAGIC_EATER | CH0_FORCETRAINER | + CH0_BLUE_MAGE | CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3262,7 +3464,15 @@ 32, 2, 75, 2, 29, 2, 65, 2, 4, - 0x623F65E, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_RANGER | CH0_WARRIOR_MAGE | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_IMITATOR | CH0_BEASTMASTER | + CH0_SORCERER | CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | + CH0_BLUE_MAGE | CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3277,7 +3487,15 @@ 65, 6, 150, 20, 61, 6, 120, 15, 0, - 0x57887CF, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_WARRIOR_MAGE | CH0_CHAOS_WARRIOR | CH0_MONK | + CH0_MINDCRAFTER | CH0_HIGH_MAGE | CH0_ARCHER | + CH0_SAMURAI | CH0_FORCETRAINER | CH0_BLUE_MAGE | + CH0_CAVALRY | CH0_SMITH | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3290,8 +3508,12 @@ 120, 60, 111, 11, 255, 50, 99, 11, 250, 45, - 0, - 0x0010005, + 0, + { + CH0_WARRIOR | CH0_PRIEST | CH0_MAGIC_EATER + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3306,15 +3528,23 @@ 82, 5, 190, 20, 78, 6, 180, 15, 3, - 0x779F777, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_RANGER | + CH0_PALADIN | CH0_WARRIOR_MAGE | CH0_MONK | + CH0_MINDCRAFTER | CH0_HIGH_MAGE | CH0_IMITATOR | + CH0_BEASTMASTER | CH0_SORCERER | CH0_ARCHER | + CH0_MAGIC_EATER | CH0_SAMURAI | CH0_FORCETRAINER | + CH0_BLUE_MAGE | CH0_CAVALRY | CH0_SMITH | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP "バルログ", - "Balrog", -#else - "Balrog", #endif + "Balrog", { 4, 2, -10, 2, 3, -5 }, -3, 12, 15, -2, 1, 8, 20, 0, @@ -3323,7 +3553,16 @@ 100,10, 255, 65, 80, 10, 240, 64, 5, - 0x7EDC4DB, + { + CH0_WARRIOR | CH0_MAGE | CH0_ROGUE | CH0_RANGER | + CH0_WARRIOR_MAGE | CH0_CHAOS_WARRIOR | CH0_HIGH_MAGE | + CH0_SORCERER | CH0_ARCHER | CH0_MAGIC_EATER | + CH0_RED_MAGE | CH0_SAMURAI | CH0_BLUE_MAGE | + CH0_CAVALRY | CH0_BERSERKER | CH0_SMITH | + CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3338,7 +3577,18 @@ 82, 5, 190, 20, 78, 6, 180, 15, 0, - 0x7FFF7FF, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_RANGER | CH0_PALADIN | CH0_WARRIOR_MAGE | + CH0_CHAOS_WARRIOR | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_IMITATOR | CH0_BEASTMASTER | + CH0_SORCERER | CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | + CH0_RED_MAGE | CH0_SAMURAI | CH0_FORCETRAINER | + CH0_BLUE_MAGE | CH0_CAVALRY | CH0_BERSERKER | + CH0_SMITH | CH0_MIRROR_MASTER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3352,7 +3602,16 @@ 80, 8, 90, 20, 73, 8, 80, 15, 4, - 0x633C7DF, + { + CH0_WARRIOR | CH0_MAGE | CH0_PRIEST | CH0_ROGUE | + CH0_RANGER | CH0_WARRIOR_MAGE | CH0_CHAOS_WARRIOR | + CH0_MONK | CH0_MINDCRAFTER | CH0_HIGH_MAGE | + CH0_SORCERER | CH0_ARCHER | CH0_MAGIC_EATER | CH0_BARD | + CH0_FORCETRAINER | CH0_BLUE_MAGE | CH0_MIRROR_MASTER | + CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3367,7 +3626,14 @@ 48, 6, 150, 25, 44, 4, 130, 20, 0, - 0x418B7AD, + { + CH0_WARRIOR | CH0_PRIEST | CH0_ROGUE | CH0_PALADIN | + CH0_CHAOS_WARRIOR | CH0_MONK | CH0_MINDCRAFTER | + CH0_HIGH_MAGE | CH0_IMITATOR | CH0_BEASTMASTER | + CH0_ARCHER | CH0_SAMURAI | CH0_FORCETRAINER | CH0_NINJA + , + 0 /*CH1_XXXXX*/ + } }, { #ifdef JP @@ -3382,8 +3648,34 @@ 72, 12, 240, 64, 66, 12, 220, 64, 0, - 0x0800001, + { + CH0_WARRIOR | CH0_BERSERKER + , + 0 /*CH1_XXXXX*/ + } + }, +#ifdef ADD_WEREWOLF + { +#ifdef JP + "ワーウルフ", +#endif + "Werewolf", + + { 0, 0, 0, 0, 0, 0 }, + 0, 0, 0, 0, 3, 10, 5, 5, + 10, 125, + 14, 6, + 65, 6, 150, 20, + 61, 6, 120, 15, + 0, + { + CH0_WARRIOR | CH0_ARCHER | CH0_CAVALRY | CH0_SMITH | + CH0_BERSERKER + , + 0 /*CH1_XXXXX*/ + } }, +#endif }; @@ -3407,7 +3699,8 @@ { 4, -2, -2, 2, 2, -1}, 25, 18, 31, 1, 14, 2, 70, 55, 12, 7, 10, 0, 0, 0, 30, 30, - 9, 0, 40 + 9, 0, 40, + 0 }, { @@ -3419,7 +3712,8 @@ {-4, 3, 0, 1, -2, 1}, 30, 40, 38, 3, 16, 20, 34, 20, 7, 15, 11, 0, 0, 0, 6, 7, - 0, 30, 30 + 0, 30, 30, + 0 }, { @@ -3431,7 +3725,8 @@ {-1, -3, 3, -1, 0, 2}, 25, 35, 40, 2, 16, 8, 48, 35, 7, 11, 12, 0, 0, 0, 13, 11, - 2, 20, 35 + 2, 20, 35, + 0 }, { @@ -3443,7 +3738,8 @@ { 2, 1, -2, 3, 1, -1}, 45, 37, 36, 5, 32, 24, 60, 66, 15, 12, 10, 0, 0, 0, 21, 18, - 6, 25, 40 + 6, 25, 40, + 0 }, { @@ -3455,7 +3751,8 @@ { 2, 2, 0, 1, 1, 1}, 30, 37, 36, 3, 24, 16, 56, 72, 8, 11, 10, 0, 0, 0, 18, 28, - 4, 40, 35 + 4, 40, 35, + 0 }, { @@ -3467,7 +3764,8 @@ { 3, -3, 1, 0, 2, 2}, 20, 24, 34, 1, 12, 2, 68, 40, 7, 10, 11, 0, 0, 0, 21, 18, - 6, 35, 40 + 6, 35, 40, + 0 }, { @@ -3479,7 +3777,8 @@ { 2, 2, 0, 1, 0, 1}, 30, 35, 36, 2, 18, 16, 50, 25, 7, 10, 10, 0, 0, 0, 15, 11, - 4, 40, 35 + 4, 40, 35, + 0 }, { @@ -3491,7 +3790,8 @@ { 2, 1, -1, 0, 2, -2}, 20, 25, 34, 1, 14, 12, 65, 40, 7, 11, 10, 0, 0, 0, 20, 17, - 6, 25, 40 + 6, 25, 40, + 0 }, { @@ -3503,7 +3803,8 @@ { 2, -1, 1, 3, 2, 1}, 45, 34, 36, 5, 32, 24, 64, 60, 15, 11, 10, 0, 0, 0, 18, 18, - 6, 30, 35 + 6, 30, 35, + 0 }, { @@ -3515,7 +3816,8 @@ {-1, 0, 3, -1, -1, 2}, /* note: spell stat is Wis */ 30, 33, 38, 3, 22, 16, 50, 40, 10, 11, 10, 0, 0, 0, 14, 18, - 2, 25, 35 + 2, 25, 35, + 0 }, { @@ -3527,7 +3829,8 @@ {-4, 4, 0, 0, -2, 1}, 30, 40, 38, 3, 16, 20, 34, 20, 7, 15, 11, 0, 0, 0, 6, 7, - 0, 30, 25 + 0, 30, 25, + 0 }, { @@ -3538,7 +3841,8 @@ { -1, -1, -1, -1, -1, -1}, 15, 18, 28, 1, 12, 2, 40, 20, 5, 7, 9, 0, 0, 0, 11, 11, - 0, -30, 40 + 0, -30, 40, + 0 }, { @@ -3549,7 +3853,8 @@ { 0, 1, -1, 2, 0, 1}, 25, 30, 36, 2, 18, 16, 60, 50, 7, 10, 10, 0, 0, 0, 18, 20, - 5, 10, 20 + 5, 10, 20, + 0 }, { @@ -3560,7 +3865,8 @@ { 1, -1, -1, 1, 0, 2}, 20, 25, 32, 2, 18, 16, 52, 63, 7, 10, 10, 0, 0, 0, 14, 25, - 3, 20, 10 + 3, 20, 10, + 0 }, { @@ -3572,7 +3878,8 @@ {-5, 6, -2, 2, 0, -2}, 30, 48, 75, 2, 12, 22, 0, 0, 7, 18, 13, 0, 0, 0, 0, 0, - 4, 60, 25 + 4, 60, 25, + 0 }, { @@ -3584,7 +3891,8 @@ { 2, -1, -1, 2, 1, 0}, 38, 24, 35, 4, 24, 16, 56, 82, 12, 10, 10, 0, 0, 0, 18, 36, - 6, 10, 40 + 6, 10, 40, + 0 }, { @@ -3596,7 +3904,8 @@ {-1, 2, 1, 2, -2, 1}, 25, 42, 36, 2, 20, 16, 48, 35, 7, 16, 10, 0, 0, 0, 13, 11, - 3, 30, 30 + 3, 30, 30, + 0 }, { @@ -3607,7 +3916,8 @@ {-2, 1, 2, -1, -2, 4}, 20, 33, 34, -5, 16, 20, 34, 20, 8, 13, 11, 0, 0, 0, 10, 8, - 2, 40, 25 + 2, 40, 25, + 0 }, { @@ -3619,7 +3929,8 @@ { 2, 2, -1, 1, 0, -1}, 20, 34, 34, 1, 16, 10, 56, 25, 7, 11, 11, 0, 0, 0, 18, 11, - 4, 40, 40 + 4, 40, 40, + 0 }, { @@ -3631,7 +3942,8 @@ { 3, -2, 1, 2, 1, 0}, 25, 18, 32, 2, 16, 6, 70, 40, 12, 7, 10, 0, 0, 0, 23, 18, - 6, 30, 40 + 6, 30, 40, + 0 }, { @@ -3643,7 +3955,8 @@ { 0, -1, 3, 2, 1, 1}, 30, 34, 38, 4, 32, 24, 50, 40, 10, 11, 11, 0, 0, 0, 14, 15, - 2, 35, 40 + 2, 35, 40, + 0 }, { @@ -3655,7 +3968,8 @@ {-4, 4, -1, 1, -2, -1}, 30, 40, 36, 3, 20, 16, 40, 25, 7, 16, 11, 0, 0, 0, 6, 7, - 2, 30, 35 + 2, 30, 35, + 0 }, { @@ -3666,7 +3980,8 @@ { 2, -2, -2, 2, 2, 0}, 20, 18, 32, 1, 16, 10, 60, 66, 10, 7, 10, 0, 0, 0, 22, 26, - 5, 20, 35 + 5, 20, 35, + 0 }, { @@ -3678,7 +3993,8 @@ { 8, -20, -20, 4, 4, -5}, -100, -1000, -200, -100, -100, -100, 120, -2000, 0, 0, 0, 0, 0, 0, 50, 0, - 11, 60, 255 + 11, 60, 255, + 0 }, { @@ -3690,7 +4006,8 @@ { 3, -1, -1, 1, 0, -1}, 30, 28, 28, 1, 20, 10, 60, 45, 10, 10, 10, 0, 0, 0, 21, 15, - 6, 30, 40 + 6, 30, 40, + 0 }, { #ifdef JP @@ -3701,7 +4018,8 @@ { -2, 3, 1, -1, -2, 1}, 30, 33, 40, 3, 14, 16, 34,30, 10, 11, 12, 0, 0, 0, 6,10, - 2, 30, 30 + 2, 30, 30, + 0 }, { #ifdef JP @@ -3712,7 +4030,8 @@ { 0, -1, -1, 3, 2, -1}, 45, 24, 36, 8, 48, 32, 70,66, 15, 10, 10, 0, 0, 0, 25,18, - 2, 20, 40 + 2, 20, 40, + 0 }, }; @@ -3856,7 +4175,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0x000000, + {0x000000, 0x000000}, }, { #ifdef JP @@ -3871,7 +4190,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0x000003, + {0x000003, 0x000000}, }, { #ifdef JP @@ -3886,7 +4205,7 @@ 0, 0, 0, 0, 0, 0, 0, 0, 20, - 0x000003, + {0x000003, 0x000000}, }, { #ifdef JP @@ -3901,8 +4220,25 @@ 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0x000005, + {0x000005, 0x000000}, }, +#ifdef ADD_WEREWOLF + { +#ifdef JP + "[狼]", +#endif + "[Wolf]", + + { 2, -2, -1, -1, 2, -2 }, + -5, -20, -1, -1, 5, 12, 15, -10, + 12, 0, + 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 3, + {0x000000, 0x000000}, + }, +#endif }; @@ -6668,6 +7004,47 @@ {4486, 5636, 1702}, }; + +#ifdef ADD_WEREWOLF +martial_arts ma_blows_wolf[MAX_MA_WOLF] = +{ +#ifdef JP + { "%sを引っ掻いた。", 1, 0, 1, 4, 0 }, + { "%sに噛み付いた。", 3, 0, 1, 6, 0 }, + { "%sに体当りした。", 7, 5, 2, 3, 0 }, + { "%sを蹴った。", 10, 5, 1,10, 0 }, + { "%sの脚を引っ掻いた。", 14, 10, 3, 4, MA_WOLF_FOOT }, + { "%sの肩に齧り付いた。", 18, 15, 5, 4, 0 }, + { "%sの顔に爪を立てた。", 23, 20, 5, 5, MA_WOLF_EYE }, + { "%sの体を切り裂いた。", 28, 25, 6, 5, 0 }, + { "%sを切り刻んだ。", 34, 30, 6, 8, 0 }, + { "%sの喉元に齧り付いた。", 40, 35, 8,10, 0 }, +#else + { "You scratch %s.", 1, 0, 1, 4, 0 }, + { "You bite %s.", 3, 0, 1, 6, 0 }, + { "You butt %s.", 7, 5, 2, 3, 0 }, + { "You kick %s.", 10, 5, 1,10, 0 }, + { "You scratch %s's foot.", 14, 10, 3, 4, MA_WOLF_FOOT }, + { "You bite off %s's shoulder.", 18, 15, 5, 4, 0 }, + { "You fastened its claws in face of %s.", 23, 20, 5, 5, MA_WOLF_EYE }, + { "You cut %s's body.", 28, 25, 6, 5, 0 }, + { "You cut %s in pieces.", 34, 30, 6, 8, 0 }, + { "You bite off %s's neck.", 40, 35, 8,10, 0 }, +#endif +}; + +int werewolf_ave_damage[PY_MAX_LEVEL+1] = +{ + 0, + 250, 250, 299, 299, 299, 299, 317, 319, 321, 365, + 368, 369, 370, 407, 412, 499, 504, 582, 594, 607, + 619, 628, 699, 829, 848, 862, 880, 966, 984, 1007, + 1027, 1158, 1173, 1330, 1360, 1390, 1416, 1443, 1464, 1914, + 1961, 2010, 2057, 2096, 2141, 2169, 2198, 2395, 2431, 2452, +}; +#endif /* ADD_WEREWOLF */ + + /* * Table of game-generated inscriptions (indexed by the defines in * defines.h). -- RG diff -ur Hengband/src/types.h Hengband_warwolf/src/types.h --- Hengband/src/types.h Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/types.h Sun Apr 8 07:00:00 2007 @@ -855,7 +855,7 @@ byte infra; /* Infra-vision range */ - u32b choice; /* Legal class choices */ + u32b choice[2]; /* Legal class choices */ /* byte choice_xtra; */ }; @@ -897,6 +897,7 @@ s16b c_exp; /* Class experience factor */ byte pet_upkeep_div; /* Pet upkeep divider */ + byte sex; /* seibetu seigen */ }; diff -ur Hengband/src/wizard1.c Hengband_warwolf/src/wizard1.c --- Hengband/src/wizard1.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/wizard1.c Sun Apr 8 07:00:00 2007 @@ -1756,7 +1756,7 @@ { monster_race *r_ptr = &r_info[who[i]]; - cptr name = (r_name + r_ptr->name); + cptr name = monnam(r_ptr); if (r_ptr->flags7 & (RF7_KAGE)) continue; /* Get the "name" */ @@ -2114,9 +2114,9 @@ /* Name */ #ifdef JP - sprintf(buf, "%s/%s (", (r_name + r_ptr->name),(r_name+r_ptr->E_name)); /* ---)--- */ + sprintf(buf, "%s/%s (", monnam(r_ptr), monnamE(r_ptr)); /* ---)--- */ #else - sprintf(buf, "%s (", (r_name + r_ptr->name)); /* ---)--- */ + sprintf(buf, "%s (", monnam(r_ptr)); /* ---)--- */ #endif spoil_out(buf); @@ -2393,10 +2393,10 @@ r_ptr = &r_info[r_idx]; #ifdef JP fprintf(fff, "[%d]: %s (レベル%d, '%c')\n", r_idx, - r_name + r_ptr->name, r_ptr->level, r_ptr->d_char); + monnam(r_ptr), r_ptr->level, r_ptr->d_char); #else fprintf(fff, "[%d]: %s (Level %d, '%c')\n", r_idx, - r_name + r_ptr->name, r_ptr->level, r_ptr->d_char); + monnam(r_ptr), r_ptr->level, r_ptr->d_char); #endif for (n = 1; r_ptr->next_exp; n++) { @@ -2405,10 +2405,10 @@ r_ptr = &r_info[r_ptr->next_r_idx]; #ifdef JP fprintf(fff, "%s (レベル%d, '%c')\n", - r_name + r_ptr->name, r_ptr->level, r_ptr->d_char); + monnam(r_ptr), r_ptr->level, r_ptr->d_char); #else fprintf(fff, "%s (Level %d, '%c')\n", - r_name + r_ptr->name, r_ptr->level, r_ptr->d_char); + monnam(r_ptr), r_ptr->level, r_ptr->d_char); #endif } diff -ur Hengband/src/wizard2.c Hengband_warwolf/src/wizard2.c --- Hengband/src/wizard2.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/wizard2.c Sun Apr 8 07:00:00 2007 @@ -681,7 +681,7 @@ object_kind *k_ptr = &k_info[k_idx]; - cptr str = (k_name + k_ptr->name); + cptr str = kindnam(k_ptr); /* Skip past leading characters */ diff -ur Hengband/src/xtra1.c Hengband_warwolf/src/xtra1.c --- Hengband/src/xtra1.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/xtra1.c Mon Apr 9 12:51:40 2007 @@ -203,7 +203,7 @@ else if (!dun_level && p_ptr->town_num) return town[p_ptr->town_num].name; else - return d_name+d_info[dungeon_type].name; + return dunnam_idx(dungeon_type); } /* @@ -270,60 +270,63 @@ /* * Data structure for status bar */ -#define BAR_TSUYOSHI 0 -#define BAR_HALLUCINATION 1 -#define BAR_BLINDNESS 2 -#define BAR_PARALYZE 3 -#define BAR_CONFUSE 4 -#define BAR_POISONED 5 -#define BAR_AFRAID 6 -#define BAR_LEVITATE 7 -#define BAR_REFLECTION 8 -#define BAR_PASSWALL 9 -#define BAR_WRAITH 10 -#define BAR_PROTEVIL 11 -#define BAR_KAWARIMI 12 -#define BAR_MAGICDEFENSE 13 -#define BAR_EXPAND 14 -#define BAR_STONESKIN 15 -#define BAR_MULTISHADOW 16 -#define BAR_REGMAGIC 17 -#define BAR_ULTIMATE 18 -#define BAR_INVULN 19 -#define BAR_IMMACID 20 -#define BAR_RESACID 21 -#define BAR_IMMELEC 22 -#define BAR_RESELEC 23 -#define BAR_IMMFIRE 24 -#define BAR_RESFIRE 25 -#define BAR_IMMCOLD 26 -#define BAR_RESCOLD 27 -#define BAR_RESPOIS 28 -#define BAR_RESNETH 29 -#define BAR_RESTIME 30 -#define BAR_DUSTROBE 31 -#define BAR_SHFIRE 32 -#define BAR_TOUKI 33 -#define BAR_SHHOLY 34 -#define BAR_EYEEYE 35 -#define BAR_BLESSED 36 -#define BAR_HEROISM 37 -#define BAR_BERSERK 38 -#define BAR_ATTKFIRE 39 -#define BAR_ATTKCOLD 40 -#define BAR_ATTKELEC 41 -#define BAR_ATTKACID 42 -#define BAR_ATTKPOIS 43 -#define BAR_ATTKCONF 44 -#define BAR_SENSEUNSEEN 45 -#define BAR_TELEPATHY 46 -#define BAR_REGENERATION 47 -#define BAR_INFRAVISION 48 -#define BAR_STEALTH 49 -#define BAR_SUPERSTEALTH 50 -#define BAR_RECALL 51 -#define BAR_ALTER 52 - +enum +{ + BAR_TSUYOSHI, + BAR_HALLUCINATION, + BAR_BLINDNESS, + BAR_PARALYZE, + BAR_CONFUSE, + BAR_POISONED, + BAR_AFRAID, + BAR_LEVITATE, + BAR_REFLECTION, + BAR_PASSWALL, + BAR_WRAITH, + BAR_PROTEVIL, + BAR_KAWARIMI, + BAR_MAGICDEFENSE, + BAR_EXPAND, + BAR_STONESKIN, + BAR_MULTISHADOW, + BAR_REGMAGIC, + BAR_ULTIMATE, + BAR_INVULN, + BAR_IMMACID, + BAR_RESACID, + BAR_IMMELEC, + BAR_RESELEC, + BAR_IMMFIRE, + BAR_RESFIRE, + BAR_IMMCOLD, + BAR_RESCOLD, + BAR_RESPOIS, + BAR_RESNETH, + BAR_RESTIME, + BAR_DUSTROBE, + BAR_SHFIRE, + BAR_TOUKI, + BAR_SHHOLY, + BAR_EYEEYE, + BAR_BLESSED, + BAR_HEROISM, + BAR_BERSERK, + BAR_ATTKFIRE, + BAR_ATTKCOLD, + BAR_ATTKELEC, + BAR_ATTKACID, + BAR_ATTKPOIS, + BAR_ATTKCONF, + BAR_SENSEUNSEEN, + BAR_TELEPATHY, + BAR_REGENERATION, + BAR_INFRAVISION, + BAR_STEALTH, + BAR_SUPERSTEALTH, + BAR_RECALL, + BAR_ALTER, + MAX_BAR +}; static struct { byte attr; @@ -1802,7 +1805,7 @@ update_playtime(); /* Display player */ - display_player(0); + display_player(DISPLAY_PLAYER_MODE_SKILLS); /* Fresh */ Term_fresh(); @@ -2740,7 +2743,11 @@ /* Factor in the hero / superhero settings */ if (IS_HERO()) mhp += 10; - if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER)) mhp += 30; + if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER) +#ifdef ADD_WEREWOLF + && (p_ptr->mimic_form != MIMIC_WOLF) +#endif + ) mhp += 30; if (p_ptr->tsuyoshi) mhp += 50; /* New maximum hitpoints */ @@ -3165,6 +3172,16 @@ } break; } + switch (p_ptr->mimic_form) + { + case MIMIC_WOLF: + if (empty_hands(FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM)) + { + p_ptr->migite = TRUE; + p_ptr->ryoute = TRUE; + } + break; + } } } @@ -3346,6 +3363,14 @@ p_ptr->dis_to_a += 10; if (p_ptr->pclass != CLASS_NINJA) p_ptr->lite = TRUE; break; +#ifdef ADD_WEREWOLF + case MIMIC_WOLF: + p_ptr->shero = 1; + p_ptr->resist_fear = TRUE; + p_ptr->free_act = TRUE; + p_ptr->regenerate = TRUE; + break; +#endif } } else @@ -5027,6 +5052,13 @@ p_ptr->riding_ryoute = TRUE; break; } + switch (p_ptr->mimic_form) + { + case MIMIC_WOLF: + if ((empty_hands(FALSE) != EMPTY_HAND_NONE) && !buki_motteruka(INVEN_RARM) && !buki_motteruka(INVEN_LARM)) + p_ptr->riding_ryoute = TRUE; + break; + } } if ((p_ptr->pclass == CLASS_BEASTMASTER) || (p_ptr->pclass == CLASS_CAVALRY)) @@ -5127,6 +5159,24 @@ p_ptr->num_blow[0] += 1+extra_blows[0]; } +#ifdef ADD_WEREWOLF + /* Different calculation for warewolf with empty hands */ + else if ((p_ptr->mimic_form == MIMIC_WOLF) && (p_ptr->pclass != CLASS_SORCERER) && + (empty_hands_status & EMPTY_HAND_RARM) && !p_ptr->hidarite) + { + int blow_base = p_ptr->lev + adj_dex_blow[p_ptr->stat_ind[A_DEX]]; + p_ptr->num_blow[0] = 0; + + if (blow_base > 18) p_ptr->num_blow[0]++; + if (blow_base > 31) p_ptr->num_blow[0]++; + if (blow_base > 44) p_ptr->num_blow[0]++; + if (blow_base > 58) p_ptr->num_blow[0]++; + if (((p_ptr->pclass == CLASS_WARRIOR) || (p_ptr->pclass == CLASS_BERSERKER)) + && (p_ptr->lev > 34)) p_ptr->num_blow[0]++; + + p_ptr->num_blow[0] += 1+extra_blows[0]; + } +#endif /* ADD_WEREWOLF */ if (p_ptr->riding) p_ptr->levitation = riding_levitation; @@ -5219,7 +5269,11 @@ p_ptr->dis_to_d[default_hand] += MAX(bonus_to_d,1); } - if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER) || (p_ptr->pclass == CLASS_BERSERKER)) && (empty_hands(FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))) p_ptr->ryoute = FALSE; + if (((p_ptr->pclass == CLASS_MONK) || (p_ptr->pclass == CLASS_FORCETRAINER) || (p_ptr->pclass == CLASS_BERSERKER) +#ifdef ADD_WEREWOLF + || (p_ptr->mimic_form == MIMIC_WOLF) +#endif + ) && (empty_hands(FALSE) == (EMPTY_HAND_RARM | EMPTY_HAND_LARM))) p_ptr->ryoute = FALSE; /* Affect Skill -- stealth (bonus one) */ p_ptr->skill_stl += 1; diff -ur Hengband/src/xtra2.c Hengband_warwolf/src/xtra2.c --- Hengband/src/xtra2.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/xtra2.c Sun Apr 8 07:00:00 2007 @@ -1449,9 +1449,9 @@ (void)drop_near(q_ptr, -1, y, x); } #ifdef JP - msg_format("あなたは%sを制覇した!",d_name+d_info[dungeon_type].name); + msg_format("あなたは%sを制覇した!",dunnam_idx(dungeon_type)); #else - msg_format("You have conquered %s!",d_name+d_info[dungeon_type].name); + msg_format("You have conquered %s!",dunnam_idx(dungeon_type)); #endif } } @@ -1983,9 +1983,9 @@ { char note_buf[160]; #ifdef JP - sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? "(クローン)" : ""); + sprintf(note_buf, "%s%s", monnam(r_ptr), (m_ptr->smart & SM_CLONED) ? "(クローン)" : ""); #else - sprintf(note_buf, "%s%s", r_name + r_ptr->name, (m_ptr->smart & SM_CLONED) ? "(Clone)" : ""); + sprintf(note_buf, "%s%s", monnam(r_ptr), (m_ptr->smart & SM_CLONED) ? "(Clone)" : ""); #endif do_cmd_write_nikki(NIKKI_UNIQUE, 0, note_buf); } @@ -3613,9 +3613,9 @@ else if (have_flag(f_ptr->flags, FF_ENTRANCE)) { #ifdef JP - name = format("%s(%d階相当)", d_text + d_info[c_ptr->special].text, d_info[c_ptr->special].mindepth); + name = format("%s(%d階相当)", duntext_idx(c_ptr->special), d_info[c_ptr->special].mindepth); #else - name = format("%s(level %d)", d_text + d_info[c_ptr->special].text, d_info[c_ptr->special].mindepth); + name = format("%s(level %d)", duntext_idx(c_ptr->special), d_info[c_ptr->special].mindepth); #endif } else if (have_flag(f_ptr->flags, FF_TOWN)) @@ -3632,7 +3632,7 @@ } else { - name = f_name + f_ptr->name; + name = feanam(f_ptr); } diff -ur Hengband/src/z-config.h Hengband_warwolf/src/z-config.h --- Hengband/src/z-config.h Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/z-config.h Sun Apr 8 07:00:00 2007 @@ -603,4 +603,6 @@ #define WORLD_SCORE #endif +#undef WORLD_SCORE + #endif /* HAVE_CONFIG_H */ diff -ur Hengband/src/z-term.c Hengband_warwolf/src/z-term.c --- Hengband/src/z-term.c Sun Apr 8 05:50:09 2007 +++ Hengband_warwolf/src/z-term.c Sun Apr 8 07:00:00 2007 @@ -18,11 +18,15 @@ /* Special flags in the attr data */ #define AF_BIGTILE2 0xf0 #define AF_TILE1 0x80 +#define IS_BIGTILE2(a) (((a) & AF_BIGTILE2) == AF_BIGTILE2) +#define IS_TILE1(a) ((a) & AF_TILE1) #ifdef JP #define AF_KANJI1 0x10 #define AF_KANJI2 0x20 #define AF_KANJIC 0x0f +#define IS_KANJI1(a) (((a) & AF_BIGTILE2) == AF_KANJI1) +#define IS_KANJI2(a) (((a) & AF_BIGTILE2) == AF_KANJI2) /* * 全角文字対応。 * 属性に全角文字の1バイト目、2バイト目も記憶。 @@ -543,10 +547,9 @@ if (x > Term->x2[y]) Term->x2[y] = x; #ifdef JP - if (((scrn->a[y][x] & AF_BIGTILE2) == AF_BIGTILE2) || - (scrn->a[y][x] & AF_KANJI2)) + if (IS_BIGTILE2(a) || IS_KANJI2(a)) #else - if ((scrn->a[y][x] & AF_BIGTILE2) == AF_BIGTILE2) + if (IS_BIGTILE2(a)) #endif if ((x - 1) < Term->x1[y]) Term->x1[y]--; } @@ -591,7 +594,7 @@ } /* A tile becomes a Bigtile */ - if ((a & AF_TILE1) && (c & 0x80)) + if (IS_TILE1(a) && (c & 0x80)) { /* Mark it as a Bigtile */ a2 = AF_BIGTILE2; @@ -599,7 +602,7 @@ c2 = -1; /* Ignore non-tile background */ - if (!((ta & AF_TILE1) && (tc & 0x80))) + if (!(IS_TILE1(ta) && (tc & 0x80))) { ta = 0; tc = 0; @@ -754,7 +757,7 @@ /* 特殊文字としてMSBが立っている可能性がある */ /* その場合attrのMSBも立っているのでこれで識別する */ /* check */ - if (!(a & AF_TILE1) && iskanji(*s)) + if (!IS_TILE1(a) && iskanji(*s)) { char nc1 = *s++; char nc2 = *s; @@ -815,7 +818,7 @@ int w, h; Term_get_size(&w, &h); - if (x != w && !(scr_aa[x] & AF_TILE1) && (scr_aa[x] & AF_KANJI2)) + if (x != w && !IS_TILE1(scr_aa[x]) && IS_KANJI2(scr_aa[x])) { scr_cc[x] = ' '; scr_aa[x] &= AF_KANJIC; @@ -910,7 +913,7 @@ /* 特殊文字としてMSBが立っている可能性がある */ /* その場合attrのMSBも立っているのでこれで識別する */ /* check */ - kanji = (iskanji(nc) && !(na & AF_TILE1)); + kanji = (iskanji(nc) && !IS_TILE1(na)); #endif ota = old_taa[x]; @@ -1048,7 +1051,7 @@ /* その場合attrのMSBも立っているのでこれで識別する */ /* check */ /* kanji = (iskanji(nc)); */ - kanji = (iskanji(nc) && !(na & AF_TILE1)); + kanji = (iskanji(nc) && !IS_TILE1(na)); #endif ota = old_taa[x]; @@ -1108,10 +1111,10 @@ old_tcc[x] = ntc; /* 2nd byte of bigtile */ - if ((na & AF_BIGTILE2) == AF_BIGTILE2) continue; + if (IS_BIGTILE2(na)) continue; /* Handle high-bit attr/chars */ - if ((na & AF_TILE1) && (nc & 0x80)) + if (IS_TILE1(na) && (nc & 0x80)) { /* Flush */ if (fn) @@ -1235,7 +1238,7 @@ int kanji = 0; for (x = 0; x < x1; x++) - if (!(old_aa[x] & AF_TILE1) && iskanji(old_cc[x])) + if (!IS_TILE1(old_aa[x]) && iskanji(old_cc[x])) { if (x == x1 - 1) { @@ -1270,7 +1273,7 @@ /* 特殊文字としてMSBが立っている可能性がある */ /* その場合attrのMSBも立っているのでこれで識別する */ /* check */ - kanji = (iskanji(nc) && !(na & AF_TILE1)); + kanji = (iskanji(nc) && !IS_TILE1(na)); #endif /* Handle unchanged grids */ #ifdef JP @@ -1592,7 +1595,7 @@ char otc = old_tcc[tx]; #ifdef JP - if (tx + 1 < Term->wid && !(old_aa[tx] & AF_TILE1) + if (tx + 1 < Term->wid && !IS_TILE1(old_aa[tx]) && iskanji(old_cc[tx])) csize = 2; #endif @@ -1603,7 +1606,7 @@ } /* Hack -- use "Term_pict()" sometimes */ - else if (Term->higher_pict && (old_aa[tx] & AF_TILE1) && (old_cc[tx] & 0x80)) + else if (Term->higher_pict && IS_TILE1(old_aa[tx]) && (old_cc[tx] & 0x80)) { (void)((*Term->pict_hook)(tx, ty, 1, &old_aa[tx], &old_cc[tx], &ota, &otc)); } @@ -1706,11 +1709,11 @@ { #ifdef JP if ((scr->cx + 1 < w) && - ((old->a[scr->cy][scr->cx + 1] & AF_BIGTILE2) == AF_BIGTILE2 || - (!(old->a[scr->cy][scr->cx] & AF_TILE1) && + (IS_BIGTILE2(old->a[scr->cy][scr->cx + 1]) || + (!IS_TILE1(old->a[scr->cy][scr->cx]) && iskanji(old->c[scr->cy][scr->cx])))) #else - if ((scr->cx + 1 < w) && (old->a[scr->cy][scr->cx + 1] & AF_BIGTILE2) == AF_BIGTILE2) + if ((scr->cx + 1 < w) && IS_BIGTILE2(old->a[scr->cy][scr->cx + 1])) #endif { /* Double width cursor for the Bigtile mode */ @@ -2085,10 +2088,10 @@ * 全角文字の右半分から文字を表示する場合、 * 重なった文字の左部分を消去。 */ - if (n > 0 && (((scr_aa[x] & AF_KANJI2) && !(scr_aa[x] & AF_TILE1)) - || (scr_aa[x] & AF_BIGTILE2) == AF_BIGTILE2)) + if (n > 0 && ((IS_KANJI2(scr_aa[x]) && !IS_TILE1(scr_aa[x])) + || IS_BIGTILE2(scr_aa[x]))) #else - if (n > 0 && (scr_aa[x] & AF_BIGTILE2) == AF_BIGTILE2) + if (n > 0 && IS_BIGTILE2(scr_aa[x])) #endif { x--; @@ -2112,7 +2115,7 @@ * 2001/04/29 -- Habu * 行の右端の場合はこの処理をしないように修正。 */ - if ((oa & AF_KANJI1) && (i + 1) == n && x != w - 1) + if (IS_KANJI1(oa) && (i + 1) == n && x != w - 1) n++; #endif /* Save the "literal" information */ @@ -2255,7 +2258,7 @@ if (x2j < Term->wid - 1) { - if (Term->scr->a[i][x2j] & AF_KANJI1) x2j++; + if (IS_KANJI1(Term->scr->a[i][x2j])) x2j++; } Term->x1[i] = x1j;