diff -cr hengband-relay/hengband.INI Hengband-1.7.20/hengband.INI *** hengband-relay/hengband.INI Tue Feb 27 20:12:46 2007 --- Hengband-1.7.20/hengband.INI Wed Feb 28 11:44:48 2007 *************** *** 15,22 **** TileHgt=15 NumCols=80 NumRows=24 ! PositionX=210 ! PositionY=140 PositionFix=0 [Term-1] Visible=0 --- 15,22 ---- TileHgt=15 NumCols=80 NumRows=24 ! PositionX=211 ! PositionY=144 PositionFix=0 [Term-1] Visible=0 Binary files hengband-relay/hengband.exe and Hengband-1.7.20/hengband.exe differ Binary files hengband-relay/lib/apex/scores.raw and Hengband-1.7.20/lib/apex/scores.raw differ Binary files hengband-relay/lib/data/a_info_j.raw and Hengband-1.7.20/lib/data/a_info_j.raw differ Binary files hengband-relay/lib/data/d_info_j.raw and Hengband-1.7.20/lib/data/d_info_j.raw differ Binary files hengband-relay/lib/data/e_info_j.raw and Hengband-1.7.20/lib/data/e_info_j.raw differ Binary files hengband-relay/lib/data/f_info_j.raw and Hengband-1.7.20/lib/data/f_info_j.raw differ Binary files hengband-relay/lib/data/k_info_j.raw and Hengband-1.7.20/lib/data/k_info_j.raw differ Binary files hengband-relay/lib/data/m_info_j.raw and Hengband-1.7.20/lib/data/m_info_j.raw differ Binary files hengband-relay/lib/data/r_info_j.raw and Hengband-1.7.20/lib/data/r_info_j.raw differ Binary files hengband-relay/lib/data/s_info_j.raw and Hengband-1.7.20/lib/data/s_info_j.raw differ Binary files hengband-relay/lib/data/v_info_j.raw and Hengband-1.7.20/lib/data/v_info_j.raw differ Binary files hengband-relay/lib/data/z_info_j.raw and Hengband-1.7.20/lib/data/z_info_j.raw differ Only in hengband-relay/lib/edit: R_INFO.TXT diff -cr hengband-relay/lib/edit/k_info.txt Hengband-1.7.20/lib/edit/k_info.txt *** hengband-relay/lib/edit/k_info.txt Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/lib/edit/k_info.txt Sat Jan 20 14:31:47 2007 *************** *** 6317,6319 **** --- 6317,6354 ---- I:40:28:0 W:50:0:2:55555 F:INSTA_ART + + + N:663:[練習用呪術] + E:[Magic for plactice] + G:?:U + I:100:0:0 + W:10:0:30:100 + A:10/1 + P:0:1d1:0:0:0 + + N:664:[実践魔術] + E:[Plactical magic] + G:?:U + I:100:1:0 + W:20:0:30:1000 + A:20/1 + P:0:1d1:0:0:0 + + N:665:[超人祈祷] + E:[Pray the superman] + G:?:u + I:100:2:0 + W:50:0:30:25000 + A:50/1 + P:0:1d1:0:0:0 + F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD + + N:666:[歪曲の書] + E:[Misinterpretation] + G:?:u + I:100:3:0 + W:95:0:30:100000 + A:95/3 + P:0:1d1:0:0:0 + F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD \ No newline at end of file diff -cr hengband-relay/lib/edit/m_info.txt Hengband-1.7.20/lib/edit/m_info.txt *** hengband-relay/lib/edit/m_info.txt Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/lib/edit/m_info.txt Thu Feb 22 22:10:19 2007 *************** *** 37,42 **** --- 37,44 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Mage ### N:1 *************** *** 391,396 **** --- 393,400 ---- T:46:90:90:200 T:48:100:85:250 + # Enchantment + R:10:0 ### Priest ### N:2 *************** *** 745,750 **** --- 749,756 ---- T:45:90:90:200 T:46:100:85:250 + # Enchantment + R:10:0 ### Rogue ### N:3 *************** *** 939,944 **** --- 945,952 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Ranger ### N:4 *************** *** 1197,1202 **** --- 1205,1212 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Paladin ### N:5 *************** *** 1295,1301 **** T:48:100:90:200 T:50:100:80:250 ! ### Warrior-Mage ### N:6 I:SORCERY:INT:0x07:0:1:430 --- 1305,1312 ---- T:48:100:90:200 T:50:100:80:250 ! # Enchantment ! R:10:0 ### Warrior-Mage ### N:6 I:SORCERY:INT:0x07:0:1:430 *************** *** 1649,1654 **** --- 1660,1667 ---- T:49:100:90:100 T:50:100:80:250 + # Enchantment + R:10:0 ### Chaos Warrior ### N:7 *************** *** 1747,1752 **** --- 1760,1767 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Monk ### N:8 *************** *** 1909,1914 **** --- 1924,1931 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Mindcrafter ### N:9 *************** *** 1943,1948 **** --- 1960,1967 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### High Mage ### N:10 *************** *** 2297,2302 **** --- 2316,2323 ---- T:42:85:85:200 T:45:90:75:250 + # Enchantment + R:10:0 ### Tourist ### N:11 *************** *** 2363,2368 **** --- 2384,2391 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Imitator ### N:12 *************** *** 2397,2402 **** --- 2420,2427 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Beastmaster ### N:13 *************** *** 2463,2468 **** --- 2488,2495 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Sorcerer ### N:14 *************** *** 2817,2822 **** --- 2844,2851 ---- T:46:90:90:200 T:48:100:85:250 + # Enchantment + R:10:0 ### Archer ### N:15 I:NONE:STR:0x00:0:99:0 *************** *** 2850,2855 **** --- 2879,2886 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Magic eater ### N:16 *************** *** 2884,2889 **** --- 2915,2922 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Bard ### N:17 *************** *** 2918,2923 **** --- 2951,2958 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Red Mage ### N:18 *************** *** 3272,3277 **** --- 3307,3314 ---- T:99:0:0:0 T:99:0:0:0 + # Enchantment + R:10:0 ### Samurai ### N:19 *************** *** 3306,3311 **** --- 3343,3350 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### ForceTrainer ### N:20 *************** *** 3500,3505 **** --- 3539,3546 ---- T:48:100:90:200 T:50:100:80:250 + # Enchantment + R:10:0 ### Blue Mage ### N:21 *************** *** 3534,3539 **** --- 3575,3582 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Cavalry ### N:22 *************** *** 3568,3573 **** --- 3611,3618 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Berserker ### N:23 *************** *** 3602,3607 **** --- 3647,3654 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Weaponsmith ### N:24 *************** *** 3636,3641 **** --- 3683,3690 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Mirror Master ### N:25 *************** *** 3670,3675 **** --- 3719,3726 ---- # Crusade R:9:0 + # Enchantment + R:10:0 ### Ninja ### N:26 *************** *** 3703,3705 **** --- 3754,4148 ---- # Crusade R:9:0 + + # Enchantment + R:10:0 + + ### Enchanter ### + N:27 + I:LIFE:WIS:0x04:1:1:430 + # Life + R:0:1 + T:2:2:30:4 #0 + T:4:4:35:4 + T:5:5:35:4 + T:6:6:35:4 + T:8:8:35:4 + T:9:9:40:4 + T:14:14:40:3 + T:16:16:45:3 + T:18:18:45:4 #1 + T:20:20:50:4 + T:22:22:50:4 + T:24:24:50:4 + T:26:26:50:4 + T:28:28:50:4 + T:33:33:55:5 + T:40:70:75:5 + T:28:28:50:75 #2 + T:30:30:70:150 + T:34:34:60:75 + T:36:36:60:75 + T:38:38:70:75 + T:42:55:80:115 + T:45:45:80:125 + T:50:70:80:150 + T:10:18:50:40 #3 + T:28:28:50:50 + T:38:85:80:115 + T:45:90:80:225 + T:46:90:80:115 + T:48:50:80:100 + T:49:100:90:100 + T:50:100:80:250 + + # Sorcery + R:1:1 + T:1:1:23:4 #0 + T:2:2:24:4 + T:3:3:25:1 + T:4:4:30:1 + T:5:5:30:1 + T:6:6:35:5 + T:7:7:30:4 + T:8:8:75:9 + T:10:9:75:8 #1 + T:11:10:75:8 + T:12:11:75:7 + T:13:12:50:6 + T:20:15:60:8 + T:27:18:60:8 + T:33:25:70:15 + T:40:40:75:20 + T:4:4:25:15 #2 + T:14:12:80:40 + T:16:14:60:25 + T:21:35:70:40 + T:19:19:85:50 + T:24:22:60:25 + T:28:28:75:19 + T:44:45:70:100 + T:12:12:40:20 #3 + T:23:28:80:100 + T:19:19:75:70 + T:35:45:80:120 + T:39:40:60:100 + T:46:55:90:175 + T:48:50:80:200 + T:48:75:85:250 + + # Neture + R:2:1 + T:2:2:23:4 #0 + T:3:3:25:3 + T:4:4:25:1 + T:5:5:35:4 + T:6:6:50:5 + T:7:7:50:5 + T:8:8:50:5 + T:9:9:35:4 + T:10:10:40:6 #1 + T:11:11:30:6 + T:12:12:45:6 + T:13:13:40:6 + T:14:14:30:5 + T:19:15:65:7 + T:31:31:65:10 + T:45:60:85:50 + T:12:12:40:44 #2 + T:15:15:75:120 + T:20:22:85:60 + T:25:30:85:40 + T:38:38:85:80 + T:40:42:90:200 + T:45:48:75:200 + T:49:95:90:250 + T:25:25:60:25 #3 + T:27:27:60:25 + T:28:28:75:29 + T:33:33:75:35 + T:38:38:85:65 + T:41:41:90:100 + T:45:95:95:250 + T:50:85:65:150 + + # Chaos + R:3:1 + T:2:2:20:4 #0 + T:3:3:22:4 + T:4:4:25:4 + T:5:5:30:6 + T:8:8:30:1 + T:11:11:45:5 + T:17:15:45:6 + T:18:17:35:5 + T:21:21:45:7 #1 + T:23:22:45:9 + T:27:25:50:20 + T:29:30:50:11 + T:33:33:50:12 + T:37:35:60:8 + T:41:40:80:15 + T:48:50:85:40 + T:12:12:45:9 #2 + T:17:16:60:20 + T:20:18:80:35 + T:27:25:60:35 + T:35:30:85:150 + T:46:46:85:100 + T:49:95:80:250 + T:50:111:80:250 + T:24:20:66:8 #3 + T:40:35:85:35 + T:41:39:75:40 + T:45:55:85:250 + T:48:48:80:150 + T:49:60:85:200 + T:50:100:80:250 + T:50:100:85:250 + + # Death + R:4:1 + T:1:1:25:4 #0 + T:2:2:25:4 + T:3:3:25:4 + T:4:4:27:3 + T:7:7:30:4 + T:9:10:75:6 + T:10:10:30:4 + T:12:12:30:4 + T:14:14:40:5 #1 + T:16:16:30:4 + T:21:21:50:10 + T:28:28:85:30 + T:35:75:80:30 + T:38:35:60:16 + T:44:55:80:70 + T:46:45:95:25 + T:10:22:80:180 #2 + T:12:18:80:30 + T:14:18:30:15 + T:30:30:75:50 + T:42:90:70:90 + T:43:40:60:125 + T:43:50:70:40 + T:45:50:70:200 + T:24:24:75:50 #3 + T:33:80:75:150 + T:35:45:95:250 + T:39:55:80:200 + T:46:55:75:150 + T:48:85:80:100 + T:50:110:95:250 + T:50:123:95:250 + + # Trump + R:5:1 + T:1:1:25:3 #0 + T:5:5:25:4 + T:7:7:37:8 + T:8:7:40:8 + T:10:10:20:4 + T:14:15:30:6 + T:18:18:30:5 + T:21:23:30:8 + T:24:23:40:8 #1 + T:27:24:35:9 + T:29:26:30:8 + T:35:32:40:12 + T:38:38:35:10 + T:41:40:45:12 + T:44:42:40:15 + T:48:46:35:12 + T:23:35:70:40 #2 + T:29:27:35:25 + T:31:30:35:30 + T:33:30:35:9 + T:35:33:35:35 + T:40:80:40:100 + T:42:120:45:250 + T:50:135:45:200 + T:33:30:30:50 #3 + T:40:60:45:100 + T:42:65:40:150 + T:45:95:40:150 + T:45:50:70:100 + T:48:125:40:150 + T:49:130:40:200 + T:50:135:40:220 + + # Arcane + R:6:1 + T:1:1:20:4 #0 + T:2:1:33:5 + T:2:2:33:4 + T:3:3:33:5 + T:4:4:33:5 + T:5:5:40:6 + T:6:6:33:7 + T:7:7:44:5 + T:8:8:40:7 #1 + T:9:9:60:7 + T:11:10:50:6 + T:12:11:50:6 + T:13:12:50:6 + T:14:13:50:6 + T:15:14:50:5 + T:16:15:50:5 + T:17:16:50:5 #2 + T:18:17:50:5 + T:19:18:33:6 + T:20:20:50:8 + T:23:30:60:25 + T:25:23:60:9 + T:28:25:60:9 + T:30:27:70:12 + T:33:30:60:13 #3 + T:35:35:80:50 + T:39:38:80:25 + T:43:42:70:25 + T:45:44:66:30 + T:47:45:80:40 + T:48:65:70:50 + T:50:140:80:200 + + # Craft + R:7:1 + T:2:2:25:4 #0 + T:3:3:25:4 + T:5:4:35:3 + T:7:8:40:5 + T:8:8:40:5 + T:10:10:50:6 + T:12:8:40:5 + T:13:8:40:5 + T:15:17:55:4 #1 + T:20:20:60:4 + T:22:22:65:6 + T:25:24:80:80 + T:26:25:85:50 + T:31:30:65:4 + T:34:33:70:5 + T:44:80:90:50 + T:16:16:50:12 #2 + T:18:13:75:120 + T:24:25:90:60 + T:28:18:60:10 + T:35:65:80:50 + T:38:85:90:150 + T:45:100:90:200 + T:48:65:70:200 + T:17:17:70:50 #3 + T:33:35:70:150 + T:40:55:90:200 + T:40:85:95:200 + T:43:100:95:200 + T:45:110:95:250 + T:47:120:80:250 + T:50:75:80:250 + + # Deamon + R:8:1 + T:2:2:20:4 #0 + T:3:2:22:4 + T:5:4:25:4 + T:7:8:30:6 + T:11:8:30:1 + T:13:10:50:6 + T:15:13:35:5 + T:16:16:45:7 + T:19:19:45:9 #1 + T:24:20:60:20 + T:26:25:50:11 + T:29:30:50:12 + T:33:33:50:12 + T:35:75:80:8 + T:42:34:70:15 + T:44:90:85:40 + T:16:16:45:9 #2 + T:19:22:60:20 + T:37:50:60:35 + T:38:35:80:200 + T:39:55:80:200 + T:42:38:80:35 + T:46:45:75:40 + T:50:108:80:250 + T:10:10:66:8 #3 + T:32:32:85:35 + T:41:48:80:200 + T:46:62:85:100 + T:48:111:85:250 + T:49:60:80:200 + T:50:105:80:200 + T:50:80:85:250 + + # Crusade + R:9:1 + T:2:1:20:4 #0 + T:4:2:30:4 + T:6:6:35:4 + T:9:9:30:4 + T:12:12:50:4 + T:14:14:50:4 + T:15:14:55:4 + T:17:12:55:4 + T:20:20:50:4 #1 + T:24:22:55:4 + T:27:26:50:4 + T:29:28:80:5 + T:31:30:65:4 + T:35:28:65:4 + T:42:38:85:5 + T:45:45:80:5 + T:7:6:33:40 #2 + T:23:20:60:50 + T:26:22:65:70 + T:30:30:65:70 + T:37:37:65:100 + T:39:80:95:100 + T:45:55:70:100 + T:48:111:85:150 + T:10:10:66:40 #3 + T:36:45:80:125 + T:39:35:80:100 + T:42:40:80:75 + T:44:50:80:75 + T:48:80:85:100 + T:49:100:90:100 + T:50:100:80:250 + + + # Enchantment + R:10:1 + T:1:1:20:4 #0 + T:1:1:20:4 + T:2:1:25:4 + T:5:3:30:4 + T:6:4:34:4 + T:8:7:35:5 + T:11:12:50:6 + T:12:10:45:8 + T:15:14:50:10 #1 + T:16:12:50:10 + T:18:10:40:10 + T:20:18:60:15 + T:25:19:55:15 + T:27:23:60:15 + T:29:20:60:20 + T:37:35:85:40 + T:26:33:70:40 #2 + T:31:30:65:40 + T:32:25:65:70 + T:33:50:70:70 + T:35:30:85:90 + T:36:27:70:120 + T:38:41:75:160 + T:44:80:90:180 + T:20:18:60:40 #3 + T:30:30:70:100 + T:35:28:65:100 + T:42:70:80:150 + T:43:58:80:150 + T:45:60:80:200 + T:46:88:85:200 + T:49:70:75:250 Only in Hengband-1.7.20/lib/edit: r_info.txt diff -cr hengband-relay/lib/edit/s_info.txt Hengband-1.7.20/lib/edit/s_info.txt *** hengband-relay/lib/edit/s_info.txt Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/lib/edit/s_info.txt Thu Jan 18 21:23:19 2007 *************** *** 8967,8969 **** --- 8967,9303 ---- S:0:0:7000 # SUDE S:1:4000:8000 # NITOURYU S:2:0:0 # RIDING + + ### Enchanter ### + N:27 + # Bow + W:0:0:0:1 # 0 + W:0:1:0:1 # + W:0:2:1:2 # SLING + W:0:3:0:1 # + W:0:4:0:1 # + W:0:5:0:1 # + W:0:6:0:1 # + W:0:7:0:1 # + W:0:8:0:1 # + W:0:9:0:1 # + W:0:10:0:1 # 10 + W:0:11:0:1 # + W:0:12:0:1 # SHORT_BOW + W:0:13:0:1 # LONG_BOW + W:0:14:0:1 # + W:0:15:0:1 # + W:0:16:0:1 # + W:0:17:0:1 # + W:0:18:0:1 # + W:0:19:0:1 # + W:0:20:0:1 # 20 + W:0:21:0:1 # + W:0:22:0:1 # + W:0:23:0:1 # LIGHT_XBOW + W:0:24:0:1 # HEAVY_XBOW + W:0:25:0:1 # + W:0:26:0:1 # + W:0:27:0:1 # + W:0:28:0:1 # + W:0:29:0:1 # + W:0:30:0:1 # 30 + W:0:31:0:1 # + W:0:32:0:1 # + W:0:33:0:1 # + W:0:34:0:1 # + W:0:35:0:1 # + W:0:36:0:1 # + W:0:37:0:1 # + W:0:38:0:1 # + W:0:39:0:1 # + W:0:40:0:1 # 40 + W:0:41:0:1 # + W:0:42:0:1 # + W:0:43:0:1 # + W:0:44:0:1 # + W:0:45:0:1 # + W:0:46:0:1 # + W:0:47:0:1 # + W:0:48:0:1 # + W:0:49:0:1 # + W:0:50:0:1 # 50 + W:0:51:0:1 # + W:0:52:0:1 # + W:0:53:0:1 # + W:0:54:0:1 # + W:0:55:0:1 # + W:0:56:0:1 # + W:0:57:0:1 # + W:0:58:0:1 # + W:0:59:0:1 # + W:0:60:0:1 # 60 + W:0:61:0:1 # + W:0:62:0:1 # + W:0:63:0:4 # NAMAKE + # Digging + W:1:0:0:2 # 0 + W:1:1:0:2 # SHOVEL + W:1:2:0:2 # GNOMISH_SHOVEL + W:1:3:0:2 # DWARVEN_SHOVEL + W:1:4:0:2 # PICK + W:1:5:0:2 # ORCISH_PICK + W:1:6:0:2 # DWARVEN_PICK + W:1:7:0:2 # MATTOCK + W:1:8:0:2 # + W:1:9:0:2 # + W:1:10:0:2 # 10 + W:1:11:0:2 # + W:1:12:0:2 # + W:1:13:0:2 # + W:1:14:0:2 # + W:1:15:0:2 # + W:1:16:0:2 # + W:1:17:0:2 # + W:1:18:0:2 # + W:1:19:0:2 # + W:1:20:0:2 # 20 + W:1:21:0:2 # + W:1:22:0:2 # + W:1:23:0:2 # + W:1:24:0:2 # + W:1:25:0:2 # + W:1:26:0:2 # + W:1:27:0:2 # + W:1:28:0:2 # + W:1:29:0:2 # + W:1:30:0:2 # 30 + W:1:31:0:2 # + W:1:32:0:2 # + W:1:33:0:2 # + W:1:34:0:2 # + W:1:35:0:2 # + W:1:36:0:2 # + W:1:37:0:2 # + W:1:38:0:2 # + W:1:39:0:2 # + W:1:40:0:2 # 40 + W:1:41:0:2 # + W:1:42:0:2 # + W:1:43:0:2 # + W:1:44:0:2 # + W:1:45:0:2 # + W:1:46:0:2 # + W:1:47:0:2 # + W:1:48:0:2 # + W:1:49:0:2 # + W:1:50:0:2 # 50 + W:1:51:0:2 # + W:1:52:0:2 # + W:1:53:0:2 # + W:1:54:0:2 # + W:1:55:0:2 # + W:1:56:0:2 # + W:1:57:0:2 # + W:1:58:0:2 # + W:1:59:0:2 # + W:1:60:0:2 # 60 + W:1:61:0:2 # + W:1:62:0:2 # + W:1:63:0:2 # + # Hafted + W:2:0:0:2 # 0 + W:2:1:0:2 # CLUB + W:2:2:0:2 # WHIP + W:2:3:0:2 # QUARTERSTAFF + W:2:4:0:2 # NUNCHAKU + W:2:5:0:2 # MACE + W:2:6:0:1 # BALL_AND_CHAIN + W:2:7:0:1 # JO_STAFF + W:2:8:0:1 # WAR_HAMMER + W:2:9:0:2 # + W:2:10:0:2 # 10 + W:2:11:0:1 # THREE_PIECE_ROD + W:2:12:0:1 # MORNING_STAR + W:2:13:0:1 # FLAIL + W:2:14:0:1 # BO_STAFF + W:2:15:0:1 # LEAD_FILLED_MACE + W:2:16:0:1 # TETSUBO + W:2:17:0:2 # + W:2:18:0:1 # TWO_HANDED_FLAIL + W:2:19:0:1 # GREAT_HAMMER + W:2:20:0:1 # MACE_OF_DISRUPTION + W:2:21:1:4 # WIZSTAFF + W:2:22:0:2 # + W:2:23:0:2 # + W:2:24:0:2 # + W:2:25:0:2 # + W:2:26:0:2 # + W:2:27:0:2 # + W:2:28:0:2 # + W:2:29:0:2 # + W:2:30:0:2 # 30 + W:2:31:0:2 # + W:2:32:0:2 # + W:2:33:0:2 # + W:2:34:0:2 # + W:2:35:0:2 # + W:2:36:0:2 # + W:2:37:0:2 # + W:2:38:0:2 # + W:2:39:0:2 # + W:2:40:0:0 # TSURIZAO + W:2:41:0:2 # + W:2:42:0:2 # + W:2:43:0:2 # + W:2:44:0:2 # + W:2:45:0:2 # + W:2:46:0:2 # + W:2:47:0:2 # + W:2:48:0:2 # + W:2:49:0:2 # + W:2:50:0:1 # GROND + W:2:51:0:2 # + W:2:52:0:2 # + W:2:53:0:2 # + W:2:54:0:2 # + W:2:55:0:2 # + W:2:56:0:2 # + W:2:57:0:2 # + W:2:58:0:2 # + W:2:59:0:2 # + W:2:60:0:2 # 60 + W:2:61:0:2 # + W:2:62:0:2 # + W:2:63:0:4 # NAMAKE + # Polearm + W:3:0:0:2 # 0 + W:3:1:0:2 # HATCHET + W:3:2:0:3 # SPEAR + W:3:3:0:2 # SICKLE + W:3:4:0:2 # AWL_PIKE + W:3:5:0:2 # TRIDENT + W:3:6:0:2 # FAUCHARD + W:3:7:0:2 # BROAD_SPEAR + W:3:8:0:1 # PIKE + W:3:9:0:1 # NAGINATA + W:3:10:0:1 # BEAKED_AXE + W:3:11:0:1 # BROAD_AXE + W:3:12:0:1 # LUCERNE_HAMMER + W:3:13:0:1 # GLAIVE + W:3:14:0:1 # LAJATANG + W:3:15:0:1 # HALBERD + W:3:16:0:1 # GUISARME + W:3:17:0:1 # SCYTHE + W:3:18:0:2 # + W:3:19:0:2 # + W:3:20:0:1 # LANCE + W:3:21:0:2 # + W:3:22:0:1 # BATTLE_AXE + W:3:23:0:2 # + W:3:24:0:2 # + W:3:25:0:1 # GREAT_AXE + W:3:26:0:1 # TRIFURCATE_SPEAR + W:3:27:0:2 # + W:3:28:0:1 # LOCHABER_AXE + W:3:29:0:1 # HEAVY_LANCE + W:3:30:0:1 # SCYTHE_OF_SLICING + W:3:31:0:2 # + W:3:32:0:2 # + W:3:33:0:2 # + W:3:34:0:2 # + W:3:35:0:2 # + W:3:36:0:2 # + W:3:37:0:2 # + W:3:38:0:2 # + W:3:39:0:2 # + W:3:40:0:2 # 40 + W:3:41:0:2 # + W:3:42:0:2 # + W:3:43:0:2 # + W:3:44:0:2 # + W:3:45:0:2 # + W:3:46:0:2 # + W:3:47:0:2 # + W:3:48:0:2 # + W:3:49:0:2 # + W:3:50:0:1 # DEATH_SCYTHE + W:3:51:0:2 # + W:3:52:0:2 # + W:3:53:0:2 # + W:3:54:0:2 # + W:3:55:0:2 # + W:3:56:0:2 # + W:3:57:0:2 # + W:3:58:0:2 # + W:3:59:0:2 # + W:3:60:0:2 # 60 + W:3:61:0:2 # + W:3:62:0:2 # + W:3:63:0:2 # + # Sword + W:4:0:0:2 # 0 + W:4:1:0:4 # BROKEN_DAGGER + W:4:2:0:4 # BROKEN_SWORD + W:4:3:0:2 # + W:4:4:0:3 # DAGGER + W:4:5:0:3 # MAIN_GAUCHE + W:4:6:1:4 # TANTO + W:4:7:0:2 # RAPIER + W:4:8:1:4 # SMALL_SWORD + W:4:9:0:3 # BASILLARD + W:4:10:1:4 # SHORT_SWORD + W:4:11:1:4 # SABRE + W:4:12:0:2 # CUTLASS + W:4:13:1:4 # WAKIZASHI + W:4:14:0:2 # KHOPESH + W:4:15:0:2 # TULWAR + W:4:16:0:2 # BROAD_SWORD + W:4:17:0:2 # LONG_SWORD + W:4:18:0:2 # SCIMITAR + W:4:19:1:4 # NINJATO + W:4:20:0:3 # KATANA + W:4:21:0:1 # BASTARD_SWORD + W:4:22:0:1 # GREAT_SCIMITAR + W:4:23:0:1 # CLAYMORE + W:4:24:0:1 # ESPADON + W:4:25:0:1 # TWO_HANDED_SWORD + W:4:26:0:1 # FLAMBERGE + W:4:27:0:2 # NO_DACHI + W:4:28:0:1 # EXECUTIOERS_SWORD + W:4:29:0:1 # ZWEIHANDER + W:4:30:0:1 # BLADE_OF_CHAOS + W:4:31:0:1 # DIAMOND_EDGE + W:4:32:0:4 # DOKUBARI + W:4:33:0:2 # + W:4:34:0:2 # + W:4:35:0:2 # + W:4:36:0:2 # + W:4:37:0:2 # + W:4:38:0:2 # + W:4:39:0:2 # + W:4:40:0:2 # 40 + W:4:41:0:2 # + W:4:42:0:2 # + W:4:43:0:2 # + W:4:44:0:2 # + W:4:45:0:2 # + W:4:46:0:2 # + W:4:47:0:2 # + W:4:48:0:2 # + W:4:49:0:2 # + W:4:50:0:2 # 50 + W:4:51:0:2 # + W:4:52:0:2 # + W:4:53:0:2 # + W:4:54:0:2 # + W:4:55:0:2 # + W:4:56:0:2 # + W:4:57:0:2 # + W:4:58:0:2 # + W:4:59:0:2 # + W:4:60:0:2 # 60 + W:4:61:0:2 # + W:4:62:0:2 # + W:4:63:0:2 # + # Skill + S:0:0:500 # SUDE + S:1:0:4000 # NITOURYU + S:2:0:500 # RIDING + + diff -cr hengband-relay/lib/edit/t0000001.txt Hengband-1.7.20/lib/edit/t0000001.txt *** hengband-relay/lib/edit/t0000001.txt Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/lib/edit/t0000001.txt Sun Jan 21 12:01:44 2007 *************** *** 368,374 **** # Quest 27 rewarding (Priest, Bard and ForceTrainer # get The Palantir of Westernesse) ! ?:[AND [EQU $QUEST27 3] [EQU $CLASS Priest Bard ForceTrainer Mindcrafter] ] F:a:BUILDING_0:3 F:@:FLOOR:3:0:0:0:15 --- 368,374 ---- # Quest 27 rewarding (Priest, Bard and ForceTrainer # get The Palantir of Westernesse) ! ?:[AND [EQU $QUEST27 3] [EQU $CLASS Priest Bard ForceTrainer Mindcrafter Enchanter] ] F:a:BUILDING_0:3 F:@:FLOOR:3:0:0:0:15 *************** *** 562,565 **** --- 562,569 ---- # Starting position when coming from quest 33 ?:[EQU $LEAVING_QUEST 33] P:44:109 + + + + diff -cr hengband-relay/lib/edit/t0000002.txt Hengband-1.7.20/lib/edit/t0000002.txt *** hengband-relay/lib/edit/t0000002.txt Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/edit/t0000002.txt Wed Jan 03 18:25:08 2007 *************** *** 336,343 **** 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:$9:N:Temple of Life:Crysania:Human B:9:N:生命魔術の塔:クリサニア:人間 --- 336,343 ---- 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: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:0 B:$9:N:Temple of Life:Crysania:Human B:9:N:生命魔術の塔:クリサニア:人間 *************** *** 345,352 **** 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:$10:N:Thieves Guild:Lardbottom:Hobbit B:10:N:盗賊のギルド:ラードボトム:ホビット --- 345,352 ---- 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:0 ! B:9:M:2:0:0:0:0:0:0:0:0:0:0 B:$10:N:Thieves Guild:Lardbottom:Hobbit B:10:N:盗賊のギルド:ラードボトム:ホビット *************** *** 354,361 **** 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:$11:N:Archers Guild:Trallin:Half-elf B:11:N:アーチャーのギルド:トゥラリン:ハーフエルフ --- 354,361 ---- 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: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:0 B:$11:N:Archers Guild:Trallin:Half-elf B:11:N:アーチャーのギルド:トゥラリン:ハーフエルフ *************** *** 363,370 **** 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:$12:N:Paladins Guild:Langordathur:Human B:12:N:パラディンのギルド:ランゴルダスール:人間 --- 363,370 ---- 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: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:0 B:$12:N:Paladins Guild:Langordathur:Human B:12:N:パラディンのギルド:ランゴルダスール:人間 *************** *** 372,379 **** 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 D:###################################################################################################################################################################################################### D:#---------------------TTTT-------------------------------------------------------------TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT# --- 372,379 ---- 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: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:0 D:###################################################################################################################################################################################################### D:#---------------------TTTT-------------------------------------------------------------TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT# *************** *** 481,484 **** --- 481,486 ---- # Starting position when coming from quest 26 ?:[EQU $LEAVING_QUEST 26] P:43:178 + + diff -cr hengband-relay/lib/edit/t0000003.txt Hengband-1.7.20/lib/edit/t0000003.txt *** hengband-relay/lib/edit/t0000003.txt Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/edit/t0000003.txt Wed Jan 03 17:49:57 2007 *************** *** 287,294 **** 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:$8:N:Tower of Sorcery:Tanistil:Elf B:8:N:賢者の塔:タニスティル:エルフ --- 287,294 ---- 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: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:0 B:$8:N:Tower of Sorcery:Tanistil:Elf B:8:N:賢者の塔:タニスティル:エルフ *************** *** 299,306 **** 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:$9:N:Inner Temple:Eldore:Human B:9:N:寺院:エルドール:人間 --- 299,306 ---- 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:0 ! B:8:M:0:3:0:0:0:0:0:0:0:0:0 B:$9:N:Inner Temple:Eldore:Human B:9:N:寺院:エルドール:人間 *************** *** 308,315 **** 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:$10:N:Thieves Guild:Paliro:Yeek B:10:N:盗賊のギルド:パリロ:イーク --- 308,315 ---- 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:0 ! B:9:M:2:0:0:0:0:0:0:0:0:0:0 B:$10:N:Thieves Guild:Paliro:Yeek B:10:N:盗賊のギルド:パリロ:イーク *************** *** 319,326 **** 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:$11:N:Archers Guild:Angros:Elf B:11:N:アーチャーのギルド:アングロス:エルフ --- 319,326 ---- 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: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:0 B:$11:N:Archers Guild:Angros:Elf B:11:N:アーチャーのギルド:アングロス:エルフ *************** *** 328,335 **** 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:$12:N:Paladins Guild:Vilios:Human B:12:N:パラディンのギルド:ヴィリオス:人間 --- 328,335 ---- 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: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:0 B:$12:N:Paladins Guild:Vilios:Human B:12:N:パラディンのギルド:ヴィリオス:人間 *************** *** 337,344 **** 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:$13:N:Trump Tower:Pelloi:Amberite B:13:N:トランプ魔術の塔:ペロイ:アンバライト --- 337,344 ---- 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: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:0 B:$13:N:Trump Tower:Pelloi:Amberite B:13:N:トランプ魔術の塔:ペロイ:アンバライト *************** *** 346,353 **** 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 # Town Layout D:###################################################################################################################################################################################################### --- 346,353 ---- 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:0 ! B:13:M:0:0:0:0:0:2:0:0:0:0:0 # Town Layout D:###################################################################################################################################################################################################### *************** *** 444,446 **** --- 444,452 ---- # Starting position when coming from quest 30 ?:[EQU $LEAVING_QUEST 30] P:34:83 + + + + + + diff -cr hengband-relay/lib/edit/t0000004.txt Hengband-1.7.20/lib/edit/t0000004.txt *** hengband-relay/lib/edit/t0000004.txt Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/edit/t0000004.txt Wed Jan 03 18:42:16 2007 *************** *** 194,201 **** 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:$8:N:Wizards Tower:Valceronwe:Sprite B:8:N:賢者の塔:ヴァルセロン:妖精 --- 194,201 ---- 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: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:$8:N:Wizards Tower:Valceronwe:Sprite B:8:N:賢者の塔:ヴァルセロン:妖精 *************** *** 205,212 **** 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:$9:N:Inner Temple:Kabir:Dwarf B:9:N:寺院:カビー:ドワーフ --- 205,212 ---- 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: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:0 B:$9:N:Inner Temple:Kabir:Dwarf B:9:N:寺院:カビー:ドワーフ *************** *** 214,221 **** 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:$10:N:Thieves Den:Molvrae:Dark Elf B:10:N:盗賊のアジト:モルブラエ:ダーク・エルフ --- 214,221 ---- 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: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:0 B:$10:N:Thieves Den:Molvrae:Dark Elf B:10:N:盗賊のアジト:モルブラエ:ダーク・エルフ *************** *** 223,230 **** 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:$11:N:Archers Tavern:Celegail:Elf B:11:N:アーチャーの酒場:ケレガイル:エルフ --- 223,230 ---- 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: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:0 B:$11:N:Archers Tavern:Celegail:Elf B:11:N:アーチャーの酒場:ケレガイル:エルフ *************** *** 232,239 **** 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:$12:N:Paladins Sanctum:Calpirosse:Half-Elf B:12:N:パラディンの聖所:カルパイロス:ハーフエルフ --- 232,239 ---- 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: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:0 B:$12:N:Paladins Sanctum:Calpirosse:Half-Elf B:12:N:パラディンの聖所:カルパイロス:ハーフエルフ *************** *** 241,248 **** 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:$13:N:Trump Tower:Colleuse:Amberite B:13:N:トランプ魔術の塔:コレウス:アンバライト --- 241,248 ---- 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: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:0 B:$13:N:Trump Tower:Colleuse:Amberite B:13:N:トランプ魔術の塔:コレウス:アンバライト *************** *** 250,259 **** 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 # Town Layout D:###################################################################################################################################################################################################### --- 250,259 ---- 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: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:0 ! B:$13:M:0:0:0:0:0:2:0:0:0:0:0 ! B:13:M:0:0:0:0:0:2:0:0:0:0:0 # Town Layout D:###################################################################################################################################################################################################### *************** *** 338,341 **** --- 338,344 ---- # Starting position when coming from quest 23 ?:[EQU $LEAVING_QUEST 23] P:63:102 + + + diff -cr hengband-relay/lib/edit/t0000005.txt Hengband-1.7.20/lib/edit/t0000005.txt *** hengband-relay/lib/edit/t0000005.txt Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/edit/t0000005.txt Wed Jan 03 18:53:53 2007 *************** *** 143,150 **** 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:$14:N:Chaos Tower:Xeno:Beastman B:14:N:カオスの塔:ゼノ:獣人 --- 143,150 ---- 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:0 ! B:8:M:0:2:0:0:0:0:0:0:0:0:0 B:$14:N:Chaos Tower:Xeno:Beastman B:14:N:カオスの塔:ゼノ:獣人 *************** *** 154,161 **** 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:$15:N:Nature Tower:Josh:Elf B:15:N:自然魔術の塔:ジョッシュ:エルフ --- 154,161 ---- 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:0 ! B:14:M:0:0:0:2:0:0:0:0:0:0:0 B:$15:N:Nature Tower:Josh:Elf B:15:N:自然魔術の塔:ジョッシュ:エルフ *************** *** 163,170 **** 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 # Town Layout --- 163,170 ---- 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:0 ! B:15:M:0:0:2:0:0:0:0:0:0:0:0 # Town Layout *************** *** 252,254 **** --- 252,255 ---- # Starting position when coming from quest 12 ?:[EQU $LEAVING_QUEST 12] P:9:72 + diff -cr hengband-relay/lib/edit/t_lite.txt Hengband-1.7.20/lib/edit/t_lite.txt *** hengband-relay/lib/edit/t_lite.txt Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/edit/t_lite.txt Sun Jan 21 12:02:19 2007 *************** *** 302,308 **** # Quest 27 rewarding (Priest, Bard and ForceTrainer # get The Palantir of Westernesse) ! ?:[AND [EQU $QUEST27 3] [EQU $CLASS Priest Bard ForceTrainer Mindcrafter] ] F:b:BUILDING_1:3:0:0:0:0:NONE:15 F:!:FLOOR:3:0:0:0:15 --- 302,308 ---- # Quest 27 rewarding (Priest, Bard and ForceTrainer # get The Palantir of Westernesse) ! ?:[AND [EQU $QUEST27 3] [EQU $CLASS Priest Bard ForceTrainer Mindcrafter Enchanter] ] F:b:BUILDING_1:3:0:0:0:0:NONE:15 F:!:FLOOR:3:0:0:0:15 *************** *** 564,571 **** 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:$7:N:Temple of Life:Crysania:Human B:7:N:生命魔術の塔:クリサニア:人間 --- 564,571 ---- 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: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:0 B:$7:N:Temple of Life:Crysania:Human B:7:N:生命魔術の塔:クリサニア:人間 *************** *** 582,589 **** 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:$9:N:Archers Guild:Trallin:Half-elf B:9:N:アーチャーのギルド:トゥラリン:ハーフエルフ --- 582,589 ---- 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: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:0 B:$9:N:Archers Guild:Trallin:Half-elf B:9:N:アーチャーのギルド:トゥラリン:ハーフエルフ *************** *** 591,598 **** 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:$10:N:Paladins Guild:Langordathur:Human B:10:N:パラディンのギルド:ランゴルダスール:人間 --- 591,598 ---- 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: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:0 B:$10:N:Paladins Guild:Langordathur:Human B:10:N:パラディンのギルド:ランゴルダスール:人間 *************** *** 600,607 **** 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:$11:N:Tower of Sorcery:Tanistil:Elf B:11:N:仙術の塔:タニスティル:エルフ --- 600,607 ---- 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: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:0 B:$11:N:Tower of Sorcery:Tanistil:Elf B:11:N:仙術の塔:タニスティル:エルフ *************** *** 629,636 **** 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 --- 629,636 ---- 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: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: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 diff -cr hengband-relay/lib/file/news_j.txt Hengband-1.7.20/lib/file/news_j.txt *** hengband-relay/lib/file/news_j.txt Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/file/news_j.txt Thu Feb 22 21:17:28 2007 *************** *** 1,6 **** *************************************** ! ** 変愚蛮怒 1.7.0 ** *************************************** Based on Moria: Copyright (c) 1985 Robert Alan Koeneke --- 1,6 ---- *************************************** ! ** 変愚蛮怒 1.7.20 ** *************************************** Based on Moria: Copyright (c) 1985 Robert Alan Koeneke diff -cr hengband-relay/lib/pref/pref-opt.prf Hengband-1.7.20/lib/pref/pref-opt.prf *** hengband-relay/lib/pref/pref-opt.prf Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/pref/pref-opt.prf Thu Dec 21 21:51:59 2006 *************** *** 76,82 **** Y:empty_levels X:bound_walls_perm Y:last_words ! Y:send_score X:allow_debug_opts ##### Disturbance ##### --- 76,82 ---- Y:empty_levels X:bound_walls_perm Y:last_words ! #X:send_score X:allow_debug_opts ##### Disturbance ##### diff -cr hengband-relay/lib/pref/xtra-new.prf Hengband-1.7.20/lib/pref/xtra-new.prf *** hengband-relay/lib/pref/xtra-new.prf Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/pref/xtra-new.prf Sat Dec 23 22:18:06 2006 *************** *** 145,148 **** --- 145,152 ---- R:0:0x93/0 ?:[EQU $CLASS Ninja] R:0:0x95/0 + ?:[EQU $CLASS Enchanter] + R:0:0x98/0 + + diff -cr hengband-relay/lib/pref/xtra-xxx.prf Hengband-1.7.20/lib/pref/xtra-xxx.prf *** hengband-relay/lib/pref/xtra-xxx.prf Sat Sep 30 22:12:40 2006 --- Hengband-1.7.20/lib/pref/xtra-xxx.prf Sat Dec 23 22:19:13 2006 *************** *** 138,140 **** --- 138,143 ---- R:0:0xAD/0 ?:[EQU $CLASS Ninja] R:0:0xAA/0 + ?:[EQU $CLASS Enchanter] + R:0:0xAC/0 + Binary files hengband-relay/lib/save/PLAYER and Hengband-1.7.20/lib/save/PLAYER differ Only in Hengband-1.7.20/lib/user: playrecord-PLAYER.txt Only in Hengband-1.7.20/lib/xtra: replay diff -cr hengband-relay/lib/xtra/sound/sound.cfg Hengband-1.7.20/lib/xtra/sound/sound.cfg *** hengband-relay/lib/xtra/sound/sound.cfg Fri May 28 01:05:36 2004 --- Hengband-1.7.20/lib/xtra/sound/sound.cfg Sat Jan 20 15:26:26 2007 *************** *** 77,80 **** --- 77,81 ---- unused = explode = glass = + wanted = wanted.wav diff -cr hengband-relay/src/artifact.c Hengband-1.7.20/src/artifact.c *** hengband-relay/src/artifact.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/artifact.c Sun Dec 24 01:28:55 2006 *************** *** 1671,1676 **** --- 1671,1677 ---- artifact_bias = BIAS_MAGE; break; case CLASS_PRIEST: + case CLASS_ENCHANTER: artifact_bias = BIAS_PRIESTLY; break; case CLASS_ROGUE: *************** *** 3165,3167 **** --- 3166,3171 ---- /* Drop the artifact from heaven */ return drop_near(q_ptr, -1, y, x) ? TRUE : FALSE; } + + + diff -cr hengband-relay/src/avatar.c Hengband-1.7.20/src/avatar.c *** hengband-relay/src/avatar.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/avatar.c Sat Dec 23 17:49:52 2006 *************** *** 181,186 **** --- 181,188 ---- case REALM_CRUSADE: if (virtue_number(V_JUSTICE)) return V_HONOUR; else return V_JUSTICE; + case REALM_ENCHANTMENT: + return 0; }; return 0; *************** *** 216,221 **** --- 218,224 ---- p_ptr->vir_types[i++] = V_ENCHANT; break; case CLASS_PRIEST: + case CLASS_ENCHANTER: p_ptr->vir_types[i++] = V_FAITH; p_ptr->vir_types[i++] = V_TEMPERANCE; break; *************** *** 591,593 **** --- 594,598 ---- fprintf(OutFile, "\n"); } } + + diff -cr hengband-relay/src/birth.c Hengband-1.7.20/src/birth.c *** hengband-relay/src/birth.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/birth.c Sat Feb 17 22:14:41 2007 *************** *** 1821,1828 **** "鏡使いは、魔力の込められた鏡を作り出して、それを触媒として攻撃を行なうことができる鏡魔法を使います。鏡使いは鏡の上で実力を発揮し、鏡の上では素早いテレポートが可能となります。魔法の鏡は、レベルによって一度に制御できる数が制限されます。鏡魔法に必要な能力は知能です。", ! "忍者は暗闇に潜む恐るべき暗殺者であり、光源を持たずに行動し、相手の不意をつき一撃で息の根を止めます。また、相手を惑わすための忍術も身につけます。罠やドアを見つける能力に優れ、罠の解除や鍵開けに熟達しています。軽装を好み、重い鎧や武器を装備すると著しく動きが制限され、また、盾を装備しようとはしません。軽装ならば、レベルが上がるにつれより速くより静かに行動できます。さらに忍者は恐怖せず、成長すれば毒がほとんど効かなくなり、透明なものを見ることができるようになります。忍術に必要な能力は器用さです。" #else "A Warrior is a hack-and-slash character, who solves most of his problems by cutting them to pieces, but will occasionally fall back on the help of a magical device. Unfortunately, many high-level devices may be forever beyond their use.", --- 1821,1830 ---- "鏡使いは、魔力の込められた鏡を作り出して、それを触媒として攻撃を行なうことができる鏡魔法を使います。鏡使いは鏡の上で実力を発揮し、鏡の上では素早いテレポートが可能となります。魔法の鏡は、レベルによって一度に制御できる数が制限されます。鏡魔法に必要な能力は知能です。", ! "忍者は暗闇に潜む恐るべき暗殺者であり、光源を持たずに行動し、相手の不意をつき一撃で息の根を止めます。また、相手を惑わすための忍術も身につけます。罠やドアを見つける能力に優れ、罠の解除や鍵開けに熟達しています。軽装を好み、重い鎧や武器を装備すると著しく動きが制限され、また、盾を装備しようとはしません。軽装ならば、レベルが上がるにつれより速くより静かに行動できます。さらに忍者は恐怖せず、成長すれば毒がほとんど効かなくなり、透明なものを見ることができるようになります。忍術に必要な能力は器用さです。", + "呪術師はメイジやプリーストとは異なる流派の魔法使いです。呪術師は吟遊詩人より優れた格闘能力をもち、また魔法を魔法戦士と同等以上にうまくつかえます。体力が極低な代わりに回避能力を持ち、攻撃力が一定以下の攻撃を(常にというわけではありませんが)無力化できます。重すぎる装備は、回避を制限するため好みませんが、忍者ほど厳しくはありません。高いレベルや耐久力、大きなヒットダイスを持つ種族は回避を容易にします。魔法に必要な能力値は賢さです。" + #else "A Warrior is a hack-and-slash character, who solves most of his problems by cutting them to pieces, but will occasionally fall back on the help of a magical device. Unfortunately, many high-level devices may be forever beyond their use.", *************** *** 1878,1883 **** --- 1880,1887 ---- "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." + + "Enchanters are magician." #endif }; *************** *** 1961,1969 **** "破邪は「正義」の魔法です。直接敵を傷つける魔法が多く含まれ、特に邪悪な敵に対する力は恐るべきものがあります。しかし、善良な敵にはあまり効果がありません。", "歌集は、歌によって効果を発揮する魔法です。魔法と同様、使った時に効果のあるものと、歌い続けることによって持続して効果を発揮するものがあります。後者の場合は、MPの続く限り効果を発揮することができますが、同時に歌える歌は1つだけという制限もあります。", ! "武芸の書は、様々な戦闘の技について書かれています。この本は技を覚えるときに読む必要がありますが、一度覚えた技は使うのに本を持つ必要はありません。技を使うときには必ず武器を装備していなければいけません。" #else --- 1965,1976 ---- "破邪は「正義」の魔法です。直接敵を傷つける魔法が多く含まれ、特に邪悪な敵に対する力は恐るべきものがあります。しかし、善良な敵にはあまり効果がありません。", + "呪術は呪術師専用の領域です。相手を弱化させる魔法に優れ、豊富な攻撃手段を持ちますが、自分を強化する魔法はまったくありません。ユニークモンスターには、一部の状態異常魔法がまったく効力を示しません。", + "歌集は、歌によって効果を発揮する魔法です。魔法と同様、使った時に効果のあるものと、歌い続けることによって持続して効果を発揮するものがあります。後者の場合は、MPの続く限り効果を発揮することができますが、同時に歌える歌は1つだけという制限もあります。", ! "武芸の書は、様々な戦闘の技について書かれています。この本は技を覚えるときに読む必要がありますが、一度覚えた技は使うのに本を持つ必要はありません。技を使うときには必ず武器を装備していなければいけません。", ! #else *************** *** 1987,1992 **** --- 1994,2001 ---- "Crusade is a magic of 'Justice'. It includes damage spells, which are greatly effective against foul and evil monsters, but have poor effects against good monsters.", + "", + "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." *************** *** 2006,2013 **** "直接戦闘の補助に優れています", "攻撃と防御の両面に優れています", "邪悪な怪物に対する攻撃に優れています", "様々な魔法効果を持った歌を歌います", ! "打撃攻撃に特殊能力を付加します" #else "Good at detection and healing.", "Utility and protective spells.", --- 2015,2023 ---- "直接戦闘の補助に優れています", "攻撃と防御の両面に優れています", "邪悪な怪物に対する攻撃に優れています", + "状態異常攻撃に優れています", "様々な魔法効果を持った歌を歌います", ! "打撃攻撃に特殊能力を付加します", #else "Good at detection and healing.", "Utility and protective spells.", *************** *** 2019,2026 **** "Support for melee fighting.", "Good at both offence and defence.", "Destroys evil creatures.", "Song with magical effects.", ! "Special attacks on melee." #endif }; --- 2029,2037 ---- "Support for melee fighting.", "Good at both offence and defence.", "Destroys evil creatures.", + "There is no saport", "Song with magical effects.", ! "Special attacks on melee.", #endif }; *************** *** 2136,2141 **** --- 2147,2157 ---- (*count)++; auto_select = REALM_CRUSADE; } + if (choices & CH_ENCHANTMENT) + { + (*count)++; + auto_select = REALM_ENCHANTMENT; + } if (choices & CH_MUSIC) { (*count)++; *************** *** 2147,2152 **** --- 2163,2169 ---- auto_select = REALM_HISSATSU; } + clear_from(10); /* Auto-select the realm */ *************** *** 3722,3727 **** --- 3739,3750 ---- { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR }, { TV_SWORD, SV_DAGGER } }, + { + /*ENCHANTER*/ + { TV_ENCHANTMENT_BOOK, 0 }, /* Hack: for realm1 book */ + { TV_DEATH_BOOK, 0 }, /* Hack: for realm2 book */ + { TV_SWORD, SV_SHORT_SWORD} + } }; *************** *** 6571,6574 **** --- 6594,6611 ---- } } } + + + + + + + + + + + + + + diff -cr hengband-relay/src/bldg.c Hengband-1.7.20/src/bldg.c *** hengband-relay/src/bldg.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/bldg.c Thu Jan 04 15:19:01 2007 *************** *** 3559,3564 **** --- 3559,3566 ---- #ifdef JP put_str(format("あなたの現在のAC: %3d", iAC), row++, 0); put_str(format("ダメージ軽減率 : %3d%%", protection), row++, 0); + if(p_ptr->pclass == CLASS_ENCHANTER) + put_str(format("回避力 : %3d", p_ptr->kawasimi), row++, 0); row++; put_str("敵のレベル :", row + 0, 0); *************** *** 3567,3572 **** --- 3569,3576 ---- #else put_str(format("Your current AC : %3d", iAC), row++, 0); put_str(format("Protection rate : %3d%%", protection), row++, 0); + if(p_ptr->pclass == CLASS_ENCHANTER) + put_str(format("Evade skill : %3d", p_ptr->kawasimi), row++, 0); row++; put_str("Level of Monster:", row + 0, 0); *************** *** 5209,5211 **** --- 5213,5218 ---- /* Nope */ return 0; } + + + diff -cr hengband-relay/src/cave.c Hengband-1.7.20/src/cave.c *** hengband-relay/src/cave.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/cave.c Tue Feb 27 21:43:46 2007 *************** *** 1275,1282 **** /* Clear-attr */ /* Do nothing */ } ! else if ((r_ptr->flags1 & RF1_ATTR_MULTI) && !use_graphics) ! { /* Multi-hued attr */ if (r_ptr->flags2 & RF2_ATTR_ANY) *ap = randint1(15); else switch (randint1(7)) --- 1275,1282 ---- /* Clear-attr */ /* Do nothing */ } ! else if ((r_ptr->flags1 & RF1_ATTR_MULTI) && ! !(use_graphics && (*cp & 0x80))) { /* Multi-hued attr */ if (r_ptr->flags2 & RF2_ATTR_ANY) *ap = randint1(15); else switch (randint1(7)) *************** *** 1812,1817 **** --- 1812,1818 ---- object_desc(buf, o_ptr, (OD_NO_FLAVOR | OD_OMIT_PREFIX | OD_NAME_ONLY)); attr = tval_to_attr[o_ptr->tval % 128]; + if(!attr) attr = 15; if (p_ptr->image) { *************** *** 3006,3012 **** for (i = 1; i < m_max; i++) { m_ptr = &m_list[i]; ! r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 3007,3013 ---- for (i = 1; i < m_max; i++) { m_ptr = &m_list[i]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 5087,5089 **** --- 5088,5092 ---- /* Redraw map */ p_ptr->redraw |= (PR_MAP); } + + Only in Hengband-1.7.20/src: cave.c.orig diff -cr hengband-relay/src/cmd1.c Hengband-1.7.20/src/cmd1.c *** hengband-relay/src/cmd1.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/cmd1.c Tue Feb 27 21:43:47 2007 *************** *** 220,226 **** { int mult = 10; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; u32b flgs[TR_FLAG_SIZE]; --- 220,226 ---- { int mult = 10; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; u32b flgs[TR_FLAG_SIZE]; *************** *** 1712,1718 **** static void touch_zap_player(monster_type *m_ptr) { int aura_damage = 0; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; if (r_ptr->flags2 & RF2_AURA_FIRE) { --- 1712,1718 ---- static void touch_zap_player(monster_type *m_ptr) { int aura_damage = 0; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (r_ptr->flags2 & RF2_AURA_FIRE) { *************** *** 1801,1807 **** int k, bonus, chance; int n_weight = 0; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; char m_name[80]; int dss, ddd; --- 1801,1807 ---- int k, bonus, chance; int n_weight = 0; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; char m_name[80]; int dss, ddd; *************** *** 1978,1984 **** cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Access the weapon */ object_type *o_ptr = &inventory[INVEN_RARM + hand]; --- 1978,1984 ---- cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Access the weapon */ object_type *o_ptr = &inventory[INVEN_RARM + hand]; *************** *** 2862,2868 **** monster_desc(m_name, m_ptr, 0); /* Hack -- Get new race */ ! r_ptr = &r_info[m_ptr->r_idx]; } } else if (o_ptr->name1 == ART_G_HAMMER) --- 2862,2868 ---- monster_desc(m_name, m_ptr, 0); /* Hack -- Get new race */ ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; } } else if (o_ptr->name1 == ART_G_HAMMER) *************** *** 3061,3067 **** cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; char m_name[80]; /* Disturb the player */ --- 3061,3067 ---- cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; char m_name[80]; /* Disturb the player */ *************** *** 3883,3889 **** /* Hack -- attack monsters */ if (c_ptr->m_idx && (m_ptr->ml || p_can_enter || p_can_kill_walls)) { ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Attack -- only if we can see it OR it is not in a wall */ if (!is_hostile(m_ptr) && --- 3883,3889 ---- /* Hack -- attack monsters */ if (c_ptr->m_idx && (m_ptr->ml || p_can_enter || p_can_kill_walls)) { ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Attack -- only if we can see it OR it is not in a wall */ if (!is_hostile(m_ptr) && Only in Hengband-1.7.20/src: cmd1.c.orig diff -cr hengband-relay/src/cmd2.c Hengband-1.7.20/src/cmd2.c *** hengband-relay/src/cmd2.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/cmd2.c Tue Feb 27 21:43:47 2007 *************** *** 2961,2967 **** { int mult = 10; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; u32b flgs[TR_FLAG_SIZE]; --- 2961,2967 ---- { int mult = 10; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; u32b flgs[TR_FLAG_SIZE]; *************** *** 3553,3559 **** cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Check the visibility */ visible = m_ptr->ml; --- 3553,3559 ---- cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Check the visibility */ visible = m_ptr->ml; *************** *** 4142,4148 **** cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Check the visibility */ visible = m_ptr->ml; --- 4142,4148 ---- cave_type *c_ptr = &cave[y][x]; monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Check the visibility */ visible = m_ptr->ml; Only in Hengband-1.7.20/src: cmd2.c.orig diff -cr hengband-relay/src/cmd3.c Hengband-1.7.20/src/cmd3.c *** hengband-relay/src/cmd3.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/cmd3.c Sun Dec 24 20:18:26 2006 *************** *** 920,925 **** --- 920,926 ---- (o_ptr->tval == TV_CRAFT_BOOK) || (o_ptr->tval == TV_DAEMON_BOOK) || (o_ptr->tval == TV_CRUSADE_BOOK) || + (o_ptr->tval == TV_ENCHANTMENT_BOOK) || (o_ptr->tval == TV_MUSIC_BOOK)) { if (o_ptr->sval > 1) *************** *** 2278,2282 **** --- 2279,2284 ---- /* Re-display the identity */ prt(buf, 0, 0); } + diff -cr hengband-relay/src/cmd5.c Hengband-1.7.20/src/cmd5.c *** hengband-relay/src/cmd5.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/cmd5.c Tue Feb 27 21:43:47 2007 *************** *** 115,120 **** --- 115,121 ---- if (((use_realm) != p_ptr->realm1) && ((use_realm) != p_ptr->realm2) && (p_ptr->pclass != CLASS_SORCERER) && (p_ptr->pclass != CLASS_RED_MAGE)) return FALSE; if (((p_ptr->pclass == CLASS_SORCERER) || (p_ptr->pclass == CLASS_RED_MAGE)) && !is_magic(use_realm)) return FALSE; if ((p_ptr->pclass == CLASS_RED_MAGE) && ((use_realm) != REALM_ARCANE) && (sval > 1)) return FALSE; + if (((p_ptr->pclass == CLASS_RED_MAGE) || (p_ptr->pclass == CLASS_SORCERER)) && ((use_realm) == REALM_ENCHANTMENT)) return FALSE; /* Assume cancelled */ *sn = (-1); *************** *** 1611,1617 **** void check_pets_num_and_align(monster_type *m_ptr, bool inc) { s32b old_friend_align = friend_align; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; if (inc) { --- 1612,1618 ---- void check_pets_num_and_align(monster_type *m_ptr, bool inc) { s32b old_friend_align = friend_align; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (inc) { *************** *** 1646,1652 **** m_ptr = &m_list[m_idx]; if (!m_ptr->r_idx) continue; ! r_ptr = &r_info[m_ptr->r_idx]; if (is_pet(m_ptr)) { --- 1647,1653 ---- m_ptr = &m_list[m_idx]; if (!m_ptr->r_idx) continue; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (is_pet(m_ptr)) { *************** *** 1891,1897 **** int sn = 0, sy = 0, sx = 0; char m_name[80]; monster_type *m_ptr = &m_list[p_ptr->riding]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; bool fall_dam = FALSE; if (!p_ptr->riding) return FALSE; --- 1892,1898 ---- int sn = 0, sy = 0, sx = 0; char m_name[80]; monster_type *m_ptr = &m_list[p_ptr->riding]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; bool fall_dam = FALSE; if (!p_ptr->riding) return FALSE; *************** *** 2941,2943 **** --- 2942,2945 ---- } } } + Only in Hengband-1.7.20/src: cmd5.c.orig diff -cr hengband-relay/src/cmd6.c Hengband-1.7.20/src/cmd6.c *** hengband-relay/src/cmd6.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/cmd6.c Tue Feb 27 21:43:47 2007 *************** *** 5201,5207 **** /* Ignore "dead" monsters */ if (!m_ptr->r_idx) continue; ! r_ptr = &r_info[m_ptr->r_idx]; if(r_ptr->flags1 & RF1_UNIQUE) { --- 5201,5207 ---- /* Ignore "dead" monsters */ if (!m_ptr->r_idx) continue; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if(r_ptr->flags1 & RF1_UNIQUE) { Only in Hengband-1.7.20/src: cmd6.c.orig diff -cr hengband-relay/src/defines.h Hengband-1.7.20/src/defines.h *** hengband-relay/src/defines.h Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/defines.h Tue Feb 27 21:47:28 2007 *************** *** 57,63 **** #define FAKE_VERSION 0 #define FAKE_VER_MAJOR 11 #define FAKE_VER_MINOR 7 ! #define FAKE_VER_PATCH 0 /* --- 57,63 ---- #define FAKE_VERSION 0 #define FAKE_VER_MAJOR 11 #define FAKE_VER_MINOR 7 ! #define FAKE_VER_PATCH 20 /* *************** *** 195,201 **** /* * Maximum number of player "class" types (see "table.c", etc) */ ! #define MAX_CLASS 27 #define MAX_SEIKAKU 12 --- 195,201 ---- /* * Maximum number of player "class" types (see "table.c", etc) */ ! #define MAX_CLASS 28 #define MAX_SEIKAKU 12 *************** *** 717,722 **** --- 717,726 ---- #define CH_DAEMON 0x100 #define CH_CRUSADE 0x200 + /*呪術*/ + #define CH_ENCHANTMENT 0x400 + + #define CH_MUSIC 0x10000 #define CH_HISSATSU 0x20000 *************** *** 732,741 **** #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 --- 736,749 ---- #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 REALM_ENCHANTMENT 11 ! ! #define MAX_MAGIC 11 #define MIN_TECHNIC 16 #define REALM_MUSIC 16 #define REALM_HISSATSU 17 *************** *** 905,910 **** --- 913,921 ---- #define CLASS_MIRROR_MASTER 25 #define CLASS_NINJA 26 + /*呪術師*/ + #define CLASS_ENCHANTER 27 + #define SEIKAKU_FUTUU 0 #define SEIKAKU_CHIKARA 1 #define SEIKAKU_KIREMONO 2 *************** *** 1906,1911 **** --- 1917,1924 ---- #define TV_CRAFT_BOOK 97 #define TV_DAEMON_BOOK 98 #define TV_CRUSADE_BOOK 99 + /*呪術*/ + #define TV_ENCHANTMENT_BOOK 100 #define TV_MUSIC_BOOK 105 #define TV_HISSATSU_BOOK 106 #define TV_GOLD 127 /* Gold can only be picked up by players */ *************** *** 3051,3058 **** #define GF_CRUSADE 114 #define GF_STASIS_EVIL 115 #define GF_WOUNDS 116 ! #define MAX_GF 117 /* * Some things which induce learning --- 3064,3075 ---- #define GF_CRUSADE 114 #define GF_STASIS_EVIL 115 #define GF_WOUNDS 116 + #define GF_DRAINMANA 117 + #define GF_AWAY_ULT 118 + #define GF_ILLNESS 119 + #define GF_HELMINTH 120 ! #define MAX_GF 121 /* * Some things which induce learning *************** *** 4489,4499 **** #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 */ /* * Mega-Hack -- maximum known sounds */ ! #define SOUND_MAX 66 #define MAX_VIRTUE 18 --- 4506,4517 ---- #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 */ + #define SOUND_WANTED 66 /* 賞金首 */ /* * Mega-Hack -- maximum known sounds */ ! #define SOUND_MAX 67 #define MAX_VIRTUE 18 *************** *** 5357,5364 **** #define SAVE_MON_MFLAG2 0x00002000 #define SAVE_MON_NICKNAME 0x00004000 #define SAVE_MON_PARENT 0x00008000 ! ! /* * Constant for kinds of mimic */ --- 5375,5385 ---- #define SAVE_MON_MFLAG2 0x00002000 #define SAVE_MON_NICKNAME 0x00004000 #define SAVE_MON_PARENT 0x00008000 ! /*魔力吸虫*/ ! #define SAVE_MON_DRAINMANA 0x00010000 ! #define SAVE_MON_HELMINTH 0x00020000 ! //EGOMON ! #define SAVE_MON_EGO 0x00040000 /* * Constant for kinds of mimic */ *************** *** 5452,5459 **** #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 #define MON_CSLEEP(M_PTR) ((M_PTR)->mtimed[MTIMED_CSLEEP]) #define MON_FAST(M_PTR) ((M_PTR)->mtimed[MTIMED_FAST]) --- 5473,5483 ---- #define MTIMED_CONFUSED 4 /* Monster is confused */ #define MTIMED_MONFEAR 5 /* Monster is afraid */ #define MTIMED_INVULNER 6 /* Monster is temporarily invulnerable */ + /*魔力吸*/ + #define MTIMED_DRAINMANA 7 + #define MTIMED_HELMINTH 8 ! #define MAX_MTIMED 9 #define MON_CSLEEP(M_PTR) ((M_PTR)->mtimed[MTIMED_CSLEEP]) #define MON_FAST(M_PTR) ((M_PTR)->mtimed[MTIMED_FAST]) *************** *** 5462,5467 **** --- 5486,5494 ---- #define MON_CONFUSED(M_PTR) ((M_PTR)->mtimed[MTIMED_CONFUSED]) #define MON_MONFEAR(M_PTR) ((M_PTR)->mtimed[MTIMED_MONFEAR]) #define MON_INVULNER(M_PTR) ((M_PTR)->mtimed[MTIMED_INVULNER]) + /*魔力吸虫*/ + #define MON_DRAINMANA(M_PTR) ((M_PTR)->mtimed[MTIMED_DRAINMANA]) + #define MON_HELMINTH(M_PTR) ((M_PTR)->mtimed[MTIMED_HELMINTH]) /* * Bit flags for screen_object() Only in Hengband-1.7.20/src: defines.h.orig Only in Hengband-1.7.20/src: defines.txt diff -cr hengband-relay/src/do-spell.c Hengband-1.7.20/src/do-spell.c *** hengband-relay/src/do-spell.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/do-spell.c Tue Feb 27 21:43:47 2007 *************** *** 4145,4150 **** --- 4145,4159 ---- { int dam = p_ptr->chp; int rad = 2; + if(p_ptr->pclass == CLASS_ENCHANTER) + { + if(p_ptr->chp == 2) + dam = p_ptr->maxkawasimi * 3 / 2; + if(p_ptr->chp == 1) + dam = p_ptr->maxkawasimi * 3 / 4; + else + dam = p_ptr->maxkawasimi * 3 / 10; + } if (info) return info_damage(0, 0, dam); *************** *** 10183,10188 **** --- 10192,10198 ---- } + static cptr do_hissatsu_spell(int spell, int mode) { bool name = (mode == SPELL_NAME) ? TRUE : FALSE; *************** *** 10864,10870 **** /* Hack -- attack monsters */ if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT))) { ! if (!monster_living(&r_info[m_ptr->r_idx])) { char m_name[80]; --- 10874,10880 ---- /* Hack -- attack monsters */ if (c_ptr->m_idx && (m_ptr->ml || cave_have_flag_bold(y, x, FF_PROJECT))) { ! if (!monster_living(m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx])) { char m_name[80]; *************** *** 11032,11038 **** m_ptr = &m_list[m_idx]; /* Monster cannot move back? */ ! if (!monster_can_enter(ny, nx, &r_info[m_ptr->r_idx], 0)) { /* -more- */ if (i < 2) msg_print(NULL); --- 11042,11048 ---- m_ptr = &m_list[m_idx]; /* Monster cannot move back? */ ! if (!monster_can_enter(ny, nx, m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx], 0)) { /* -more- */ if (i < 2) msg_print(NULL); *************** *** 11395,11400 **** --- 11405,12312 ---- } + static cptr do_enchantment_spell(int spell, int mode) + { + bool name = (mode == SPELL_NAME) ? TRUE : FALSE; + bool desc = (mode == SPELL_DESC) ? TRUE : FALSE; + bool info = (mode == SPELL_INFO) ? TRUE : FALSE; + bool cast = (mode == SPELL_CAST) ? TRUE : FALSE; + + int dir; + int plev = p_ptr->lev; + + switch (spell) + { + case 0: + #ifdef JP + if (name) return "まやかし"; + if (desc) return "モンスター1体を混乱させる。抵抗されると無効。"; + #else + if (name) return "Trick"; + if (desc) return "Attempts to confuse a monster."; + #endif + + { + int power = (plev * 3) / 2; + + if (info) return info_power(power); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + confuse_monster(dir, power); + } + } + break; + + case 1: + #ifdef JP + if (name) return "恐怖"; + if (desc) return "モンスター1体を恐怖さる。抵抗されると無効。"; + #else + if (name) return "Scare"; + if (desc) return "Attempts to scare and stun a monster."; + #endif + + { + int power = (plev * 3) / 2; + + if (info) return info_power(power); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fear_monster(dir, power); + } + } + break; + + case 2: + #ifdef JP + if (name) return "軽傷"; + if (desc) return "1体のモンスターに小ダメージを与える。抵抗されると無効。"; + #else + if (name) return "Cause Light Wounds"; + if (desc) return "Wounds a monster a little unless resisted."; + #endif + + { + int dice = 3 + plev / 5; + int sides = plev / 10 + 5; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_ball_hide(GF_WOUNDS, dir, damroll(dice, sides), 0); + } + } + break; + + case 3: + #ifdef JP + if (name) return "閃光"; + if (desc) return "光源が照らしている範囲か部屋全体を永久に明るくする。"; + #else + if (name) return "Call Light"; + if (desc) return "Lights up nearby area and the inside of a room permanently."; + #endif + + { + int dice = 2; + int sides = plev / 2; + int rad = plev / 10 + 1; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + lite_area(damroll(dice, sides), rad); + } + } + break; + + case 4: + #ifdef JP + if (name) return "略奪の矢"; + if (desc) return "貧弱な生命力吸収のボルトを放つ。"; + #else + if (name) return "Drain Bolt"; + if (desc) return "Fires a bolt of drain."; + #endif + + { + int dice = 3 + ((plev - 1) / 5); + int sides = 5; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_bolt(GF_OLD_DRAIN, dir, damroll(dice, sides)); + } + } + break; + + case 5: + #ifdef JP + if (name) return "解呪"; + if (desc) return "アイテムにかかった弱い呪いを解除する。また、少し回復する"; + #else + if (name) return "Remove Curse"; + if (desc) return "Removes normal curses from equipped items."; + #endif + + { + if (cast) + { + if (remove_curse()) + { + if(p_ptr->inside_arena) + { + msg_print("アリーナが呪いを吸収した!"); + break; + } + #ifdef JP + msg_print("この呪いはひどい味だ!"); + #else + msg_print("You feel as if someone is watching over you."); + #endif + p_ptr->csp += plev / 2; + if (p_ptr->csp >= p_ptr->msp) + { + p_ptr->csp = p_ptr->msp; + p_ptr->csp_frac = 0; + } + + /* Redraw mana */ + p_ptr->redraw |= (PR_MANA); + hp_player(100); + } + } + } + break; + + case 6: + #ifdef JP + if (name) return "引きよせる"; + if (desc) return "敵一体をそばに引きよせる。乗馬中は使用できない。"; + #else + if (name) return "Teleport Back"; + if (desc) return "Attracts a monster to nearby."; + #endif + + { + if (cast) + { + monster_type *m_ptr; + monster_race *r_ptr; + char m_name[80]; + + if(p_ptr->riding) + { + msg_format("乗馬中には使えない"); + return NULL; + } + if (!target_set(TARGET_KILL)) return NULL; + if (!cave[target_row][target_col].m_idx) break; + if (!player_has_los_bold(target_row, target_col)) break; + if (!projectable(py, px, target_row, target_col)) break; + m_ptr = &m_list[cave[target_row][target_col].m_idx]; + r_ptr = &r_info[m_ptr->r_idx]; + monster_desc(m_name, m_ptr, 0); + if (r_ptr->flagsr & RFR_RES_TELE) + { + if ((r_ptr->flags1 & (RF1_UNIQUE)) || (r_ptr->flagsr & RFR_RES_ALL)) + { + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + #ifdef JP + msg_format("%sには効果がなかった!", m_name); + #else + msg_format("%s is unaffected!", m_name); + #endif + + break; + } + else if (r_ptr->level > randint1(100)) + { + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + #ifdef JP + msg_format("%sには耐性がある!", m_name); + #else + msg_format("%s resists!", m_name); + #endif + + break; + } + } + #ifdef JP + msg_format("%sを引き戻した。", m_name); + #else + msg_format("You command %s to return.", m_name); + #endif + + teleport_monster_to(cave[target_row][target_col].m_idx, py, px, 100, TELEPORT_PASSIVE); + + }//; + } + break; + case 7: + #ifdef JP + if (name) return "光の収束"; + if (desc) return "光源の半径に応じた威力の極小の閃光球を放つ。大きな光源は収束の限界を超えるかもしれない。"; + #else + if (name) return "Gather lite; + if (desc) return "Fires a tiny ball of lite."; + #endif + + { + int dice, sides, base, rad = 0; + int kougen = p_ptr->cur_lite; + if(kougen < 1)kougen = 0; + if(kougen > (plev / 10) + 1) + { + kougen = (plev / 10) + 1; + rad = p_ptr->cur_lite - kougen - 1; + } + dice = kougen * 2; + sides = kougen * 2; + base = kougen * 10 + 1; + if(kougen) + base += (p_ptr->cur_lite - kougen) * plev / 5; + if(kougen > 3) + { + dice -= (kougen - 3); + sides -= (kougen - 3); + } + if (info) return format("損傷%d+%dd%d半径%d ", base, dice, sides, rad); + if (cast) + { + if(!get_aim_dir(&dir)) return NULL; + + if(p_ptr->cur_lite < 1) + { + msg_print("あなたは懸命に光を集めた。"); + unlite_area(10, 3); + } + fire_ball(GF_LITE, dir, damroll(dice,sides) + base, rad); + + } + } + break; + + //実践魔術 + + case 8: + #ifdef JP + if (name) return "脱力"; + if (desc) return "視界内のモンスターに微量のダメージを与え、減速させる。"; + #else + if (name) return "Dulness"; + if (desc) return "Slightly damages and attempt to slow all monsters in sight."; + #endif + + { + if (info) return format("効%d/損%d", plev, plev / 3); + if (cast) + { + dispel_monsters(plev / 3); + slow_monsters(); + } + } + break; + + case 9: + #ifdef JP + if (name) return "殺気感知"; + if (desc) return "近くの思考することができるモンスターを感知する。"; + #else + if (name) return "Detect Ferocity"; + if (desc) return "Detects all monsters except mindless in your vicinity."; + #endif + + { + if (cast) + { + detect_monsters_mind(DETECT_RAD_DEFAULT); + } + } + break; + + case 10: + #ifdef JP + if (name) return "魔力吸虫"; + if (desc) return "モンスターの魔法の失率を少しだけ高める。"; + #else + if (name) return "Drainmana"; + if (desc) return "Increase monster's failrate of magic."; + #endif + + { + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + DRAINMANA(dir); + } + } + break; + case 11: + #ifdef JP + if (name) return "テレポート・アウェイ"; + if (desc) return "モンスターをテレポートさせるビームを放つ。抵抗されると無効。"; + #else + if (name) return "Teleport Away"; + if (desc) return "Teleports all monsters on the line away unless resisted."; + #endif + + { + int power = plev; + + if (info) return info_power(power); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_beam(GF_AWAY_ALL, dir, power); + } + } + break; + + case 12: + #ifdef JP + if (name) return "重傷"; + if (desc) return "1体のモンスターに大ダメージを与える。抵抗されると無効。"; + #else + if (name) return "Cause Medium Wounds"; + if (desc) return "Wounds a monster unless resisted."; + #endif + + { + int base = plev; + int dice = 10; + int sides = 8 + plev / 4; + + if (info) return info_damage(dice, sides, base); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_ball_hide(GF_WOUNDS, dir, damroll(sides, dice) + base, 0); + } + } + break; + + case 13: + #ifdef JP + if (name) return "*解呪*"; + if (desc) return "アイテムにかかった強力な呪いを解除する。また、大きく回復する。"; + #else + if (name) return "Dispel Curse"; + if (desc) return "Removes normal and heavy curse from equipped items."; + #endif + + { + if (cast) + { + if (remove_curse()) + { + if(p_ptr->inside_arena) + { + msg_print("アリーナが呪いを吸収した!"); + remove_all_curse(); + break; + } + #ifdef JP + msg_print("この呪いはひどい味だ!"); + #else + msg_print("You feel as if someone is watching over you."); + #endif + p_ptr->csp += plev / 2; + if (p_ptr->csp >= p_ptr->msp) + { + p_ptr->csp = p_ptr->msp; + p_ptr->csp_frac = 0; + } + + /* Redraw mana */ + p_ptr->redraw |= (PR_MANA); + hp_player(100); + } + if (remove_all_curse()) + { + if(p_ptr->inside_arena) + { + msg_print("アリーナが呪いを吸収した!"); + break; + } + #ifdef JP + msg_print("この呪いはおいしい。"); + #else + msg_print("You feel as if someone is watching over you."); + #endif + + p_ptr->csp += (20 + plev * 2); + if (p_ptr->csp >= p_ptr->msp) + { + p_ptr->csp = p_ptr->msp; + p_ptr->csp_frac = 0; + } + + /* Redraw mana */ + p_ptr->redraw |= (PR_MANA); + hp_player(plev * 8); + } + } + } + break; + + case 14: + #ifdef JP + if (name) return "脱力の矢"; + if (desc) return "遅鈍属性のボルト又はビームを放つ。"; + #else + if (name) return "Inertia bolt"; + if (desc) return "Fires bolt or beam of inertia."; + #endif + + { + int dice = 7 + ((plev - 5) / 4); + int sides = 8; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_bolt_or_beam(beam_chance() - 10, GF_INERTIA, dir, damroll(dice, sides)); + } + } + break; + + + case 15: + #ifdef JP + if (name) return "隷属"; + if (desc) return "視界内の全てのモンスターを魅了する。抵抗されると無効。"; + #else + if (name) return "Fascinate"; + if (desc) return "Attempts to charm all monsters in sight."; + #endif + + { + int power = plev * 5 / 2 + 5; + + if (info) return info_power(power); + + if (cast) + { + charm_monsters(power); + } + } + break; + + + + + //超人祈祷 + + case 16: + #ifdef JP + if (name) return "アンデッド解呪"; + if (desc) return "視界内の全てのアンデッドにダメージを与える。"; + #else + if (name) return "Dispel Undead"; + if (desc) return "Damages all undead monsters in sight."; + #endif + + { + int dice = 1; + int sides = plev * 4; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + dispel_undead(damroll(dice, sides)); + } + } + break; + + case 17: + #ifdef JP + if (name) return "地獄の九所封じ"; + if (desc) return "モンスターに減速、朦朧、混乱、恐怖、麻痺の効果を与える。抵抗されると無効。"; + #else + if (name) return "9syo huji"; + if (desc) return "Attempts to slow, stun, confuse, scare and freeze monster."; + #endif + + { + int power = plev * 2 + 10; + if (info) return info_power(power); + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + slow_monster_power(dir, power); + stun_monster(dir, power); + confuse_monster(dir, power); + fear_monster(dir, power); + stasis_monster_power(dir, power); + } + } + break; + + case 18: + #ifdef JP + if (name) return "モグラの矢"; + if (desc) return "壁を掘り進むビームを放つ。"; + #else + if (name) return "Bolt of mole"; + if (desc) return "Fires beam of disintegrate."; + #endif + + { + int dice = 10 + (plev - 5) / 4; + int sides = 8; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_beam(GF_DISINTEGRATE, dir, damroll(dice, sides)); + } + } + break; + + case 19: + #ifdef JP + if (name) return "苦痛の紋章"; + if (desc) return "視界内のモンスターのHPを半分前後にする。抵抗されると無効"; + #else + if (name) return "Seal of pain"; + if (desc) return "Attempts to make all monsters' HP almost half."; + #endif + + { + if(cast) + { + project_hack(GF_HAND_DOOM, plev * 2); + } + } + break; + + case 20: + #ifdef JP + if (name) return "混乱の矢"; + if (desc) return "混乱を引き起こすのボルト又はビームを放つ。"; + #else + if (name) return "Confuse bolt"; + if (desc) return "Fires bolt or beam of confuse."; + #endif + + { + int dice = 7 + ((plev - 5) / 4); + int sides = 8; + + if (info) return info_damage(dice, sides, 0); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_bolt_or_beam(beam_chance() - 10, GF_CONFUSION, dir, damroll(dice, sides)); + } + } + break; + + case 21: + #ifdef JP + if (name) return "悪疫の恐怖の雲"; + if (desc) return "さまざまな状態異常を引き起こすことのある劣化のボールを放つ。"; + #else + if (name) return "Illness cloud"; + if (desc) return "Fires a ball of disenchant.It couses abnormality"; + #endif + + { + int dam = plev * 3 / 2; + int rad = 1 + plev / 15; + if (info) return info_damage( 0, 0, dam); + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_ball(GF_ILLNESS, dir, dam, rad); + } + } + break; + + case 22: + #ifdef JP + if (name) return "致命傷"; + if (desc) return "1体のモンスターに大ダメージを与える。抵抗されると無効。"; + #else + if (name) return "Cause Critical Wounds"; + if (desc) return "Wounds a monster critically unless resisted."; + #endif + + { + int base = 50 + plev * 5; + + if (info) return info_damage(0, 0, base); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_ball_hide(GF_WOUNDS, dir, base, 0); + } + } + break; + case 23: + #ifdef JP + if (name) return "寄生虫の災悪"; + if (desc) return "モンスターの自然回復力を弱める。"; + #else + if (name) return "Helminth"; + if (desc) return "Makes week a natural recovery of the monster."; + #endif + + { + int power = 80; + if (info) return info_power(power); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + fire_ball_hide(GF_HELMINTH, dir, power, 0); + } + } + break; + + + //歪曲の書 + + case 24: + #ifdef JP + if (name) return "大量の魔力吸虫"; + if (desc) return "視界内のすべてのモンスターの魔法の失率を少しだけ高める。"; + #else + if (name) return "Many drainmana"; + if (desc) return "Increases magic failrate of all monsters in sight."; + #endif + + { + if (cast) + { + project_hack(GF_DRAINMANA, 1); + } + } + break; + + case 25: + #ifdef JP + if (name) return "重力球"; + if (desc) return "重力のボールを放つ。"; + #else + if (name) return "Singlarity"; + if (desc) return "Fires the ball of gravity."; + #endif + + { + int dam = plev * 2; + int rad = plev / 8; + if (info) return info_damage( 0, 0, dam); + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_ball(GF_GRAVITY, dir, dam, rad); + } + } + break; + + case 26: + #ifdef JP + if (name) return "魔力消去"; + if (desc) return "モンスターにかかっている魔法効果を打ち消す。"; + #else + if (name) return "Dispel"; + if (desc) return "Dispels the enchant of monster."; + #endif + + { + if (cast) + { + int m_idx; + + if (!target_set(TARGET_KILL)) return FALSE; + m_idx = cave[target_row][target_col].m_idx; + if (!m_idx) break; + if (!player_has_los_bold(target_row, target_col)) break; + if (!projectable(py, px, target_row, target_col)) break; + dispel_monster_status(m_idx); + } + } + break; + + case 27: + #ifdef JP + if (name) return "追放"; + if (desc) return "視界内のモンスターを中距離テレポートさせる。"; + #else + if (name) return "Banish"; + if (desc) return "Teleports all monster in sight unless resist."; + #endif + + { + int power = 30; + int i; + + int sides1 = 2; + int sides2 = 2 + plev / 49; + int num = damroll( 1, sides1) + damroll( 1, sides2); + if (info) return format("d%d+d%d回 効力%d", sides1, sides2, power); + + if (cast) + { + for(i=0;idd * (o_ptr->ds + 1)) * 50; + damage = o_ptr->to_d * 100 + o_ptr->to_h * 50; + object_flags(o_ptr, flgs); + if ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD)) + { + /* vorpal blade */ + basedam *= 5; + basedam /= 3; + } + else if (have_flag(flgs, TR_VORPAL)) + { + /* vorpal flag only */ + basedam *= 11; + basedam /= 9; + } + damage += basedam; + damage *= p_ptr->num_blow[i] + 1; + total_damage += damage / 50; + if (i) total_damage = total_damage*7/10; + } + if(total_damage > 500) + { + rad = (total_damage - 500) / 100; + if(rad > 5)rad = 5; + total_damage = 500; + } + total_damage = (total_damage > 0) ? total_damage : 1; + if (info) return info_damage(0, 0, total_damage); + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + if(rad) + { + #ifdef JP + msg_print("辺り一面を引き裂いた!"); + #else + msg_print("You tear up the place at random!"); + #endif + }else{ + #ifdef JP + msg_print("虚空に意識を集中した。"); + #else + msg_print("You consentrate your consideration on the space."); + #endif + } + fire_ball_hide(GF_MISSILE, dir, total_damage, rad); + } + } + break; + + case 30: + #ifdef JP + if (name) return "天罰"; + if (desc) return "視界内のすべてのモンスターに非常に大きなダメージを与えるが、少しの間行動できなくなる。"; + #else + if (name) return "Heaven punisher"; + if (desc) return "Damages all monster in sight."; + #endif + + { + int dam = 690; + if (info) return info_damage( 0, 0, dam); + if (cast) + { + msg_print("無数の青い閃光の柱が降ってきた!"); + dispel_monsters(dam); + + set_paralyzed(p_ptr->paralyzed + randint1(2)); + } + } + break; + + case 31: + #ifdef JP + if (name) return "究極テレポート・アウェイ"; + if (desc) return "モンスターをテレポートさせるビームを放つ。テレポート耐性のあるユニークモンスターにも効果があるかもしれない。"; + #else + if (name) return "Ultimate teleport away"; + if (desc) return "Teleports all monsters on the line away."; + #endif + + { + int power = plev * 4; + + if (info) return info_power(power); + + if (cast) + { + if (!get_aim_dir(&dir)) return NULL; + + fire_beam(GF_AWAY_ULT, dir, power); + } + } + break; + } + + return ""; + } + /* * Do everything for each spell */ *************** *** 11412,11420 **** --- 12324,12337 ---- case REALM_CRAFT: return do_craft_spell(spell, mode); case REALM_DAEMON: return do_daemon_spell(spell, mode); case REALM_CRUSADE: return do_crusade_spell(spell, mode); + case REALM_ENCHANTMENT: return do_enchantment_spell(spell, mode); case REALM_MUSIC: return do_music_spell(spell, mode); case REALM_HISSATSU: return do_hissatsu_spell(spell, mode); } return NULL; } + + + + Only in Hengband-1.7.20/src: do-spell.c.orig diff -cr hengband-relay/src/dungeon.c Hengband-1.7.20/src/dungeon.c *** hengband-relay/src/dungeon.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/dungeon.c Tue Feb 27 21:43:47 2007 *************** *** 278,283 **** --- 278,284 ---- } case CLASS_PRIEST: + case CLASS_ENCHANTER: case CLASS_BARD: { /* Good (light) sensing */ *************** *** 507,512 **** --- 508,514 ---- } case CLASS_PRIEST: + case CLASS_ENCHANTER: case CLASS_BARD: case CLASS_ROGUE: case CLASS_FORCETRAINER: *************** *** 999,1005 **** */ static void regen_monsters(void) { ! int i, frac; /* Regenerate everyone */ --- 1001,1007 ---- */ static void regen_monsters(void) { ! int i, frac, drain; /* Regenerate everyone */ *************** *** 1007,1013 **** { /* Check the i'th monster */ monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ --- 1009,1015 ---- { /* Check the i'th monster */ monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ *************** *** 1019,1026 **** /* Hack -- Base regeneration */ frac = m_ptr->maxhp / 100; /* Hack -- Minimal regeneration rate */ ! if (!frac) if (one_in_(2)) frac = 1; /* Hack -- Some monsters regenerate quickly */ if (r_ptr->flags2 & RF2_REGENERATE) frac *= 2; --- 1021,1035 ---- /* Hack -- Base regeneration */ frac = m_ptr->maxhp / 100; + if(MON_HELMINTH(m_ptr)) + { + drain = (frac / 2 > 100) ? 100 : frac / 2; + if(m_ptr->maxhp > m_ptr->hp + frac * 10) m_ptr->maxhp -= drain; + frac -= 100; + } + /* Hack -- Minimal regeneration rate */ ! if (frac < 1) if (one_in_(2)) frac = 1;else frac = 0; /* Hack -- Some monsters regenerate quickly */ if (r_ptr->flags2 & RF2_REGENERATE) frac *= 2; *************** *** 1798,1803 **** --- 1807,1816 ---- { regen_amount /= 5; } + if (p_ptr->pclass == CLASS_ENCHANTER) + { + regen_amount = regen_amount * 7 / 10; + } } *************** *** 2144,2150 **** { (void)set_ultimate_res(p_ptr->ult_res - 1, TRUE); } ! /*** Poison and Stun and Cut ***/ /* Poison */ --- 2157,2167 ---- { (void)set_ultimate_res(p_ptr->ult_res - 1, TRUE); } ! /* 氷砂糖 */ ! if(p_ptr->konpeito) ! { ! (void)set_konpeito(p_ptr->konpeito - 10, FALSE); ! } /*** Poison and Stun and Cut ***/ /* Poison */ *************** *** 2690,2696 **** for (monster = 0; monster < m_max; monster++) { monster_type *m_ptr = &m_list[monster]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 2707,2713 ---- for (monster = 0; monster < m_max; monster++) { monster_type *m_ptr = &m_list[monster]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 3481,3487 **** /* Ignore pet */ if (is_pet(m_ptr)) continue; ! r_ptr = &r_info[m_ptr->r_idx]; /* Unique monsters */ if (r_ptr->flags1 & (RF1_UNIQUE)) --- 3498,3504 ---- /* Ignore pet */ if (is_pet(m_ptr)) continue; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Unique monsters */ if (r_ptr->flags1 & (RF1_UNIQUE)) *************** *** 5564,5570 **** if (p_ptr->riding && !p_ptr->confused && !p_ptr->blind) { monster_type *m_ptr = &m_list[p_ptr->riding]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; if (MON_CSLEEP(m_ptr)) { --- 5581,5587 ---- if (p_ptr->riding && !p_ptr->confused && !p_ptr->blind) { monster_type *m_ptr = &m_list[p_ptr->riding]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (MON_CSLEEP(m_ptr)) { *************** *** 6908,6913 **** --- 6925,6933 ---- /* React to changes */ Term_xtra(TERM_XTRA_REACT, 0); + /* Load the "pref" files */ + load_all_pref_files(); + /* Window stuff */ p_ptr->window |= (PW_INVEN | PW_EQUIP | PW_SPELL | PW_PLAYER); *************** *** 7224,7226 **** --- 7244,7248 ---- } } } + + Only in Hengband-1.7.20/src: dungeon.c.orig diff -cr hengband-relay/src/effects.c Hengband-1.7.20/src/effects.c *** hengband-relay/src/effects.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/effects.c Wed Feb 28 21:47:01 2007 *************** *** 195,200 **** --- 195,202 ---- p_ptr->dustrobe = 0; p_ptr->action = ACTION_NONE; + /*氷砂糖*/ + p_ptr->konpeito = 0; p_ptr->oppose_acid = 0; /* Timed -- oppose acid */ p_ptr->oppose_elec = 0; /* Timed -- oppose lightning */ *************** *** 3917,3923 **** --- 3919,3961 ---- return (TRUE); } + bool set_konpeito(int v, bool do_dec) + { + bool notice = FALSE; + + /* Hack -- Force good values */ + v = (v > 10000) ? 10000 : (v < 0) ? 0 : v; + + if (p_ptr->is_dead) return FALSE; + + /* Open */ + if (p_ptr->konpeito > 800 && do_dec && p_ptr->konpeito < 1001) + { + msg_print("氷砂糖は今にもなくなりそうだ。"); + notice = TRUE; + } + + /* Use the value */ + p_ptr->konpeito = v; + + /* Nothing to notice */ + if (!notice) return (FALSE); + + /* Disturb */ + if (disturb_state) disturb(0, 0); + + /* Recalculate bonuses */ + p_ptr->update |= (PU_BONUS); + + /* Handle stuff */ + handle_stuff(); + /* Result */ + return (TRUE); + } + + + /* * Set "p_ptr->food", notice observable changes * *************** *** 4418,4423 **** --- 4456,4483 ---- if ((num > 0) && (p_ptr->chp < (p_ptr->mhp/3))) chg_virtue(V_TEMPERANCE, 1); /* Gain hitpoints */ + + if(p_ptr->pclass == CLASS_ENCHANTER){ + if(num >= p_ptr->lev * 8) + { + p_ptr->chp += num / (p_ptr->lev * 8); + num %= (p_ptr->lev * 8); + msg_print("あなたに力が馴染んだ。"); + } + if(randint1(p_ptr->lev * 8) > num) + { + if(num >= 300 && one_in_(3)) + { + msg_print("力があなたの傍を通り過ぎた。"); + num = 0; + energy_use = 50; + } + else + num = (num >= 300) ? 1 : 0; + } + else + num = 1; + } p_ptr->chp += num; /* Enforce maximum */ *************** *** 4433,4438 **** --- 4493,4501 ---- /* Window stuff */ p_ptr->window |= (PW_PLAYER); + /* No Heal */ + if (num == 0){} + else /* Heal 0-4 */ if (num < 5) { *************** *** 5073,5078 **** --- 5136,5143 ---- int take_hit(int damage_type, int damage, cptr hit_from, int monspell) { int old_chp = p_ptr->chp; + int valid_damage=0; + int fatal_wound=0; char death_message[1024]; char tmp[80]; *************** *** 5100,5105 **** --- 5165,5193 ---- if (monspell >= 0) learn_spell(monspell); /* Mega-Hack -- Apply "invulnerability" */ + if (p_ptr->pclass == CLASS_ENCHANTER) + { + if(p_ptr->kawasimi<=damage) + { + valid_damage = damage / p_ptr->kawasimi; + damage %= p_ptr->kawasimi; + msg_print("避けきれない!"); + fatal_wound = 1; + + } + if(randint1(p_ptr->kawasimi)<=damage) + { + valid_damage++; + if(fatal_wound) + msg_print("っ!これは本当に痛い!"); + else + msg_print("攻撃が直撃した!"); + } + //else + // msg_print("うまく避けた。"); + damage = valid_damage; + } + if ((damage_type != DAMAGE_USELIFE) && (damage_type != DAMAGE_LOSELIFE)) { if (IS_INVULN() && (damage < 9000)) *************** *** 6050,6052 **** --- 6138,6141 ---- screen_load(); return TRUE; } + diff -cr hengband-relay/src/externs.h Hengband-1.7.20/src/externs.h *** hengband-relay/src/externs.h Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/externs.h Wed Feb 28 11:25:18 2007 *************** *** 337,343 **** extern bool preserve_mode; /* Preserve artifacts (*) */ extern bool autoroller; /* Allow use of autoroller for stats (*) */ extern bool autochara; /* Autoroll for weight, height and social status */ ! extern bool powerup_home; /* Increase capacity of your home (*) */ /*** Easy Object Auto-Destroyer ***/ --- 337,344 ---- extern bool preserve_mode; /* Preserve artifacts (*) */ extern bool autoroller; /* Allow use of autoroller for stats (*) */ extern bool autochara; /* Autoroll for weight, height and social status */ ! extern bool powerup_home; ! extern bool ego_monster; /* Increase capacity of your home (*) */ /*** Easy Object Auto-Destroyer ***/ *************** *** 918,923 **** --- 919,926 ---- extern bool set_monster_confused(int m_idx, int v); extern bool set_monster_monfear(int m_idx, int v); extern bool set_monster_invulner(int m_idx, int v, bool energy_need); + extern bool set_monster_drainmana(int m_idx, int v); + extern bool set_monster_helminth(int m_idx, int v); extern void process_monsters_mtimed(int mtimed_idx); extern void dispel_monster_status(int m_idx); extern u32b get_curse(int power, object_type *o_ptr); *************** *** 1103,1108 **** --- 1106,1114 ---- extern bool wall_stone(void); extern bool speed_monsters(void); extern bool slow_monsters(void); + extern bool slow_monsters_power(int power); + extern bool DRAINMANA(int dir); + extern bool sleep_monsters(void); extern void aggravate_monsters(int who); extern bool genocide_aux(int m_idx, int power, bool player_cast, int dam_side, cptr spell_name); *************** *** 1145,1152 **** --- 1151,1164 ---- extern bool heal_monster(int dir, int dam); extern bool speed_monster(int dir); extern bool slow_monster(int dir); + + extern bool slow_monster_power(int dir, int power); + extern bool sleep_monster(int dir); extern bool stasis_monster(int dir); /* Like sleep, affects undead as well */ + + extern bool stasis_monster_power(int dir, int power); /* Like sleep, affects undead as well */ + extern bool stasis_evil(int dir); /* Like sleep, affects undead as well */ extern bool confuse_monster(int dir, int plev); extern bool stun_monster(int dir, int plev); *************** *** 1376,1381 **** --- 1388,1394 ---- extern void handle_stuff(void); extern s16b empty_hands(bool riding_control); extern bool heavy_armor(void); + extern int EV_down(void); /* effects.c */ *************** *** 1448,1453 **** --- 1461,1468 ---- extern bool set_wraith_form(int v, bool do_dec); extern bool set_tim_esp(int v, bool do_dec); extern bool set_superstealth(bool set); + + extern bool set_konpeito(int v, bool do_dec); /* xtra2.c */ extern void check_experience(void); diff -cr hengband-relay/src/files.c Hengband-1.7.20/src/files.c *** hengband-relay/src/files.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/files.c Wed Feb 28 21:52:19 2007 *************** *** 2314,2319 **** --- 2314,2322 ---- case CLASS_MIRROR_MASTER: if(p_ptr->lev > 39)add_flag(flgs, TR_REFLECT); break; + case CLASS_ENCHANTER: + if(p_ptr->lev > 29)add_flag(flgs,TR_HOLD_LIFE); + break; default: break; /* Do nothing */ } *************** *** 3383,3392 **** --- 3386,3399 ---- put_str("レベル:", 6, 1); put_str("HP :", 7, 1); put_str("MP :", 8, 1); + if(p_ptr->pclass == CLASS_ENCHANTER) + put_str("回避減少:",9,1); #else put_str("Level :", 6, 1); put_str("Hits :", 7, 1); put_str("Mana :", 8, 1); + if(p_ptr->pclass == CLASS_ENCHANTER) + put_str("EV down:",9, 1); #endif *************** *** 3396,3401 **** --- 3403,3413 ---- c_put_str(TERM_L_BLUE, buf, 7, 9); (void)sprintf(buf, "%d/%d", (int)p_ptr->csp, (int)p_ptr->msp); c_put_str(TERM_L_BLUE, buf, 8, 9); + if(p_ptr->pclass == CLASS_ENCHANTER) + { + (void)sprintf(buf, "%d", (int)(p_ptr->maxkawasimi - p_ptr->kawasimi)); + c_put_str(TERM_L_BLUE, buf, 9, 11); + } } *************** *** 4571,4576 **** --- 4583,4594 ---- #endif + if (ego_monster) + #ifdef JP + fprintf(fff, "\n エゴモンスター: ON"); + #else + fprintf(fff, "\n ego monster: ON"); + #endif fputc('\n', fff); if (p_ptr->noscore) *************** *** 7930,7932 **** --- 7948,7951 ---- { } #endif /* HANDLE_SIGNALS */ + diff -cr hengband-relay/src/flavor.c Hengband-1.7.20/src/flavor.c *** hengband-relay/src/flavor.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/flavor.c Sun Feb 18 19:34:07 2007 *************** *** 32,37 **** --- 32,38 ---- case TV_CRAFT_BOOK: case TV_DAEMON_BOOK: case TV_CRUSADE_BOOK: + case TV_ENCHANTMENT_BOOK: case TV_MUSIC_BOOK: case TV_HISSATSU_BOOK: { *************** *** 448,453 **** --- 449,455 ---- case TV_CRAFT_BOOK: case TV_DAEMON_BOOK: case TV_CRUSADE_BOOK: + case TV_ENCHANTMENT_BOOK: case TV_MUSIC_BOOK: case TV_HISSATSU_BOOK: { *************** *** 1718,1723 **** --- 1720,1738 ---- break; } + case TV_ENCHANTMENT_BOOK: + { + #ifdef JP + basenm = "呪術の魔法書%"; + #else + if (mp_ptr->spell_book == TV_LIFE_BOOK) + basenm = "& Book~ of Enchantment Magic %"; + else + basenm = "& Enchantment Spellbook~ %"; + #endif + + break; + } case TV_MUSIC_BOOK: { *************** *** 2785,2789 **** object_desc_done: my_strcpy(buf, tmp_val, MAX_NLEN); } - --- 2800,2803 ---- diff -cr hengband-relay/src/floors.c Hengband-1.7.20/src/floors.c *** hengband-relay/src/floors.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/floors.c Fri Feb 16 21:30:24 2007 *************** *** 1226,1231 **** --- 1226,1233 ---- (void)set_monster_confused(i, 0); (void)set_monster_monfear(i, 0); (void)set_monster_invulner(i, 0, FALSE); + (void)set_monster_drainmana(i, 0); + (void)set_monster_helminth(i, 0); } /* Extract real monster race */ *************** *** 1549,1551 **** --- 1551,1554 ---- /* Connect this stairs to the destination */ cave[py][px].special = dest_floor_id; } + diff -cr hengband-relay/src/init1.c Hengband-1.7.20/src/init1.c *** hengband-relay/src/init1.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/init1.c Wed Feb 28 21:53:26 2007 *************** *** 1,5 **** /* File: init1.c */ - /* * Copyright (c) 1997 Ben Harrison * --- 1,4 ---- *************** *** 4013,4019 **** /* Maximum k_idx */ else if (zz[0][0] == 'K') { ! max_k_idx = atoi(zz[1]); } /* Maximum v_idx */ --- 4012,4018 ---- /* Maximum k_idx */ else if (zz[0][0] == 'K') { ! max_k_idx = atoi(zz[1])+4;/*?*/ } /* Maximum v_idx */ *************** *** 4728,4730 **** --- 4727,4730 ---- } #endif + diff -cr hengband-relay/src/init2.c Hengband-1.7.20/src/init2.c *** hengband-relay/src/init2.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/init2.c Sun Feb 18 19:35:34 2007 *************** *** 1382,1387 **** --- 1382,1392 ---- { TV_MUSIC_BOOK, 0 }, { TV_MUSIC_BOOK, 1 }, { TV_MUSIC_BOOK, 1 }, + + { TV_ENCHANTMENT_BOOK, 0 }, + { TV_ENCHANTMENT_BOOK, 0 }, + { TV_ENCHANTMENT_BOOK, 1 }, + { TV_ENCHANTMENT_BOOK, 1 }, }, { diff -cr hengband-relay/src/load.c Hengband-1.7.20/src/load.c *** hengband-relay/src/load.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/load.c Wed Feb 28 22:01:14 2007 *************** *** 733,738 **** --- 733,751 ---- m_ptr->mtimed[MTIMED_CONFUSED] = (s16b)tmp8u; rd_byte(&tmp8u); m_ptr->mtimed[MTIMED_MONFEAR] = (s16b)tmp8u; + /*魔力吸虫*/ + if (z_older_than(11,7,20)) + { + m_ptr->mtimed[MTIMED_DRAINMANA] = 0; + m_ptr->mtimed[MTIMED_HELMINTH] = 0; + } + else + { + rd_byte(&tmp8u); + m_ptr->mtimed[MTIMED_DRAINMANA] = (s16b)tmp8u; + rd_byte(&tmp8u); + m_ptr->mtimed[MTIMED_HELMINTH] = (s16b)tmp8u; + } if (z_older_than(10,0,10)) { *************** *** 870,875 **** --- 883,901 ---- m_ptr->mtimed[MTIMED_MONFEAR] = (s16b)tmp8u; } else m_ptr->mtimed[MTIMED_MONFEAR] = 0; + /*魔力吸虫*/ + if (flags & SAVE_MON_DRAINMANA) + { + rd_byte(&tmp8u); + m_ptr->mtimed[MTIMED_DRAINMANA] = (s16b)tmp8u; + } + else m_ptr->mtimed[MTIMED_DRAINMANA] = 0; + if (flags & SAVE_MON_HELMINTH) + { + rd_byte(&tmp8u); + m_ptr->mtimed[MTIMED_HELMINTH] = (s16b)tmp8u; + } + else m_ptr->mtimed[MTIMED_HELMINTH] = 0; if (flags & SAVE_MON_TARGET_Y) rd_s16b(&m_ptr->target_y); else m_ptr->target_y = 0; *************** *** 903,908 **** --- 929,955 ---- if (flags & SAVE_MON_PARENT) rd_s16b(&m_ptr->parent_m_idx); else m_ptr->parent_m_idx = 0; + + // EGOMON + if (flags & SAVE_MON_EGO) { + m_ptr->ego_race = RNEW(monster_race); + memcpy(m_ptr->ego_race,&r_info[m_ptr->r_idx],sizeof(monster_race)); + // + rd_s16b(&m_ptr->ego_race->ac); + rd_s32b(&m_ptr->ego_race->mexp); + rd_byte(&m_ptr->ego_race->freq_spell); + rd_u32b(&m_ptr->ego_race->flags1); + rd_u32b(&m_ptr->ego_race->flags2); + rd_u32b(&m_ptr->ego_race->flags3); + rd_u32b(&m_ptr->ego_race->flags4); + rd_u32b(&m_ptr->ego_race->flags5); + rd_u32b(&m_ptr->ego_race->flags6); + rd_u32b(&m_ptr->ego_race->flags7); + rd_u32b(&m_ptr->ego_race->flags8); + rd_u32b(&m_ptr->ego_race->flags9); + rd_u32b(&m_ptr->ego_race->flagsr); + } + else m_ptr->ego_race = NULL; } *************** *** 1863,1868 **** --- 1910,1917 ---- p_ptr->multishadow = 0; p_ptr->dustrobe = 0; + p_ptr->konpeito = 0; + p_ptr->chaos_patron = ((p_ptr->age + p_ptr->sc) % MAX_PATRON); p_ptr->muta1 = 0; p_ptr->muta2 = 0; *************** *** 1924,1929 **** --- 1973,1982 ---- rd_s16b(&p_ptr->dustrobe); } + if(z_older_than(11,7,20)) + p_ptr->konpeito = 0; + else + rd_s32b(&p_ptr->konpeito); rd_s16b(&p_ptr->chaos_patron); rd_u32b(&p_ptr->muta1); rd_u32b(&p_ptr->muta2); Only in Hengband-1.7.20/src: load.c.orig diff -cr hengband-relay/src/mane.c Hengband-1.7.20/src/mane.c *** hengband-relay/src/mane.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/mane.c Tue Feb 27 21:43:47 2007 *************** *** 930,936 **** if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; m_ptr = &m_list[cave[target_row][target_col].m_idx]; ! r_ptr = &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); if (r_ptr->flagsr & RFR_RES_TELE) { --- 930,936 ---- if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; m_ptr = &m_list[cave[target_row][target_col].m_idx]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); if (r_ptr->flagsr & RFR_RES_TELE) { *************** *** 984,990 **** if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; m_ptr = &m_list[target_m_idx]; ! r_ptr = &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); #ifdef JP msg_format("%^sの足を指さした。", m_name); --- 984,990 ---- if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; m_ptr = &m_list[target_m_idx]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); #ifdef JP msg_format("%^sの足を指さした。", m_name); Only in Hengband-1.7.20/src: mane.c.orig diff -cr hengband-relay/src/melee1.c Hengband-1.7.20/src/melee1.c *** hengband-relay/src/melee1.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/melee1.c Tue Feb 27 21:43:48 2007 *************** *** 144,150 **** { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; int ap_cnt; --- 144,150 ---- { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; int ap_cnt; Only in Hengband-1.7.20/src: melee1.c.orig diff -cr hengband-relay/src/melee2.c Hengband-1.7.20/src/melee2.c *** hengband-relay/src/melee2.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/melee2.c Tue Feb 27 21:43:48 2007 *************** *** 33,39 **** int plus = 1; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_type *t_ptr; --- 33,39 ---- int plus = 1; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_type *t_ptr; *************** *** 190,196 **** { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; char m_name[160]; --- 190,196 ---- { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; char m_name[160]; *************** *** 419,425 **** #ifdef ALLOW_TERROR ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; u16b p_lev, m_lev; u16b p_chp, p_mhp; --- 419,425 ---- #ifdef ALLOW_TERROR ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; u16b p_lev, m_lev; u16b p_chp, p_mhp; *************** *** 493,499 **** int now_cost; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Monster location */ y1 = m_ptr->fy; --- 493,499 ---- int now_cost; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Monster location */ y1 = m_ptr->fy; *************** *** 591,597 **** bool use_scent = FALSE; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Can monster cast attack spell? */ if (r_ptr->flags4 & (RF4_ATTACK_MASK) || --- 591,597 ---- bool use_scent = FALSE; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Can monster cast attack spell? */ if (r_ptr->flags4 & (RF4_ATTACK_MASK) || *************** *** 943,949 **** c_ptr = &cave[y][x]; /* Skip locations in a wall */ ! if (!monster_can_cross_terrain(c_ptr->feat, &r_info[m_ptr->r_idx], (m_idx == p_ptr->riding) ? CEM_RIDING : 0)) continue; /* Check for "availability" (if monsters can flow) */ if (!(m_ptr->mflag2 & MFLAG2_NOFLOW)) --- 943,949 ---- c_ptr = &cave[y][x]; /* Skip locations in a wall */ ! if (!monster_can_cross_terrain(c_ptr->feat, m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx], (m_idx == p_ptr->riding) ? CEM_RIDING : 0)) continue; /* Check for "availability" (if monsters can flow) */ if (!(m_ptr->mflag2 & MFLAG2_NOFLOW)) *************** *** 999,1005 **** static bool find_hiding(int m_idx, int *yp, int *xp) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; int fy = m_ptr->fy; int fx = m_ptr->fx; --- 999,1005 ---- static bool find_hiding(int m_idx, int *yp, int *xp) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; int fy = m_ptr->fy; int fx = m_ptr->fx; *************** *** 1069,1075 **** static bool get_moves(int m_idx, int *mm) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; int y, ay, x, ax; int move_val = 0; int y2 = py; --- 1069,1075 ---- static bool get_moves(int m_idx, int *mm) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; int y, ay, x, ax; int move_val = 0; int y2 = py; *************** *** 1428,1434 **** monster_type *m_ptr = &m_list[m_idx]; monster_type *t_ptr = &m_list[t_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_race *tr_ptr = &r_info[t_ptr->r_idx]; int ap_cnt; --- 1428,1434 ---- monster_type *m_ptr = &m_list[m_idx]; monster_type *t_ptr = &m_list[t_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_race *tr_ptr = &r_info[t_ptr->r_idx]; int ap_cnt; *************** *** 2206,2212 **** static void process_monster(int m_idx) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx]; int i, d, oy, ox, ny, nx; --- 2206,2212 ---- static void process_monster(int m_idx) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_race *ap_r_ptr = &r_info[m_ptr->ap_r_idx]; int i, d, oy, ox, ny, nx; *************** *** 2257,2263 **** if ((m_ptr->mflag2 & MFLAG2_CHAMELEON) && one_in_(13) && !MON_CSLEEP(m_ptr)) { choose_new_monster(m_idx, FALSE, 0); ! r_ptr = &r_info[m_ptr->r_idx]; } /* Players hidden in shadow are almost imperceptable. -LM- */ --- 2257,2263 ---- if ((m_ptr->mflag2 & MFLAG2_CHAMELEON) && one_in_(13) && !MON_CSLEEP(m_ptr)) { choose_new_monster(m_idx, FALSE, 0); ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; } /* Players hidden in shadow are almost imperceptable. -LM- */ *************** *** 3671,3677 **** { /* Access the monster */ m_ptr = &m_list[i]; ! r_ptr = &r_info[m_ptr->r_idx]; /* Handle "leaving" */ if (p_ptr->leaving) break; --- 3671,3677 ---- { /* Access the monster */ m_ptr = &m_list[i]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Handle "leaving" */ if (p_ptr->leaving) break; *************** *** 4173,4179 **** --- 4173,4268 ---- return TRUE; } + /* + * Set "m_ptr->mtimed[MTIMED_DRAINMANA]", notice observable changes + */ + bool set_monster_drainmana(int m_idx, int v) + { + monster_type *m_ptr = &m_list[m_idx]; + bool notice = FALSE; + + /* Hack -- Force good values */ + v = (v > 50) ? 50 : (v < 0) ? 0 : v; + + /* Open */ + if (v) + { + if (!MON_DRAINMANA(m_ptr)) + { + mproc_add(m_idx, MTIMED_DRAINMANA); + notice = TRUE; + } + } + + /* Shut */ + else + { + if (MON_DRAINMANA(m_ptr)) + { + mproc_remove(m_idx, MTIMED_DRAINMANA); + notice = TRUE; + } + } + + /* Use the value */ + m_ptr->mtimed[MTIMED_DRAINMANA] = v; + + if (!notice) return FALSE; + + if (m_ptr->ml) + { + /* Update health bar as needed */ + if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH); + if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH); + } + + return TRUE; + } + /* + * Set "m_ptr->mtimed[MTIMED_HELMINTH]", notice observable changes + */ + bool set_monster_helminth(int m_idx, int v) + { + monster_type *m_ptr = &m_list[m_idx]; + bool notice = FALSE; + + /* Hack -- Force good values */ + v = (v > 100) ? 100 : (v < 0) ? 0 : v; + + /* Open */ + if (v) + { + if (!MON_HELMINTH(m_ptr)) + { + mproc_add(m_idx, MTIMED_HELMINTH); + notice = TRUE; + } + } + + /* Shut */ + else + { + if (MON_HELMINTH(m_ptr)) + { + mproc_remove(m_idx, MTIMED_HELMINTH); + notice = TRUE; + } + } + + /* Use the value */ + m_ptr->mtimed[MTIMED_HELMINTH] = v; + + if (!notice) return FALSE; + + if (m_ptr->ml) + { + /* Update health bar as needed */ + if (p_ptr->health_who == m_idx) p_ptr->redraw |= (PR_HEALTH); + if (p_ptr->riding == m_idx) p_ptr->redraw |= (PR_UHEALTH); + } + return TRUE; + } static u32b csleep_noise; *************** *** 4185,4191 **** { case MTIMED_CSLEEP: { ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Assume does not wake up */ bool test = FALSE; --- 4274,4280 ---- { case MTIMED_CSLEEP: { ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Assume does not wake up */ bool test = FALSE; *************** *** 4407,4412 **** --- 4496,4541 ---- } } break; + + case MTIMED_DRAINMANA: + /* Reduce by one, note if expires */ + if (set_monster_drainmana(m_idx, MON_DRAINMANA(m_ptr) - 1)) + { + if (is_seen(m_ptr)) + { + char m_name[80]; + + /* Acquire the monster name */ + monster_desc(m_name, m_ptr, 0); + + /* Dump a message */ + #ifdef JP + msg_format("%^sは魔力吸虫をはずした。", m_name); + #else + msg_format("%^s is no longer slow.", m_name); + #endif + } + } + break; + case MTIMED_HELMINTH: + if (set_monster_helminth(m_idx, MON_HELMINTH(m_ptr) - 1)) + { + if (is_seen(m_ptr)) + { + char m_name[80]; + + /* Acquire the monster name */ + monster_desc(m_name, m_ptr, 0); + + /* Dump a message */ + #ifdef JP + msg_format("%^sの寄生虫は力尽きた。", m_name); + #else + msg_format("%^s is no longer slow.", m_name); + #endif + } + } + break; } } *************** *** 4551,4557 **** void monster_gain_exp(int m_idx, int s_idx) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_race *s_ptr = &r_info[s_idx]; int new_exp; --- 4680,4686 ---- void monster_gain_exp(int m_idx, int s_idx) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_race *s_ptr = &r_info[s_idx]; int new_exp; *************** *** 4583,4589 **** real_r_ptr(m_ptr)->cur_num++; m_ptr->ap_r_idx = m_ptr->r_idx; ! r_ptr = &r_info[m_ptr->r_idx]; if (r_ptr->flags1 & RF1_FORCE_MAXHP) { --- 4712,4718 ---- real_r_ptr(m_ptr)->cur_num++; m_ptr->ap_r_idx = m_ptr->r_idx; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (r_ptr->flags1 & RF1_FORCE_MAXHP) { *************** *** 4657,4659 **** --- 4786,4789 ---- } if (m_idx == p_ptr->riding) p_ptr->update |= PU_BONUS; } + Only in Hengband-1.7.20/src: melee2.c.orig diff -cr hengband-relay/src/mind.c Hengband-1.7.20/src/mind.c *** hengband-relay/src/mind.c Sat Sep 30 22:12:36 2006 --- Hengband-1.7.20/src/mind.c Tue Feb 27 21:43:48 2007 *************** *** 1111,1117 **** int oy = y, ox = x; int m_idx = cave[y][x].m_idx; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; char m_name[80]; monster_desc(m_name, m_ptr, 0); --- 1111,1117 ---- int oy = y, ox = x; int m_idx = cave[y][x].m_idx; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; char m_name[80]; monster_desc(m_name, m_ptr, 0); Only in Hengband-1.7.20/src: mind.c.orig diff -cr hengband-relay/src/monster1.c Hengband-1.7.20/src/monster1.c *** hengband-relay/src/monster1.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/monster1.c Tue Feb 27 21:43:48 2007 *************** *** 3508,3514 **** */ bool are_enemies(monster_type *m_ptr, monster_type *n_ptr) { ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_race *s_ptr = &r_info[n_ptr->r_idx]; if (p_ptr->inside_battle) --- 3508,3514 ---- */ bool are_enemies(monster_type *m_ptr, monster_type *n_ptr) { ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_race *s_ptr = &r_info[n_ptr->r_idx]; if (p_ptr->inside_battle) Only in Hengband-1.7.20/src: monster1.c.orig diff -cr hengband-relay/src/monster2.c Hengband-1.7.20/src/monster2.c *** hengband-relay/src/monster2.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/monster2.c Wed Feb 28 11:39:50 2007 *************** *** 173,179 **** */ monster_race *real_r_ptr(monster_type *m_ptr) { ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Extract real race */ if (m_ptr->mflag2 & MFLAG2_CHAMELEON) --- 173,179 ---- */ monster_race *real_r_ptr(monster_type *m_ptr) { ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Extract real race */ if (m_ptr->mflag2 & MFLAG2_CHAMELEON) *************** *** 201,207 **** monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; s16b this_o_idx, next_o_idx = 0; --- 201,207 ---- monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; s16b this_o_idx, next_o_idx = 0; *************** *** 224,231 **** if (MON_CONFUSED(m_ptr)) (void)set_monster_confused(i, 0); if (MON_MONFEAR(m_ptr)) (void)set_monster_monfear(i, 0); if (MON_INVULNER(m_ptr)) (void)set_monster_invulner(i, 0, FALSE); - /* Hack -- remove target monster */ if (i == target_who) target_who = 0; --- 224,233 ---- if (MON_CONFUSED(m_ptr)) (void)set_monster_confused(i, 0); if (MON_MONFEAR(m_ptr)) (void)set_monster_monfear(i, 0); if (MON_INVULNER(m_ptr)) (void)set_monster_invulner(i, 0, FALSE); + /* 魔力吸虫 */ + if (MON_DRAINMANA(m_ptr)) (void)set_monster_drainmana(i,0); + if (MON_HELMINTH(m_ptr)) (void)set_monster_helminth(i,0); /* Hack -- remove target monster */ if (i == target_who) target_who = 0; *************** *** 421,427 **** { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Paranoia -- skip "dead" monsters */ if (!m_ptr->r_idx) continue; --- 423,429 ---- { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Paranoia -- skip "dead" monsters */ if (!m_ptr->r_idx) continue; *************** *** 1945,1951 **** { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* If the monster doesn't have original appearance, don't note */ if (!is_original_ap(m_ptr)) return; --- 1947,1953 ---- { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* If the monster doesn't have original appearance, don't note */ if (!is_original_ap(m_ptr)) return; *************** *** 2313,2319 **** { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; bool do_disturb = disturb_move; --- 2315,2321 ---- { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; bool do_disturb = disturb_move; *************** *** 2717,2723 **** { monster_race *r_ptr = &r_info[r_idx]; monster_type *m_ptr = &m_list[chameleon_change_m_idx]; ! monster_race *old_r_ptr = &r_info[m_ptr->r_idx]; if (!(r_ptr->flags1 & (RF1_UNIQUE))) return FALSE; if (r_ptr->flags7 & (RF7_FRIENDLY | RF7_CHAMELEON)) return FALSE; --- 2719,2725 ---- { monster_race *r_ptr = &r_info[r_idx]; monster_type *m_ptr = &m_list[chameleon_change_m_idx]; ! monster_race *old_r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (!(r_ptr->flags1 & (RF1_UNIQUE))) return FALSE; if (r_ptr->flags7 & (RF7_FRIENDLY | RF7_CHAMELEON)) return FALSE; *************** *** 2748,2754 **** { monster_race *r_ptr = &r_info[r_idx]; monster_type *m_ptr = &m_list[chameleon_change_m_idx]; ! monster_race *old_r_ptr = &r_info[m_ptr->r_idx]; if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE; if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE; --- 2750,2756 ---- { monster_race *r_ptr = &r_info[r_idx]; monster_type *m_ptr = &m_list[chameleon_change_m_idx]; ! monster_race *old_r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (r_ptr->flags1 & (RF1_UNIQUE)) return FALSE; if (r_ptr->flags2 & RF2_MULTIPLY) return FALSE; *************** *** 3142,3147 **** --- 3144,3294 ---- /* Get a new monster record */ m_ptr = &m_list[c_ptr->m_idx]; + // EGOMON + if(one_in_(100) && !(r_ptr->flags1 & RF1_UNIQUE) && !(r_ptr->flags1 & RF1_QUESTOR) + && !(r_ptr->flags2 & RF2_MULTIPLY) && (who == 0) && !(p_ptr->inside_arena) && ego_monster){ + m_ptr->ego_race = RNEW(monster_race); + memcpy(m_ptr->ego_race,r_ptr,sizeof(monster_race)); + m_ptr->ego_race->ac = m_ptr->ego_race->ac * rand_range(100,150) / 100; + m_ptr->ego_race->mexp = m_ptr->ego_race->mexp * rand_range(150,200) / 100; + m_ptr->ego_race->flags1 |= RF1_DROP_GOOD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags1 |= RF1_DROP_GREAT; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_STUPID; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_SMART; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_CAN_SPEAK; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_REFLECTING; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_EMPTY_MIND; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_WEIRD_MIND; + m_ptr->ego_race->flags2 &= ~RF2_MULTIPLY; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_REGENERATE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_AURA_FIRE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_AURA_ELEC; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_OPEN_DOOR; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_BASH_DOOR; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_PASS_WALL; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_KILL_WALL; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_MOVE_BODY; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_KILL_BODY; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_TAKE_ITEM; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags2 |= RF2_KILL_ITEM; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_GOOD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_AURA_COLD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_NO_FEAR; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_NO_STUN; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_NO_CONF; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags3 |= RF3_NO_SLEEP; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_SHRIEK; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_DISPEL; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_ROCKET; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_SHOOT; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_ACID; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_ELEC; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_FIRE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_COLD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_POIS; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_NETH; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_LITE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_DARK; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_CONF; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_SOUN; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_CHAO; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_DISE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_NEXU; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_TIME; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_INER; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_GRAV; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_SHAR; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_PLAS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BA_NUKE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_NUKE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BA_CHAO; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags4 |= RF4_BR_DISI; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_ACID; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_ELEC; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_FIRE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_COLD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_POIS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_NETH; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_WATE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_MANA; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_DARK; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_DRAIN_MANA; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_MIND_BLAST; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BRAIN_SMASH; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CAUSE_1; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CAUSE_2; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CAUSE_3; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CAUSE_4; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_ACID; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_ELEC; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_FIRE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_COLD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BA_LITE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_NETH; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_WATE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_MANA; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_PLAS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BO_ICEE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_MISSILE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_SCARE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_BLIND; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_CONF; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_SLOW; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags5 |= RF5_HOLD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_HASTE; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_HAND_DOOM; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_HEAL; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_INVULNER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_BLINK; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TPORT; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_WORLD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TELE_TO; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TELE_AWAY; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TELE_LEVEL; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_PSY_SPEAR; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_DARKNESS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_TRAPS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_FORGET; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_RAISE_DEAD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_KIN; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_CYBER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_MONSTER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_MONSTERS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_ANT; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_SPIDER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_HOUND; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_HYDRA; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_ANGEL; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_DEMON; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_UNDEAD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_DRAGON; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_HI_UNDEAD; + if(one_in_(2000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_HI_DRAGON; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_AMBERITES; + if(one_in_(4000/(r_ptr->level+1))) m_ptr->ego_race->flags6 |= RF6_S_UNIQUE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_ACID; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_ELEC; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_FIRE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_COLD; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_IM_POIS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_LITE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_DARK; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_NETH; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_WATE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_PLAS; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_SHAR; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_SOUN; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_CHAO; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_NEXU; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_DISE; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_WALL; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_INER; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_TIME; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_GRAV; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_ALL; + if(one_in_(1000/(r_ptr->level+1))) m_ptr->ego_race->flagsr |= RFR_RES_TELE; + } + /* Save the race */ m_ptr->r_idx = r_idx; m_ptr->ap_r_idx = initial_r_appearance(r_idx); *************** *** 3183,3188 **** --- 3330,3341 ---- reset_target(m_ptr); m_ptr->nickname = 0; + // EGOMON + if(m_ptr->ego_race){ + char buffer[16]; + get_table_name_aux(buffer); + m_ptr->nickname = quark_add(buffer); + } m_ptr->exp = 0; *************** *** 3201,3207 **** if (r_ptr->flags7 & RF7_CHAMELEON) { choose_new_monster(c_ptr->m_idx, TRUE, 0); ! r_ptr = &r_info[m_ptr->r_idx]; m_ptr->mflag2 |= MFLAG2_CHAMELEON; /* Hack - Set sub_align to neutral when the Chameleon Lord is generated as "GUARDIAN" */ --- 3354,3360 ---- if (r_ptr->flags7 & RF7_CHAMELEON) { choose_new_monster(c_ptr->m_idx, TRUE, 0); ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; m_ptr->mflag2 |= MFLAG2_CHAMELEON; /* Hack - Set sub_align to neutral when the Chameleon Lord is generated as "GUARDIAN" */ *************** *** 3250,3255 **** --- 3403,3415 ---- { m_ptr->max_maxhp = damroll(r_ptr->hdice, r_ptr->hside); } + // EGOMON + if(m_ptr->ego_race) + { + u32b hp = m_ptr->max_maxhp * 3L / 2; + + m_ptr->max_maxhp = (s16b)MIN(30000, hp); + } /* Monsters have double hitpoints in Nightmare mode */ if (ironman_nightmare) *************** *** 3269,3274 **** --- 3429,3439 ---- /* Extract the monster base speed */ m_ptr->mspeed = get_mspeed(r_ptr); + // EGOMON + if(m_ptr->ego_race){ + m_ptr->mspeed += randint0(m_ptr->mspeed / 8); + if(m_ptr->mspeed > 199) m_ptr->mspeed = 199; + } if (mode & PM_HASTE) (void)set_monster_fast(c_ptr->m_idx, 100); *************** *** 4130,4136 **** int percentage; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; char m_name[80]; --- 4295,4301 ---- int percentage; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; char m_name[80]; *************** *** 4837,4843 **** { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Not allowed to learn */ --- 5002,5008 ---- { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Not allowed to learn */ *************** *** 5000,5002 **** --- 5165,5168 ---- /* Forget objects */ m_ptr->hold_o_idx = 0; } + Only in Hengband-1.7.20/src: monster2.c.orig diff -cr hengband-relay/src/mspells1.c Hengband-1.7.20/src/mspells1.c *** hengband-relay/src/mspells1.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/mspells1.c Tue Feb 27 21:43:48 2007 *************** *** 65,71 **** static void remove_bad_spells(int m_idx, u32b *f4p, u32b *f5p, u32b *f6p) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; u32b f4 = (*f4p); u32b f5 = (*f5p); --- 65,71 ---- static void remove_bad_spells(int m_idx, u32b *f4p, u32b *f5p, u32b *f6p) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; u32b f4 = (*f4p); u32b f5 = (*f5p); *************** *** 509,515 **** int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_PLAYER; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Determine the radius of the blast */ if ((rad < 1) && breath) rad = (r_ptr->flags2 & (RF2_POWERFUL)) ? 3 : 2; --- 509,515 ---- int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL | PROJECT_PLAYER; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Determine the radius of the blast */ if ((rad < 1) && breath) rad = (r_ptr->flags2 & (RF2_POWERFUL)) ? 3 : 2; *************** *** 837,843 **** bool dispel_check(int m_idx) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Invulnabilty (including the song) */ if (IS_INVULN()) return (TRUE); --- 837,843 ---- bool dispel_check(int m_idx) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Invulnabilty (including the song) */ if (IS_INVULN()) return (TRUE); *************** *** 949,955 **** static int choose_attack_spell(int m_idx, byte spells[], byte num) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; byte escape[96], escape_num = 0; byte attack[96], attack_num = 0; --- 949,955 ---- static int choose_attack_spell(int m_idx, byte spells[], byte num) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; byte escape[96], escape_num = 0; byte attack[96], attack_num = 0; *************** *** 1299,1305 **** byte spell[96], num = 0; u32b f4, f5, f6; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; char m_name[80]; #ifndef JP char m_poss[80]; --- 1299,1305 ---- byte spell[96], num = 0; u32b f4, f5, f6; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; char m_name[80]; #ifndef JP char m_poss[80]; *************** *** 1665,1671 **** /* Check for spell failure (inate attacks never fail) */ if (!spell_is_inate(thrown_spell) ! && (in_no_magic_dungeon || (MON_STUNNED(m_ptr) && one_in_(2)) || (randint0(100) < failrate))) { disturb(1, 0); /* Message */ --- 1665,1672 ---- /* Check for spell failure (inate attacks never fail) */ if (!spell_is_inate(thrown_spell) ! && (in_no_magic_dungeon || (MON_STUNNED(m_ptr) && one_in_(2)) || ! (randint0(100) < failrate) || (MON_DRAINMANA(m_ptr) && one_in_(10)))) { disturb(1, 0); /* Message */ *************** *** 3227,3234 **** #else msg_format("%^s invokes the Hand of Doom!", m_name); #endif ! dam = (((s32b) ((40 + randint1(20)) * (p_ptr->chp))) / 100); ! breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, learnable); break; } --- 3228,3244 ---- #else msg_format("%^s invokes the Hand of Doom!", m_name); #endif ! if(p_ptr->pclass != CLASS_ENCHANTER) ! { ! dam = (((s32b) ((40 + randint1(20)) * (p_ptr->chp))) / 100); ! breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, learnable); ! } ! else ! { ! dam = p_ptr->kawasimi; ! breath(y, x, m_idx, GF_HAND_DOOM, dam, 0, FALSE, MS_HAND_DOOM, learnable); ! } ! break; } *************** *** 4508,4510 **** --- 4518,4521 ---- /* A spell was cast */ return (TRUE); } + Only in Hengband-1.7.20/src: mspells1.c.orig diff -cr hengband-relay/src/mspells2.c Hengband-1.7.20/src/mspells2.c *** hengband-relay/src/mspells2.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/mspells2.c Tue Feb 27 21:43:48 2007 *************** *** 23,29 **** int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Determine the radius of the blast */ if (rad < 1 && breath) rad = (r_ptr->flags2 & RF2_POWERFUL) ? 3 : 2; --- 23,29 ---- int flg = PROJECT_GRID | PROJECT_ITEM | PROJECT_KILL; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Determine the radius of the blast */ if (rad < 1 && breath) rad = (r_ptr->flags2 & RF2_POWERFUL) ? 3 : 2; *************** *** 304,310 **** monster_type *m_ptr = &m_list[m_idx]; monster_type *t_ptr = NULL; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_race *tr_ptr = NULL; u32b f4, f5, f6; --- 304,310 ---- monster_type *m_ptr = &m_list[m_idx]; monster_type *t_ptr = NULL; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_race *tr_ptr = NULL; u32b f4, f5, f6; Only in Hengband-1.7.20/src: mspells2.c.orig diff -cr hengband-relay/src/mspells3.c Hengband-1.7.20/src/mspells3.c *** hengband-relay/src/mspells3.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/mspells3.c Tue Feb 27 21:43:48 2007 *************** *** 1357,1363 **** if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; m_ptr = &m_list[cave[target_row][target_col].m_idx]; ! r_ptr = &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); if (r_ptr->flagsr & RFR_RES_TELE) { --- 1357,1363 ---- if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; m_ptr = &m_list[cave[target_row][target_col].m_idx]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); if (r_ptr->flagsr & RFR_RES_TELE) { *************** *** 1411,1417 **** if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; m_ptr = &m_list[target_m_idx]; ! r_ptr = &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); #ifdef JP msg_format("%^sの足を指さした。", m_name); --- 1411,1417 ---- if (!player_has_los_bold(target_row, target_col)) break; if (!projectable(py, px, target_row, target_col)) break; m_ptr = &m_list[target_m_idx]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); #ifdef JP msg_format("%^sの足を指さした。", m_name); Only in Hengband-1.7.20/src: mspells3.c.orig diff -cr hengband-relay/src/mutation.c Hengband-1.7.20/src/mutation.c *** hengband-relay/src/mutation.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/mutation.c Tue Feb 27 21:43:48 2007 *************** *** 3745,3751 **** } m_ptr = &m_list[c_ptr->m_idx]; ! r_ptr = &r_info[m_ptr->r_idx]; if ((r_ptr->flags3 & RF3_EVIL) && !(r_ptr->flags1 & RF1_QUESTOR) && --- 3745,3751 ---- } m_ptr = &m_list[c_ptr->m_idx]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if ((r_ptr->flags3 & RF3_EVIL) && !(r_ptr->flags1 & RF1_QUESTOR) && Only in Hengband-1.7.20/src: mutation.c.orig diff -cr hengband-relay/src/object1.c Hengband-1.7.20/src/object1.c *** hengband-relay/src/object1.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/object1.c Sun Feb 18 19:38:23 2007 *************** *** 4401,4406 **** --- 4401,4408 ---- /* Get a color */ attr = tval_to_attr[o_ptr->tval % 128]; + if(!attr) + attr = 15; /* Grey out charging items */ if (o_ptr->timeout) *************** *** 4489,4494 **** --- 4491,4497 ---- { object_desc(o_name, o_ptr, 0); attr = tval_to_attr[o_ptr->tval % 128]; + if(!attr)attr = 15; } /* Obtain the length of the description */ *************** *** 4864,4869 **** --- 4867,4875 ---- out_index[k] = i; out_color[k] = tval_to_attr[o_ptr->tval % 128]; + if(out_color[k] == 0)out_color[k] = 15; + + /* Grey out charging items */ if (o_ptr->timeout) { *************** *** 6391,6396 **** --- 6397,6403 ---- /* Acquire inventory color */ out_color[k] = tval_to_attr[o_ptr->tval & 0x7F]; + if(!out_color[k])out_color[k] = 15; /* Save the object description */ strcpy(out_desc[k], o_name); *************** *** 8060,8062 **** --- 8067,8070 ---- } #endif /* ALLOW_EASY_FLOOR */ + diff -cr hengband-relay/src/object2.c Hengband-1.7.20/src/object2.c *** hengband-relay/src/object2.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/object2.c Tue Feb 27 21:43:48 2007 *************** *** 4519,4524 **** --- 4519,4525 ---- case TV_CRAFT_BOOK: case TV_DAEMON_BOOK: case TV_CRUSADE_BOOK: + case TV_ENCHANTMENT_BOOK: case TV_MUSIC_BOOK: case TV_HISSATSU_BOOK: { *************** *** 6389,6395 **** /* Calculate spell damages */ static void spell_damcalc(monster_type *m_ptr, int typ, int dam, int limit, int *max) { ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; int rlev = r_ptr->level; bool ignore_wraith_form = FALSE; --- 6390,6396 ---- /* Calculate spell damages */ static void spell_damcalc(monster_type *m_ptr, int typ, int dam, int limit, int *max) { ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; int rlev = r_ptr->level; bool ignore_wraith_form = FALSE; *************** *** 6726,6732 **** if (MON_CSLEEP(m_ptr)) continue; if (!is_hostile(m_ptr)) continue; ! r_ptr = &r_info[m_ptr->r_idx]; /* Monster spells (only powerful ones)*/ if (projectable(my, mx, yy, xx)) --- 6727,6733 ---- if (MON_CSLEEP(m_ptr)) continue; if (!is_hostile(m_ptr)) continue; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Monster spells (only powerful ones)*/ if (projectable(my, mx, yy, xx)) *************** *** 6805,6811 **** { old_damage = dam_max * 3 / 2; ! if (dam_max > p_ptr->chp / 2) { object_type *o_ptr = choose_warning_item(); --- 6806,6812 ---- { old_damage = dam_max * 3 / 2; ! if ((dam_max > p_ptr->chp / 2 && p_ptr->pclass != CLASS_ENCHANTER) || (p_ptr->pclass == CLASS_ENCHANTER && dam_max >p_ptr->kawasimi / 2 * p_ptr->chp)) { object_type *o_ptr = choose_warning_item(); *************** *** 6827,6832 **** --- 6828,6834 ---- } else old_damage = old_damage / 2; + c_ptr = &cave[yy][xx]; if (((!easy_disarm && is_trap(c_ptr->feat)) || (c_ptr->mimic && is_trap(c_ptr->feat))) && !one_in_(13)) *************** *** 8557,8559 **** --- 8559,8562 ---- case 5: add_essence(10);break; } } + Only in Hengband-1.7.20/src: object2.c.orig diff -cr hengband-relay/src/racial.c Hengband-1.7.20/src/racial.c *** hengband-relay/src/racial.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/racial.c Tue Feb 27 21:43:48 2007 *************** *** 1138,1143 **** --- 1138,1180 ---- p_ptr->redraw |= (PR_MANA); break; } + case CLASS_ENCHANTER: + + { + if (total_friends) + { + #ifdef JP + msg_print("今はペットを操ることに集中していないと。"); + #else + msg_print("You need concentration on the pets now."); + #endif + return FALSE; + } + if(p_ptr->konpeito <= 1000) + { + #ifdef JP + msg_print("甘くておいしい。"); + #else + msg_print("That is elegantly sweet and tastes good!"); + #endif + + p_ptr->csp += (3 + p_ptr->lev/20); + if (p_ptr->csp >= p_ptr->msp) + { + p_ptr->csp = p_ptr->msp; + p_ptr->csp_frac = 0; + } + + /* Redraw mana */ + p_ptr->redraw |= (PR_MANA); + set_konpeito(p_ptr->konpeito * 21 / 20 + 10, TRUE); + }else + { + msg_print("氷砂糖は析出している最中だ。"); + set_konpeito(p_ptr->konpeito - 1, TRUE); + } + break; + } case CLASS_TOURIST: { if (command == -3) *************** *** 1287,1293 **** } if (!do_riding(TRUE)) return TRUE; m_ptr = &m_list[p_ptr->riding]; ! r_ptr = &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); #ifdef JP msg_format("%sに乗った。",m_name); --- 1324,1330 ---- } if (!do_riding(TRUE)) return TRUE; m_ptr = &m_list[p_ptr->riding]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_desc(m_name, m_ptr, 0); #ifdef JP msg_format("%sに乗った。",m_name); *************** *** 1835,1840 **** --- 1872,1878 ---- break; case CLASS_PRIEST: case CLASS_PALADIN: + case CLASS_ENCHANTER: if (one_in_(3)) { Type = GF_HELL_FIRE; *************** *** 2389,2394 **** --- 2427,2447 ---- power_desc[num++].number = -3; break; } + case CLASS_ENCHANTER: + { + #ifdef JP + strcpy(power_desc[num].name, "氷砂糖"); + #else + strcpy(power_desc[num].name, "Konpeito"); + #endif + + power_desc[num].level = 25; + power_desc[num].cost = 0; + power_desc[num].stat = A_WIS; + power_desc[num].fail = 0; + power_desc[num++].number = -3; + break; + } case CLASS_TOURIST: { #ifdef JP *************** *** 3869,3871 **** --- 3922,3925 ---- /* Success */ return; } + Only in Hengband-1.7.20/src: racial.c.orig diff -cr hengband-relay/src/save.c Hengband-1.7.20/src/save.c *** hengband-relay/src/save.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/save.c Tue Feb 27 21:43:48 2007 *************** *** 179,185 **** if (flags & SAVE_ITEM_ART_NAME) wr_string(quark_str(o_ptr->art_name)); } - /* * Write a "monster" record */ --- 179,184 ---- *************** *** 196,201 **** --- 195,203 ---- if (MON_STUNNED(m_ptr)) flags |= SAVE_MON_STUNNED; if (MON_CONFUSED(m_ptr)) flags |= SAVE_MON_CONFUSED; if (MON_MONFEAR(m_ptr)) flags |= SAVE_MON_MONFEAR; + /*魔力吸虫*/ + if (MON_DRAINMANA(m_ptr)) flags |= SAVE_MON_DRAINMANA; + if (MON_HELMINTH(m_ptr)) flags |= SAVE_MON_HELMINTH; if (m_ptr->target_y) flags |= SAVE_MON_TARGET_Y; if (m_ptr->target_x) flags |= SAVE_MON_TARGET_X; if (MON_INVULNER(m_ptr)) flags |= SAVE_MON_INVULNER; *************** *** 204,209 **** --- 206,213 ---- if (m_ptr->mflag2) flags |= SAVE_MON_MFLAG2; if (m_ptr->nickname) flags |= SAVE_MON_NICKNAME; if (m_ptr->parent_m_idx) flags |= SAVE_MON_PARENT; + // EGOMON + if (m_ptr->ego_race) flags |= SAVE_MON_EGO; /*** Monster save flags ***/ wr_u32b(flags); *************** *** 250,255 **** --- 254,269 ---- tmp8u = (byte)m_ptr->mtimed[MTIMED_MONFEAR]; wr_byte(tmp8u); } + if (flags & SAVE_MON_DRAINMANA) + { + tmp8u = (byte)m_ptr->mtimed[MTIMED_DRAINMANA]; + wr_byte(tmp8u); + } + if (flags & SAVE_MON_HELMINTH) + { + tmp8u = (byte)m_ptr->mtimed[MTIMED_HELMINTH]; + wr_byte(tmp8u); + } if (flags & SAVE_MON_TARGET_Y) wr_s16b(m_ptr->target_y); if (flags & SAVE_MON_TARGET_X) wr_s16b(m_ptr->target_x); if (flags & SAVE_MON_INVULNER) *************** *** 262,267 **** --- 276,297 ---- if (flags & SAVE_MON_MFLAG2) wr_byte(m_ptr->mflag2); if (flags & SAVE_MON_NICKNAME) wr_string(quark_str(m_ptr->nickname)); if (flags & SAVE_MON_PARENT) wr_s16b(m_ptr->parent_m_idx); + // EGOMON + if (flags & SAVE_MON_EGO){ + wr_s16b(m_ptr->ego_race->ac); + wr_s32b(m_ptr->ego_race->mexp); + wr_byte(m_ptr->ego_race->freq_spell); + wr_u32b(m_ptr->ego_race->flags1); + wr_u32b(m_ptr->ego_race->flags2); + wr_u32b(m_ptr->ego_race->flags3); + wr_u32b(m_ptr->ego_race->flags4); + wr_u32b(m_ptr->ego_race->flags5); + wr_u32b(m_ptr->ego_race->flags6); + wr_u32b(m_ptr->ego_race->flags7); + wr_u32b(m_ptr->ego_race->flags8); + wr_u32b(m_ptr->ego_race->flags9); + wr_u32b(m_ptr->ego_race->flagsr); + } } *************** *** 730,735 **** --- 760,767 ---- wr_s16b(p_ptr->multishadow); wr_s16b(p_ptr->dustrobe); + wr_s32b(p_ptr->konpeito); + wr_s16b(p_ptr->chaos_patron); wr_u32b(p_ptr->muta1); wr_u32b(p_ptr->muta2); *************** *** 2232,2234 **** --- 2264,2267 ---- /* Return the result */ return ok; } + Only in Hengband-1.7.20/src: save.c.orig diff -cr hengband-relay/src/spells1.c Hengband-1.7.20/src/spells1.c *** hengband-relay/src/spells1.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/spells1.c Tue Feb 27 21:43:48 2007 *************** *** 613,618 **** --- 613,619 ---- case GF_POIS: case GF_NUKE: case GF_DEATH_RAY: + case GF_ILLNESS: #ifdef JP message = "枯れた";break; #else *************** *** 1692,1698 **** monster_type *m_ptr = &m_list[c_ptr->m_idx]; monster_type *caster_ptr = (who > 0) ? &m_list[who] : NULL; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; char killer[80]; --- 1693,1699 ---- monster_type *m_ptr = &m_list[c_ptr->m_idx]; monster_type *caster_ptr = (who > 0) ? &m_list[who] : NULL; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; char killer[80]; *************** *** 3379,3385 **** { if (seen) obvious = TRUE; ! if (is_pet(m_ptr) || (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & (RF7_NAZGUL | RF7_UNIQUE2))) { #ifdef JP note = "には効果がなかった。"; --- 3380,3386 ---- { if (seen) obvious = TRUE; ! if (is_pet(m_ptr) || (r_ptr->flags1 & (RF1_UNIQUE | RF1_QUESTOR)) || (r_ptr->flags7 & (RF7_NAZGUL | RF7_UNIQUE2)) || p_ptr->inside_arena) { #ifdef JP note = "には効果がなかった。"; *************** *** 5772,5777 **** --- 5773,5945 ---- break; } + /*魔力吸虫*/ + case GF_DRAINMANA: + { + if (seen) obvious = TRUE; + + if (r_ptr->flagsr & RFR_RES_ALL) + { + #ifdef JP + note = "には効果がなかった!"; + #else + note = " is immune."; + #endif + dam = 0; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + break; + } + + if (set_monster_drainmana(c_ptr->m_idx, MON_DRAINMANA(m_ptr) + 15)) + { + #ifdef JP + note = "に魔力吸虫がくっついた。"; + #else + note = " starts moving slower."; + #endif + } + + + /* No "real" damage */ + dam = 0; + break; + } + /*究極テレポートアウェイ*/ + case GF_AWAY_ULT: + { + bool resists_tele = FALSE; + int mlev = r_ptr->level; + if (r_ptr->flags1 & (RF1_UNIQUE)) + mlev *= 2; + if (r_ptr->flagsr & RFR_RES_TELE) + { + if (r_ptr->flagsr & RFR_RES_ALL) + { + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + #ifdef JP + note = "には効果がなかった!"; + #else + note = " is unaffected!"; + #endif + + resists_tele = TRUE; + } + else if (mlev / 3 > randint1(100)) + { + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= RFR_RES_TELE; + #ifdef JP + note = "には耐性がある!"; + #else + note = " resists!"; + #endif + + resists_tele = TRUE; + } + } + + if (!resists_tele) + { + /* Obvious */ + if (seen) obvious = TRUE; + + /* Prepare to teleport */ + do_dist = dam; + } + + /* No "real" damage */ + dam = 0; + break; + } + /*悪疫*/ + case GF_ILLNESS: + { + if (seen) obvious = TRUE; + + if (r_ptr->flagsr & RFR_RES_ALL) + { + #ifdef JP + note = "には完全な耐性がある!"; + #else + note = " is immune."; + #endif + dam = 0; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + break; + } + if (r_ptr->flagsr & RFR_RES_DISE) + { + #ifdef JP + note = "には耐性がある。"; + #else + note = " resists."; + #endif + + dam *= 3; dam /= randint1(6) + 6; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_DISE); + } + else + { + if (!(r_ptr->flags3 & RF3_NO_STUN) && one_in_(2)) + do_stun = (10 + randint1(15) + r) / (r + 1); + if (!(r_ptr->flags3 & RF3_NO_CONF) && one_in_(3)) + do_conf = (10 + randint1(15) + r) / (r + 1); + if (!(r_ptr->flags3 & RF3_NO_FEAR) && one_in_(8)) + do_fear = dam; + if (!(r_ptr->flagsr & RFR_RES_INER || r_ptr->flags1 & (RF1_UNIQUE)) && one_in_(5)) + { + set_monster_slow(c_ptr->m_idx, MON_SLOW(m_ptr) + 50); + + #ifdef JP + note = "の動きが遅くなった。"; + #else + note = " starts moving slower."; + #endif + } + if (!(r_ptr->flags3 & RF3_NO_SLEEP || r_ptr->flags1 & (RF1_UNIQUE)) && one_in_(7)) + { + note = "は寝込んでしまった。"; + do_sleep = 500; + } + + } + + break; + } + /*寄生虫*/ + case GF_HELMINTH: + { + if(r_ptr->flags2 & RF2_REGENERATE) dam /= 2; + if (seen) obvious = TRUE; + + if (r_ptr->flagsr & RFR_RES_ALL) + { + #ifdef JP + note = "には効果がなかった!"; + #else + note = " is immune."; + #endif + dam = 0; + if (is_original_ap_and_seen(m_ptr)) r_ptr->r_flagsr |= (RFR_RES_ALL); + break; + } + + if (set_monster_helminth(c_ptr->m_idx, MON_HELMINTH(m_ptr) + dam)) + { + #ifdef JP + note = "の体力が奪われていく。"; + #else + note = " starts moving slower."; + #endif + } + + + /* No "real" damage */ + dam = 0; + break; + } + + + } *************** *** 5943,5949 **** m_ptr = &m_list[c_ptr->m_idx]; /* Hack -- Get new race */ ! r_ptr = &r_info[m_ptr->r_idx]; } /* Handle "teleport" */ --- 6111,6117 ---- m_ptr = &m_list[c_ptr->m_idx]; /* Hack -- Get new race */ ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; } /* Handle "teleport" */ *************** *** 6443,6449 **** /* Get the source monster */ m_ptr = &m_list[who]; /* Extract the monster level */ ! rlev = (((&r_info[m_ptr->r_idx])->level >= 1) ? (&r_info[m_ptr->r_idx])->level : 1); /* Get the monster name */ monster_desc(m_name, m_ptr, 0); --- 6611,6617 ---- /* Get the source monster */ m_ptr = &m_list[who]; /* Extract the monster level */ ! rlev = (((m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx])->level >= 1) ? (m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx])->level : 1); /* Get the monster name */ monster_desc(m_name, m_ptr, 0); *************** *** 7696,7705 **** #endif curse_equipment(40, 20); } ! ! get_damage = take_hit(DAMAGE_ATTACK, dam, m_name, monspell); ! ! if (p_ptr->chp < 1) p_ptr->chp = 1; /* Paranoia */ } break; } --- 7864,7875 ---- #endif curse_equipment(40, 20); } ! get_damage = take_hit(DAMAGE_ATTACK, dam, m_name, monspell); ! ! if(p_ptr->pclass != CLASS_ENCHANTER) ! { ! if (p_ptr->chp < 1) p_ptr->chp = 1; /* Paranoia */ ! } } break; } *************** *** 9044,9050 **** if (grids <= 1) { monster_type *m_ptr = &m_list[cave[y][x].m_idx]; ! monster_race *ref_ptr = &r_info[m_ptr->r_idx]; if ((flg & PROJECT_REFLECTABLE) && cave[y][x].m_idx && (ref_ptr->flags2 & RF2_REFLECTING) && ((cave[y][x].m_idx != p_ptr->riding) || !(flg & PROJECT_PLAYER)) && --- 9214,9220 ---- if (grids <= 1) { monster_type *m_ptr = &m_list[cave[y][x].m_idx]; ! monster_race *ref_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if ((flg & PROJECT_REFLECTABLE) && cave[y][x].m_idx && (ref_ptr->flags2 & RF2_REFLECTING) && ((cave[y][x].m_idx != p_ptr->riding) || !(flg & PROJECT_PLAYER)) && Only in Hengband-1.7.20/src: spells1.c.orig diff -cr hengband-relay/src/spells2.c Hengband-1.7.20/src/spells2.c *** hengband-relay/src/spells2.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/spells2.c Tue Feb 27 21:43:49 2007 *************** *** 624,629 **** --- 624,650 ---- } } break; + case CLASS_ENCHANTER: + { + #ifdef JP + sprintf(Dummy, "あなたはダメージを回避することができる。(回避力 %d)", + #else + sprintf(Dummy, "You can escape being damaged(EV %d).", + #endif + + p_ptr->kawasimi); + info[i++] = Dummy; + if (plev > 24) + { + #ifdef JP + info[i++] = "あなたは氷砂糖をなめることでMPを回復させることができる。(0 MP)"; + #else + info[i++] = "You can eat konpeito to regenerate your mana (cost 0)."; + #endif + } + } + break; + case CLASS_ROGUE: if (plev > 7) { *************** *** 3848,3853 **** --- 3869,3875 ---- (tv == TV_CRAFT_BOOK) || (tv == TV_DAEMON_BOOK) || (tv == TV_CRUSADE_BOOK) || + (tv == TV_ENCHANTMENT_BOOK) || (tv == TV_MUSIC_BOOK) || (tv == TV_HISSATSU_BOOK) || ((o_ptr->to_a > 0) || (o_ptr->to_h + o_ptr->to_d > 0))) *************** *** 3894,3900 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 3916,3922 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 3956,3962 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 3978,3984 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4026,4032 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4048,4054 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4101,4107 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4123,4129 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4168,4174 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4190,4196 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4235,4241 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4257,4263 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4309,4315 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4331,4337 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4488,4493 **** --- 4510,4520 ---- return (project_hack(GF_OLD_SLOW, p_ptr->lev)); } + bool slow_monsters_power(int power) + { + return (project_hack(GF_OLD_SLOW, power)); + } + /* * Sleep monsters */ *************** *** 4593,4599 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! /* monster_race *r_ptr = &r_info[m_ptr->r_idx]; */ /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4620,4626 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! /* monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; */ /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4643,4649 **** { int msec = delay_factor * delay_factor * delay_factor; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; bool resist = FALSE; if (is_pet(m_ptr) && !player_cast) return FALSE; --- 4670,4676 ---- { int msec = delay_factor * delay_factor * delay_factor; monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; bool resist = FALSE; if (is_pet(m_ptr) && !player_cast) return FALSE; *************** *** 4774,4780 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4801,4807 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4862,4868 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4889,4895 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4911,4917 **** for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; --- 4938,4944 ---- for (i = 1; i < m_max; i++) { monster_type *m_ptr = &m_list[i]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Paranoia -- Skip dead monsters */ if (!m_ptr->r_idx) continue; *************** *** 4991,5002 **** --- 5018,5033 ---- if (MON_MONFEAR(m_ptr)) strcat(buf,"恐怖 "); if (MON_CONFUSED(m_ptr)) strcat(buf,"混乱 "); if (MON_INVULNER(m_ptr)) strcat(buf,"無敵 "); + if (MON_DRAINMANA(m_ptr)) strcat(buf,"吸虫 "); + if (MON_HELMINTH(m_ptr)) strcat(buf,"寄生 "); #else if (MON_CSLEEP(m_ptr)) strcat(buf,"sleeping "); if (MON_STUNNED(m_ptr)) strcat(buf,"stunned "); if (MON_MONFEAR(m_ptr)) strcat(buf,"scared "); if (MON_CONFUSED(m_ptr)) strcat(buf,"confused "); if (MON_INVULNER(m_ptr)) strcat(buf,"invulnerable "); + if (MON_DRAINMANA(m_ptr)) strcat(buf,"drainmana "); + if (MON_HELMINTH(m_ptr)) strcat(buf,"helminth "); #endif buf[strlen(buf)-1] = '\0'; prt(buf,0,0); *************** *** 5129,5135 **** if (c_ptr->m_idx) { monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; if (in_generate) /* In generation */ { --- 5160,5166 ---- if (c_ptr->m_idx) { monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (in_generate) /* In generation */ { *************** *** 5605,5611 **** if (c_ptr->m_idx) { monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Quest monsters */ if (r_ptr->flags1 & RF1_QUESTOR) --- 5636,5642 ---- if (c_ptr->m_idx) { monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Quest monsters */ if (r_ptr->flags1 & RF1_QUESTOR) *************** *** 5898,5904 **** monster_race *r_ptr; if (!m_ptr->r_idx || !is_pet(m_ptr)) continue; ! r_ptr = &r_info[m_ptr->r_idx]; /* Uniques resist discharging */ if (r_ptr->flags1 & RF1_UNIQUE) --- 5929,5935 ---- monster_race *r_ptr; if (!m_ptr->r_idx || !is_pet(m_ptr)) continue; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Uniques resist discharging */ if (r_ptr->flags1 & RF1_UNIQUE) *************** *** 5977,5983 **** monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* Update the monster */ update_mon(c_ptr->m_idx, FALSE); --- 6008,6014 ---- monster_type *m_ptr = &m_list[c_ptr->m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* Update the monster */ update_mon(c_ptr->m_idx, FALSE); *************** *** 6619,6625 **** } m_ptr = &m_list[c_ptr->m_idx]; ! r_ptr = &r_info[m_ptr->r_idx]; (void)set_monster_csleep(c_ptr->m_idx, 0); --- 6650,6656 ---- } m_ptr = &m_list[c_ptr->m_idx]; ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; (void)set_monster_csleep(c_ptr->m_idx, 0); *************** *** 6778,6783 **** --- 6809,6819 ---- return (project_hook(GF_OLD_SLOW, dir, p_ptr->lev, flg)); } + bool slow_monster_power(int dir, int power) + { + int flg = PROJECT_STOP | PROJECT_KILL | PROJECT_REFLECTABLE; + return (project_hook(GF_OLD_SLOW, dir, power, flg)); + } bool sleep_monster(int dir) { *************** *** 6791,6796 **** --- 6827,6836 ---- return (fire_ball_hide(GF_STASIS, dir, p_ptr->lev*2, 0)); } + bool stasis_monster_power(int dir,int power) + { + return (fire_ball_hide(GF_STASIS, dir, power, 0)); + } bool stasis_evil(int dir) { *************** *** 6915,6920 **** --- 6955,6968 ---- int flg = PROJECT_ITEM | PROJECT_HIDE; return (project(who, 5, y, x, 0, GF_ANIM_DEAD, flg, -1)); } + /* + * 魔力吸虫 + */ + bool DRAINMANA(int dir) + { + int flg = PROJECT_STOP | PROJECT_KILL ; + return (project_hook(GF_DRAINMANA, dir, p_ptr->lev, flg)); + } void call_chaos(void) *************** *** 7600,7602 **** --- 7648,7651 ---- } } } + Only in Hengband-1.7.20/src: spells2.c.orig diff -cr hengband-relay/src/spells3.c Hengband-1.7.20/src/spells3.c *** hengband-relay/src/spells3.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/spells3.c Tue Feb 27 21:43:49 2007 *************** *** 37,43 **** if (!(mode & TELEPORT_PASSIVE)) { ! if (!monster_can_cross_terrain(c_ptr->feat, &r_info[m_ptr->r_idx], 0)) return FALSE; } return TRUE; --- 37,43 ---- if (!(mode & TELEPORT_PASSIVE)) { ! if (!monster_can_cross_terrain(c_ptr->feat, m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx], 0)) return FALSE; } return TRUE; *************** *** 449,455 **** if (tmp_m_idx && (p_ptr->riding != tmp_m_idx)) { monster_type *m_ptr = &m_list[tmp_m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* * The latter limitation is to avoid --- 449,455 ---- if (tmp_m_idx && (p_ptr->riding != tmp_m_idx)) { monster_type *m_ptr = &m_list[tmp_m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* * The latter limitation is to avoid *************** *** 487,493 **** if (tmp_m_idx && (p_ptr->riding != tmp_m_idx) && (m_idx != tmp_m_idx)) { monster_type *m_ptr = &m_list[tmp_m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; /* * The latter limitation is to avoid --- 487,493 ---- if (tmp_m_idx && (p_ptr->riding != tmp_m_idx) && (m_idx != tmp_m_idx)) { monster_type *m_ptr = &m_list[tmp_m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; /* * The latter limitation is to avoid *************** *** 4698,4703 **** --- 4698,4704 ---- case TV_CRAFT_BOOK: case TV_DAEMON_BOOK: case TV_CRUSADE_BOOK: + case TV_ENCHANTMENT_BOOK: case TV_MUSIC_BOOK: case TV_HISSATSU_BOOK: { *************** *** 6074,6076 **** --- 6075,6078 ---- } return summon_specific((pet ? -1 : 0), y, x, level, SUMMON_KIN, mode); } + Only in Hengband-1.7.20/src: spells3.c.orig diff -cr hengband-relay/src/store.c Hengband-1.7.20/src/store.c *** hengband-relay/src/store.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/store.c Thu Dec 28 00:40:16 2006 *************** *** 1019,1024 **** --- 1019,1025 ---- case TV_CRAFT_BOOK: case TV_DAEMON_BOOK: case TV_CRUSADE_BOOK: + case TV_ENCHANTMENT_BOOK: case TV_MUSIC_BOOK: case TV_HISSATSU_BOOK: { *************** *** 1527,1532 **** --- 1528,1534 ---- case TV_CRAFT_BOOK: case TV_DAEMON_BOOK: case TV_CRUSADE_BOOK: + case TV_ENCHANTMENT_BOOK: case TV_MUSIC_BOOK: break; default: *************** *** 2233,2238 **** --- 2235,2241 ---- { byte a = object_attr(o_ptr); char c = object_char(o_ptr); + if(!a) a = 15; #ifdef AMIGA if (a & 0x80) *************** *** 2256,2261 **** --- 2259,2265 ---- /* Describe the object */ object_desc(o_name, o_ptr, 0); o_name[maxwid] = '\0'; + if(!tval_to_attr[o_ptr->tval])tval_to_attr[o_ptr->tval] = 15; c_put_str(tval_to_attr[o_ptr->tval], o_name, i+6, cur_col); /* Show weights */ *************** *** 2286,2291 **** --- 2290,2296 ---- /* Describe the object (fully) */ object_desc(o_name, o_ptr, 0); o_name[maxwid] = '\0'; + if(!tval_to_attr[o_ptr->tval])tval_to_attr[o_ptr->tval] = 15; c_put_str(tval_to_attr[o_ptr->tval], o_name, i+6, cur_col); /* Show weights */ *************** *** 5361,5363 **** --- 5366,5370 ---- object_wipe(o_ptr); /* Don't leave a bogus object behind... */ } + + diff -cr hengband-relay/src/tables.c Hengband-1.7.20/src/tables.c *** hengband-relay/src/tables.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/tables.c Wed Feb 28 11:20:26 2007 *************** *** 2841,2847 **** 72, 6, 180, 25, 66, 4, 150, 20, 0, ! 0x7FFFFFF, }, { #ifdef JP --- 2841,2847 ---- 72, 6, 180, 25, 66, 4, 150, 20, 0, ! 0xFFFFFFF, }, { #ifdef JP *************** *** 2856,2862 **** 66, 6, 130, 15, 62, 6, 100, 10, 2, ! 0x677E7FF, }, { #ifdef JP --- 2856,2862 ---- 66, 6, 130, 15, 62, 6, 100, 10, 2, ! 0xE77E7FF, }, { #ifdef JP *************** *** 2887,2893 **** 36, 3, 60, 3, 33, 3, 50, 3, 4, ! 0x76FFC0B, }, { #ifdef JP --- 2887,2893 ---- 36, 3, 60, 3, 33, 3, 50, 3, 4, ! 0xF6FFC0B, }, { #ifdef JP *************** *** 2917,2923 **** 48, 3, 150, 10, 46, 3, 120, 10, 5, ! 0x1890005, }, { #ifdef JP --- 2917,2923 ---- 48, 3, 150, 10, 46, 3, 120, 10, 5, ! 0x9890005, }, { #ifdef JP *************** *** 2932,2938 **** 66, 1, 150, 5, 62, 1, 120, 5, 3, ! 0x5D8818D, }, { #ifdef JP --- 2932,2938 ---- 66, 1, 150, 5, 62, 1, 120, 5, 3, ! 0xDD8818D, }, { #ifdef JP *************** *** 2947,2953 **** 96, 10, 250, 50, 84, 8, 225, 40, 3, ! 0x0880005, }, { #ifdef JP --- 2947,2953 ---- 96, 10, 250, 50, 84, 8, 225, 40, 3, ! 0x8880005, }, { #ifdef JP *************** *** 2962,2968 **** 82, 5, 190, 20, 78, 6, 180, 15, 0, ! 0x7FFF7FF, }, { #ifdef JP --- 2962,2968 ---- 82, 5, 190, 20, 78, 6, 180, 15, 0, ! 0xFFFF7FF, }, { #ifdef JP *************** *** 2992,2998 **** 82, 5, 200, 20, 78, 6, 190, 15, 0, ! 0x5C0A09D, }, { #ifdef JP --- 2992,2998 ---- 82, 5, 200, 20, 78, 6, 190, 15, 0, ! 0xDC0A09D, }, { #ifdef JP *************** *** 3007,3013 **** 92, 10, 255, 60, 80, 8, 235, 60, 3, ! 0x0A80407, }, { #ifdef JP --- 3007,3013 ---- 92, 10, 255, 60, 80, 8, 235, 60, 3, ! 0x8A80407, }, { #ifdef JP *************** *** 3037,3043 **** 111, 11, 255, 86, 99, 11, 250, 86, 0, ! 0x23D4727, }, { #ifdef JP --- 3037,3043 ---- 111, 11, 255, 86, 99, 11, 250, 86, 0, ! 0xA3D4727, }, { #ifdef JP *************** *** 3067,3073 **** 50, 3, 90, 6, 50, 3, 75, 3, 2, ! 0x667360F, }, { #ifdef JP --- 3067,3073 ---- 50, 3, 90, 6, 50, 3, 75, 3, 2, ! 0xE67360F, }, { #ifdef JP *************** *** 3082,3088 **** 60, 3, 80, 4, 54, 3, 70, 4, 2, ! 0x04D8011, }, { #ifdef JP --- 3082,3088 ---- 60, 3, 80, 4, 54, 3, 70, 4, 2, ! 0x84D8011, }, { #ifdef JP *************** *** 3112,3118 **** 43, 3, 92, 6, 40, 3, 78, 3, 5, ! 0x569040F, }, { #ifdef JP --- 3112,3118 ---- 43, 3, 92, 6, 40, 3, 78, 3, 5, ! 0xD69040F, }, { #ifdef JP *************** *** 3127,3133 **** 60, 4, 100, 6, 54, 4, 80, 6, 5, ! 0x677C7DF, }, { #ifdef JP --- 3127,3133 ---- 60, 4, 100, 6, 54, 4, 80, 6, 5, ! 0xE77C7DF, }, { #ifdef JP *************** *** 3142,3148 **** 76, 1, 160, 5, 72, 1, 130, 5, 2, ! 0x7FFE757, }, { #ifdef JP --- 3142,3148 ---- 76, 1, 160, 5, 72, 1, 130, 5, 2, ! 0xFFFE757, }, { #ifdef JP *************** *** 3157,3163 **** 68, 6, 142, 15, 63, 6, 112, 10, 4, ! 0x2334746, }, { #ifdef JP --- 3157,3163 ---- 68, 6, 142, 15, 63, 6, 112, 10, 4, ! 0xA334746, }, { #ifdef JP *************** *** 3262,3268 **** 32, 2, 75, 2, 29, 2, 65, 2, 4, ! 0x623F65E, }, { #ifdef JP --- 3262,3268 ---- 32, 2, 75, 2, 29, 2, 65, 2, 4, ! 0xE23F65E, }, { #ifdef JP *************** *** 3291,3297 **** 111, 11, 255, 50, 99, 11, 250, 45, 0, ! 0x0010005, }, { #ifdef JP --- 3291,3297 ---- 111, 11, 255, 50, 99, 11, 250, 45, 0, ! 0x8010005, }, { #ifdef JP *************** *** 3306,3312 **** 82, 5, 190, 20, 78, 6, 180, 15, 3, ! 0x779F777, }, { #ifdef JP --- 3306,3312 ---- 82, 5, 190, 20, 78, 6, 180, 15, 3, ! 0xF79F777, }, { #ifdef JP *************** *** 3338,3344 **** 82, 5, 190, 20, 78, 6, 180, 15, 0, ! 0x7FFF7FF, }, { #ifdef JP --- 3338,3344 ---- 82, 5, 190, 20, 78, 6, 180, 15, 0, ! 0xFFFF7FF, }, { #ifdef JP *************** *** 3352,3358 **** 80, 8, 90, 20, 73, 8, 80, 15, 4, ! 0x633C7DF, }, { #ifdef JP --- 3352,3358 ---- 80, 8, 90, 20, 73, 8, 80, 15, 4, ! 0xE33C7DF, }, { #ifdef JP *************** *** 3367,3373 **** 48, 6, 150, 25, 44, 4, 130, 20, 0, ! 0x418B7AD, }, { #ifdef JP --- 3367,3373 ---- 48, 6, 150, 25, 44, 4, 130, 20, 0, ! 0xC18B7AD, }, { #ifdef JP *************** *** 3714,3719 **** --- 3714,3730 ---- 15, 10, 10, 0, 0, 0, 25,18, 2, 20, 40 }, + { + #ifdef JP + "呪術師", + #endif + "Enchanter", + + {-1, -3, 3, 2, -2, 2}, + 25, 35, 38, 3, 16, 22, 50, 30, + 7, 11, 12, 0, 0, 0, 13, 11, + 0, 20, 35 + }, }; player_seikaku seikaku_info[MAX_SEIKAKU] = *************** *** 4041,4046 **** --- 4052,4058 ---- (CH_NONE), /* Weaponsmith */ (CH_NONE), /* Mirror-master */ (CH_NONE), /* Ninja */ + (CH_ENCHANTMENT), /* ENCHANTER */ }; *************** *** 4083,4092 **** --- 4095,4109 ---- (CH_NONE), /* Weaponsmith */ (CH_NONE), /* Mirror-master */ (CH_NONE), /* Ninja */ + (CH_LIFE | CH_SORCERY | CH_NATURE | + CH_CHAOS | CH_DEATH | CH_TRUMP | + CH_ARCANE | CH_ENCHANT | CH_DAEMON | + CH_CRUSADE), /* ENCHANTER */ }; #ifdef JP + /* cptr realm_names[] = { "魔法なし", *************** *** 4100,4109 **** --- 4117,4150 ---- "匠", "悪魔", "破邪", + "呪術", + "不明", "不明", "不明", "不明", "不明", + "歌", + "武芸", + "不明" + }; + */ + cptr realm_names[] = + { + "魔法なし", + "生命", + "仙術", + "自然", + "カオス", + "暗黒", + "トランプ", + "秘術", + "匠", + "悪魔", + "破邪", + "呪術", + "不明", + "不明", + "不明", "不明", "歌", "武芸", *************** *** 4128,4133 **** --- 4169,4175 ---- "Craft", "Daemon", "Crusade", + "Enchantment", "unknown", "unknown", "unknown", *************** *** 4607,4612 **** --- 4649,4667 ---- "暗殺者", "死の長き腕", }, + /* Enchanter */ + { + "志願兵", + "見習い", + "軍人", + "軍属", + "まじない師", + "呪術師", + "達人呪術師", + "英雄", + "隠者", + "魔法使い", + }, }; #else *************** *** 4989,4994 **** --- 5044,5061 ---- "Assassinator", "Death Lord", }, + /* Enchantment */ + { + "Volunteer", + "Novice", + "Servucenan", + "Civilian employee", + "Charm Maker", + "Enchanter", + "Tatsuzin", + "Hero", + "Eremite", + "Magician", }; #endif *************** *** 6169,6174 **** --- 6236,6249 ---- "powerup_home", "Increase capacity of your home (*)" }, #endif + #ifdef JP + { &ego_monster, TRUE, OPT_PAGE_BIRTH, 4, 4, + "ego_monster", "エゴモンスターの出現を許可する" }, + #else + { &ego_monster, TRUE, OPT_PAGE_BIRTH, 4, 4, + "ego_monster", "Allow ego monster to exist" }, + #endif + /*** Easy Object Auto-Destroyer ***/ #ifdef JP *************** *** 7237,7239 **** --- 7312,7317 ---- 0, /* CONVERT */ 0, /* GLASS */ }; + + + diff -cr hengband-relay/src/types.h Hengband-1.7.20/src/types.h *** hengband-relay/src/types.h Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/types.h Tue Feb 27 21:43:49 2007 *************** *** 610,615 **** --- 610,617 ---- u32b smart; /* Field for "smart_learn" */ s16b parent_m_idx; + // EGOMON + monster_race* ego_race; }; *************** *** 995,1000 **** --- 997,1006 ---- s32b msp; /* Max mana pts */ s32b csp; /* Cur mana pts */ u32b csp_frac; /* Cur mana frac (times 2^16) */ + + s32b maxkawasimi; + s32b kawasimi; + s32b konpeito; s16b max_plv; /* Max Player Level */ Only in Hengband-1.7.20/src: types.h.orig diff -cr hengband-relay/src/variable.c Hengband-1.7.20/src/variable.c *** hengband-relay/src/variable.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/variable.c Wed Feb 28 11:18:38 2007 *************** *** 12,18 **** #include "angband.h" - /* * Hack -- Link a copyright message into the executable */ --- 12,17 ---- *************** *** 305,311 **** bool autoroller; /* Allow use of autoroller for stats (*) */ bool autochara; /* Autoroll for weight, height and social status */ bool powerup_home; /* Increase capacity of your home (*) */ ! /*** Easy Object Auto-Destroyer ***/ --- 304,310 ---- bool autoroller; /* Allow use of autoroller for stats (*) */ bool autochara; /* Autoroll for weight, height and social status */ bool powerup_home; /* Increase capacity of your home (*) */ ! bool ego_monster; /* Whether ego monster can exist or not */ /*** Easy Object Auto-Destroyer ***/ *************** *** 650,655 **** --- 649,655 ---- "unused", "explode", "glass", + "wanted" }; *************** *** 1287,1289 **** --- 1287,1296 ---- char *server_name; int server_port; #endif + + + + + + + diff -cr hengband-relay/src/wizard1.c Hengband-1.7.20/src/wizard1.c *** hengband-relay/src/wizard1.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/wizard1.c Sun Dec 24 20:08:51 2006 *************** *** 195,200 **** --- 195,201 ---- { TV_CRAFT_BOOK, "魔法書 (匠)" }, { TV_DAEMON_BOOK, "魔法書 (悪魔)" }, { TV_CRUSADE_BOOK, "魔法書 (破邪)" }, + { TV_ENCHANTMENT_BOOK,"魔法書 (呪術)"}, { TV_MUSIC_BOOK, "歌集" }, { TV_HISSATSU_BOOK, "武芸の書" }, #else *************** *** 208,213 **** --- 209,215 ---- { TV_CRAFT_BOOK, "Books (Craft)" }, { TV_DAEMON_BOOK, "Books (Daemon)" }, { TV_CRUSADE_BOOK, "Books (Crusade)" }, + { TV_ENCHANTMENT_BOOK, "Books (Enchantment)" }, { TV_MUSIC_BOOK, "Song Books" }, { TV_HISSATSU_BOOK, "Books (Kendo)" }, #endif *************** *** 2703,2705 **** --- 2705,2708 ---- #endif /* MACINTOSH */ #endif + diff -cr hengband-relay/src/wizard2.c Hengband-1.7.20/src/wizard2.c *** hengband-relay/src/wizard2.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/wizard2.c Sun Dec 24 20:12:35 2006 *************** *** 652,657 **** --- 652,658 ---- { TV_CRAFT_BOOK, "Craft Spellbook"}, { TV_DAEMON_BOOK, "Daemon Spellbook"}, { TV_CRUSADE_BOOK, "Crusade Spellbook"}, + { TV_ENCHANTMENT_BOOK, "Enchantment Spellbook"}, { TV_MUSIC_BOOK, "Music Spellbook" }, { TV_HISSATSU_BOOK, "Book of Kendo" }, { TV_PARCHMENT, "Parchment" }, *************** *** 2130,2133 **** --- 2131,2135 ---- #endif #endif + diff -cr hengband-relay/src/xtra1.c Hengband-1.7.20/src/xtra1.c *** hengband-relay/src/xtra1.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/xtra1.c Wed Feb 28 22:07:31 2007 *************** *** 598,603 **** --- 598,604 ---- /* An Eye for an Eye */ if (p_ptr->tim_eyeeye) ADD_FLG(BAR_EYEEYE); + /* Calcurate length */ for (i = 0; bar[i].sstr; i++) *************** *** 883,889 **** /* 最大ヒットポイント */ sprintf(tmp, "%4ld", p_ptr->mhp); color = TERM_L_GREEN; - c_put_str(color, tmp, ROW_CURHP, COL_CURHP + 8 ); } --- 884,889 ---- *************** *** 912,918 **** /* 現在のマジックポイント */ sprintf(tmp, "%4ld", p_ptr->csp); - if (p_ptr->csp >= p_ptr->msp) { color = TERM_L_GREEN; --- 912,917 ---- *************** *** 2065,2071 **** num_allowed = (num_allowed+1)/2; if (num_allowed>(32+bonus)) num_allowed = 32+bonus; } ! else if ((p_ptr->pclass == CLASS_MAGE) || (p_ptr->pclass == CLASS_PRIEST)) { if (num_allowed>(96+bonus)) num_allowed = 96+bonus; } --- 2064,2070 ---- num_allowed = (num_allowed+1)/2; if (num_allowed>(32+bonus)) num_allowed = 32+bonus; } ! else if ((p_ptr->pclass == CLASS_MAGE) || (p_ptr->pclass == CLASS_PRIEST) || (p_ptr->pclass == CLASS_ENCHANTER)) { if (num_allowed>(96+bonus)) num_allowed = 96+bonus; } *************** *** 2481,2486 **** --- 2480,2486 ---- /* Mana halved if armour is 40 pounds over weight limit. */ case CLASS_PRIEST: + case CLASS_ENCHANTER: case CLASS_BARD: case CLASS_TOURIST: { *************** *** 2591,2596 **** --- 2591,2598 ---- break; } + + /* For new classes created, but not yet added to this formula. */ default: { *************** *** 2743,2748 **** --- 2745,2761 ---- if (p_ptr->shero && (p_ptr->pclass != CLASS_BERSERKER)) mhp += 30; if (p_ptr->tsuyoshi) mhp += 50; + /* Enchanter 最大HP=2*/ + if (p_ptr->pclass == CLASS_ENCHANTER) + { + p_ptr->kawasimi = mhp * 2 / 3; + p_ptr->maxkawasimi = mhp * 2 / 3; + EV_down(); + mhp = 2; + } + if (p_ptr->pclass == CLASS_ENCHANTER && level_up == 1 && p_ptr->lev == 38) + msg_print("*注意* 38レベル以上では体力回復の薬を飲んでも回復できない可能性があります。"); + /* New maximum hitpoints */ if (p_ptr->mhp != mhp) { *************** *** 2755,2766 **** #ifdef JP /* レベルアップの時は上昇量を表示する */ ! if ((level_up == 1) && (mhp > p_ptr->mhp)) { msg_format("最大ヒット・ポイントが %d 増加した!", (mhp - p_ptr->mhp) ); } ! #endif /* Save the new max-hitpoints */ p_ptr->mhp = mhp; --- 2768,2781 ---- #ifdef JP /* レベルアップの時は上昇量を表示する */ ! if ((level_up == 1) && (mhp > p_ptr->mhp) && p_ptr->pclass != CLASS_ENCHANTER) { msg_format("最大ヒット・ポイントが %d 増加した!", (mhp - p_ptr->mhp) ); } ! #endif ! ! /* Save the new max-hitpoints */ p_ptr->mhp = mhp; *************** *** 3290,3295 **** --- 3305,3316 ---- } p_ptr->see_nocto = TRUE; break; + case CLASS_ENCHANTER: + p_ptr->to_a += 5; + p_ptr->dis_to_a += 5; + if(p_ptr->lev > 29) + p_ptr->hold_life = TRUE; + break; } /***** Races ****/ *************** *** 4874,4879 **** --- 4895,4904 ---- /* Ninja */ case CLASS_NINJA: num = 4; wgt = 20; mul = 1; break; + + /* Enchanter */ + case CLASS_ENCHANTER: + num = 4; wgt = 70; mul = 3; break; } /* Enforce a minimum "weight" (tenth pounds) */ *************** *** 5132,5138 **** monk_armour_aux = FALSE; ! if (heavy_armor()) { monk_armour_aux = TRUE; } --- 5157,5163 ---- monk_armour_aux = FALSE; ! if (heavy_armor() || EV_down()) { monk_armour_aux = TRUE; } *************** *** 5541,5546 **** --- 5566,5593 ---- monk_notify_aux = monk_armour_aux; } + if (monk_armour_aux != monk_notify_aux) + { + if (EV_down()) + { + #ifdef JP + msg_print("装備が重くてうまく動けない。"); + #else + msg_print("Because of the weight of your armor you can't escape being damaged well."); + #endif + + } + else + + #ifdef JP + msg_print("うまく動けるようになった。"); + #else + msg_print("You regain your balance."); + #endif + + monk_notify_aux = monk_armour_aux; + } + for (i = 0; i < INVEN_PACK; i++) { #if 0 *************** *** 6075,6079 **** monk_arm_wgt += inventory[INVEN_HANDS].weight; monk_arm_wgt += inventory[INVEN_FEET].weight; ! return (monk_arm_wgt > (100 + (p_ptr->lev * 4))); } --- 6122,6151 ---- monk_arm_wgt += inventory[INVEN_HANDS].weight; monk_arm_wgt += inventory[INVEN_FEET].weight; ! return (monk_arm_wgt > (100 + (p_ptr->lev * 4))); ! } ! int EV_down(void) ! { ! u16b monk_arm_wgt = 0; ! long kaihipena = 0L; ! ! if (p_ptr->pclass != CLASS_ENCHANTER) return FALSE; ! ! /* Weight the armor */ ! if(inventory[INVEN_RARM].tval > TV_SWORD) monk_arm_wgt += inventory[INVEN_RARM].weight; ! if(inventory[INVEN_LARM].tval > TV_SWORD) monk_arm_wgt += inventory[INVEN_LARM].weight; ! monk_arm_wgt += inventory[INVEN_BODY].weight; ! monk_arm_wgt += inventory[INVEN_HEAD].weight; ! monk_arm_wgt += inventory[INVEN_OUTER].weight; ! monk_arm_wgt += inventory[INVEN_HANDS].weight; ! monk_arm_wgt += inventory[INVEN_FEET].weight; ! ! if((kaihipena = (130 + (p_ptr->lev * 5) - monk_arm_wgt)) > 0) ! kaihipena = 0; ! p_ptr->kawasimi = p_ptr->maxkawasimi + p_ptr->maxkawasimi * kaihipena / 500; ! if(p_ptr->kawasimi < 1) ! p_ptr->kawasimi = 1; ! return (kaihipena); ! } + diff -cr hengband-relay/src/xtra2.c Hengband-1.7.20/src/xtra2.c *** hengband-relay/src/xtra2.c Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/xtra2.c Wed Feb 28 22:09:22 2007 *************** *** 313,319 **** object_kind *k_ptr = &k_info[k_idx]; /* Analyze the item type */ ! if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK)) { return (TRUE); } --- 313,319 ---- object_kind *k_ptr = &k_info[k_idx]; /* Analyze the item type */ ! if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_ENCHANTMENT_BOOK)) { return (TRUE); } *************** *** 331,337 **** object_kind *k_ptr = &k_info[k_idx]; /* Analyze the item type */ ! if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_CRUSADE_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1)) { return (TRUE); } --- 331,337 ---- object_kind *k_ptr = &k_info[k_idx]; /* Analyze the item type */ ! if ((k_ptr->tval >= TV_LIFE_BOOK) && (k_ptr->tval <= TV_ENCHANTMENT_BOOK) && (k_ptr->tval != TV_ARCANE_BOOK) && (k_ptr->sval > 1)) { return (TRUE); } *************** *** 696,702 **** monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; bool visible = ((m_ptr->ml && !p_ptr->image) || (r_ptr->flags1 & RF1_UNIQUE)); --- 696,702 ---- monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; bool visible = ((m_ptr->ml && !p_ptr->image) || (r_ptr->flags1 & RF1_UNIQUE)); *************** *** 754,760 **** if (m_ptr->mflag2 & MFLAG2_CHAMELEON) { choose_new_monster(m_idx, TRUE, MON_CHAMELEON); ! r_ptr = &r_info[m_ptr->r_idx]; } /* Check for quest completion */ --- 754,760 ---- if (m_ptr->mflag2 & MFLAG2_CHAMELEON) { choose_new_monster(m_idx, TRUE, MON_CHAMELEON); ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; } /* Check for quest completion */ *************** *** 1586,1592 **** */ int mon_damage_mod(monster_type *m_ptr, int dam, bool is_psy_spear) { ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; if ((r_ptr->flagsr & RFR_RES_ALL) && dam > 0) { --- 1586,1592 ---- */ int mon_damage_mod(monster_type *m_ptr, int dam, bool is_psy_spear) { ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if ((r_ptr->flagsr & RFR_RES_ALL) && dam > 0) { *************** *** 1627,1633 **** */ static void get_exp_from_mon(int dam, monster_type *m_ptr) { ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; s32b new_exp; u32b new_exp_frac; --- 1627,1633 ---- */ static void get_exp_from_mon(int dam, monster_type *m_ptr) { ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; s32b new_exp; u32b new_exp_frac; *************** *** 1713,1719 **** bool mon_take_hit(int m_idx, int dam, bool *fear, cptr note) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; monster_type exp_mon; --- 1713,1719 ---- bool mon_take_hit(int m_idx, int dam, bool *fear, cptr note) { monster_type *m_ptr = &m_list[m_idx]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; monster_type exp_mon; *************** *** 1758,1767 **** { char m_name[80]; ! if (r_info[m_ptr->r_idx].flags7 & RF7_TANUKI) { /* You might have unmasked Tanuki first time */ ! r_ptr = &r_info[m_ptr->r_idx]; m_ptr->ap_r_idx = m_ptr->r_idx; if (r_ptr->r_sights < MAX_SHORT) r_ptr->r_sights++; } --- 1758,1767 ---- { char m_name[80]; ! if ((m_ptr->ego_race? *m_ptr->ego_race: r_info[m_ptr->r_idx]).flags7 & RF7_TANUKI) { /* You might have unmasked Tanuki first time */ ! r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; m_ptr->ap_r_idx = m_ptr->r_idx; if (r_ptr->r_sights < MAX_SHORT) r_ptr->r_sights++; } *************** *** 2063,2068 **** --- 2063,2069 ---- { if ((kubi_r_idx[i] == m_ptr->r_idx) && !(m_ptr->mflag2 & MFLAG2_CHAMELEON)) { + sound(SOUND_WANTED); #ifdef JP msg_format("%sの首には賞金がかかっている。", m_name); #else *************** *** 4480,4486 **** else if (p_ptr->riding) { monster_type *m_ptr = &m_list[p_ptr->riding]; ! monster_race *r_ptr = &r_info[m_ptr->r_idx]; if (MON_CONFUSED(m_ptr)) { --- 4481,4487 ---- else if (p_ptr->riding) { monster_type *m_ptr = &m_list[p_ptr->riding]; ! monster_race *r_ptr = m_ptr->ego_race? m_ptr->ego_race: &r_info[m_ptr->r_idx]; if (MON_CONFUSED(m_ptr)) { Only in Hengband-1.7.20/src: xtra2.c.orig diff -cr hengband-relay/src/z-config.h Hengband-1.7.20/src/z-config.h *** hengband-relay/src/z-config.h Sat Sep 30 22:12:38 2006 --- Hengband-1.7.20/src/z-config.h Sat Dec 23 22:55:05 2006 *************** *** 600,606 **** /* * Use world score server */ ! #define WORLD_SCORE #endif #endif /* HAVE_CONFIG_H */ --- 600,607 ---- /* * Use world score server */ ! #undef WORLD_SCORE #endif #endif /* HAVE_CONFIG_H */ +