# Tourist, Imitator, BeastMaster, Sorcerer, Archer,
# Magic-Eater, Bard, Red-Mage, Samurai, ForceTrainer,
# Blue-Mage, Cavalry, Berserker, Weaponsmith, Mirror-Master,
-# Ninja
+# Ninja, Sniper
# ¤Î¤É¤ì¤«
# $PLAYER
# ¥×¥ì¥¤¥ä¡¼¤Î̾Á°¤òÊÖ¤¹¡£¤¿¤À¤·¡¢' '(¥¹¥Ú¡¼¥¹)¡¢'['¡¢']'¤Ï
# Tourist, Imitator, BeastMaster, Sorcerer, Archer,
# Magic-Eater, Bard, Red-Mage, Samurai, ForceTrainer,
# Blue-Mage, Cavalry, Berserker, Weaponsmith, Mirror-Master,
-# Ninja
+# Ninja, Sniper
#
# $PLAYER
# Returns player name.
AM_CONFIG_HEADER(src/autoconf.h)
-AM_INIT_AUTOMAKE(hengband, 1.7.0)
+AM_INIT_AUTOMAKE(hengband, 1.7.1)
AC_ARG_WITH(setgid,
[ --with-setgid=NAME install hengband as group NAME],
I:35:6:4
W:40:40:5:50000
P:6:0d0:0:0:12
-F:STEALTH | FREE_ACT | IM_ACID | SEE_INVIS
+F:STEALTH | FREE_ACT | IM_ACID | SEE_INVIS |
+F:RES_DARK | RES_LITE | XTRA_H_RES
D:$From the ruin of Gondolin did Tuor escape, through secret ways and travail,
D:$shielded by his cloak from a multitude of hostile eyes.
D:³¤Åý¤Ù¤ë¥¦¥ë¥â¤è¤ê¼ø¤«¤ê¤·²¦¼Ô¤Î°á¤Ë¿È¤òÊñ¤ß¡¢
F:AGGRAVATE | SUST_CHR | CHR
D:¤Ê¤ó¤È¥´¥Ä¥´¥Ä¤È¤·¤¿³»¤À¤³¤È¡£
-N:201:¡ØÀÄζ¤ÎÎî©¡Ù
+N:201:¡ØÀÄζ¤ÎÎîÎÚ¡Ù
E:'Elemental of Ching-Rong'
I:38:2:0
W:80:9:300:200000
F:SEE_INVIS | LITE |
F:INSTA_ART
+N:221:¿¹¤Î¼í¿Í¥í¥Ó¥ó¥Õ¥Ã¥É¤Î
+E:of Robin Hood
+I:19:12:2
+W:20:15:30:50000
+P:0:2d1:15:17:0
+F:DEX | CHR | STEALTH |
+F:XTRA_MIGHT | HIDE_TYPE | SHOW_MODS | XTRA_H_RES
+D:$This is of Robin Hood who live in the deep forest.
+D:¥·¥ã¡¼¥¦¥Ã¥É¤Î¿¹¤Ë½»¤àµÁ±¥í¥Ó¥ó¡¦¥Õ¥Ã¥É¤ÎµÝ¤À¡£
+
+# from Slash'EM
+N:222:¡Ø¥Ø¥ë¥Õ¥¡¥¤¥¢¡Ù
+E:of 'Hellfire'
+I:19:23:4
+W:30:15:110:60000
+P:0:2d1:15:17:0
+F:STR | INFRA | RES_FIRE | SH_FIRE |
+F:ACTIVATE | HIDE_TYPE | SHOW_MODS
+D:$This crossbow gives flame energy to bolts which it fires.
+D:¤³¤Îdz¤¨¤ë¤è¤¦¤Ê¿§¤Î¥¯¥í¥¹¥Ü¥¦¤Ï¡¢È¯¼Í¤¹¤ë¥Ü¥ë¥È¤Ë±ê¤ÎÎϤò
+D:Í¿¤¨¤ë¤³¤È¤¬¤Ç¤¤ë¡£
+
+N:223:̾¼Í¼ê¥¦¥£¥ê¥¢¥à¡¦¥Æ¥ë¤Î
+E:of Wilhelm Tell
+I:19:23:4
+W:35:30:110:50000
+P:0:0d0:40:13:0
+F:DEX | HIDE_TYPE | SEE_INVIS | XTRA_MIGHT | SHOW_MODS
+D:$With this crossbow, Swiss hero Tell shot an apple exactly
+D:$though it was on his son's head, and then he defeated evil
+D:$magistrate Gessler.
+D:¥¹¥¤¥¹¤Î±Ñͺ¥¦¥£¥ê¥¢¥à¡¦¥Æ¥ë¤Î»È¤Ã¤¿¥¯¥í¥¹¥Ü¥¦¤À¡£
+D:Èà¤Ï²æ¤¬»Ò¤ÎƬ¤Î¾å¤Î¥ê¥ó¥´¤òÀµ³Î¤Ë·â¤ÁÈ´¤¡¢Ì±½°¤ò¶ì¤·¤á¤ë
+D:°Âå´±¥²¥¹¥é¡¼¤òÂǤÁÇˤä¿¡£
+
+N:224:̾¼Í¼ê¥¦¥£¥ê¥¢¥à¡¦¥Æ¥ë¤Î
+E:of Wilhelm Tell
+I:18:1:0
+W:35:35:2:5000
+P:0:6d5:20:16:0
+F:KILL_HUMAN
+D:$It is said that this bolt sticked onto the heart of Gessler
+D:$when Wilhelm Tell shot it.
+D:¤«¤Ä¤Æ¥¦¥£¥ê¥¢¥à¡¦¥Æ¥ë¤¬·â¤ÁÊü¤Ã¤¿1ËܤΥ¯¥í¥¹¥Ü¥¦¤ÎÌð¤À¡£
+D:°Âå´±¥²¥¹¥é¡¼¤ÎÌ¿¤òÀµ³Î¤ËÃ¥¤Ã¤¿¤È¤¤¤¦¡£
+
+#JX#
+N:225:¥¢¥¹¥¯¥ì¥Ô¥ª¥¹¤Î
+E:of Aesculapius
+I:21:14:3
+W:40:45:160:300000
+P:0:2d11:15:15:5
+F:WIS | CHR | BLESSED | LITE | ACTIVATE |
+F:SEE_INVIS | FREE_ACT | HOLD_LIFE | REGEN | SLOW_DIGEST |
+F:VAMPIRIC | SLAY_ANIMAL | SLAY_DRAGON | SLAY_HUMAN |
+F:SLAY_ORC | SLAY_TROLL | SLAY_GIANT |
+F:RES_POIS | RES_CONF | RES_CHAOS |
+D:$This is the staff of Aesculapius, who is a greek god of
+D:$the medicine.
+D:¤³¤ì¤Ï¡¢°å³Ø¤Î¿À¥¢¥¹¥¯¥ì¥Ô¥ª¥¹¤Î´ñÀפÎÏ»¼ÜËÀ¤À¡£
+D:¤É¤ó¤Ê²ø²æ¤â¤¿¤Á¤Þ¤ÁÌþ¤·¤Æ¤·¤Þ¤¦¡£
+
+#JX#
+N:226:Í©ÂΥɥ饴¥ó¡¦¥¹¥±¥¤¥ë¥á¥¤¥ë
+E:Spectral Dragon Scale Mail
+I:38:3:0
+W:75:30:100:350000
+P:40:2d4:-2:0:20
+F:SH_COLD | RES_COLD | RES_POIS | RES_CONF | RES_FEAR |
+F:RES_NETHER | RES_NEXUS | RES_DISEN |
+F:SEE_INVIS | HOLD_LIFE | LEVITATION |
+F:CURSED | HEAVY_CURSE | DRAIN_EXP | FULL_NAME
+D:$A white transparent dragon scale mail which was made from
+D:$the tortured soul of a once powerful wyrm.
+D:¤³¤Î¥É¥é¥´¥ó¤ÎÎÚ³»¤Ï¡¢¤«¤Ä¤Æ¶¯Âç¤ÊÎϤò¸Ø¤Ã¤Æ¤¤¤¿¥ï¥¤¥¢¡¼¥à
+D:¤Î±åÎî¤ÎÎÚ¤«¤éºî¤é¤ì¤¿¤â¤Î¤À¡£¤¦¤Ã¤¹¤é¤ÈÇò¤¯Æ©¤Ä̤äƤ¤¤ë¡£
+
+N:227:¡Ø¹ßÍÅÊõ¾ó¡Ù
+E:of Sha Wujing
+I:22:14:2
+W:30:30:175:100000
+P:0:3d7:12:10:0
+F:BLESSED | STR | WIS |
+F:SLAY_EVIL | SLAY_UNDEAD | KILL_DEMON |
+F:SEE_INVIS | REGEN | INFRA |
+F:RES_ACID | RES_COLD | RES_DARK | RES_FEAR
+D:$This lajatang looks like a staff because it has only a
+D:$blade which looks like a half moon. Sha Wujing helped a
+D:$long journy of Tang Sanzang with it.
+D:²ÏƸ¤ÎÍŲøº»¸ç¾ô¤Î»È¤Ã¤¿Éð´ï¤À¡£»°Æü·î¾õ¤Î¿Ï¤¬ËÀ¤ÎÀèü¤Ë¤Ä
+D:¤¤¤Æ¤¤¤ë¤¿¤á¡¢¼â¾ó¤Î¤è¤¦¤Ë¸«¤¨¤ë¡£¸ç¾ô¤Ï¤³¤ÎÉð´ï¤ò¼ê¤Ë»°Â¢
+D:Ë¡»Õ¤Îι¤ò½õ¤±¤¿¡£
+
+N:228:»¦¿Íµ´¥¨¥ë¥ß¤Î
+E:of Elmi the Murder
+I:22:1:2
+W:15:10:60:50000
+P:0:3d5:5:19:0
+F:DEX | STEALTH | HIDE_TYPE | FORCE_WEAPON |
+F:KILL_HUMAN | VORPAL | SEE_INVIS |
+D:$This is a hatchet of Elmi who was a horrible muder of
+D:$Raffnor.
+D:¥é¥Õ¥Î¡¼¥ëÃæ¤ò¿Ì¤¨¾å¤¬¤é¤»¤¿»¦¿Íµ´¥¨¥ë¥ß¤Î»È¤Ã¤¿¼êÉà¤À¡£
+D:¥é¥Õ¥Î¡¼¥ë¤Ï¤³¤Î»¦¿Íµ´¤òÊá¤é¤¨¤ë¤¿¤á¤Ë¡¢20¿Í°Ê¾å¤Î¹Ô¼Ô
+D:(¥¨¥¹¥Ñ¡¼)¤òÅêÆþ¤·¤¿¤È¤¤¤¦¡£¡Ö¤³¤Î¼ê¸ý¤Ë¤Ï¸«³Ð¤¨¤¬¤¢¤ë¡Ä¡×
+D:(À»Íªµª¡ÖĶ¿Í¥í¥Ã¥¯¡Ø¸÷¤Î·õ¡Ù¡×)
+
+N:229:¡ØÂÀϺÂÀÅá¡Ù
+E:'Taro Dachi'
+I:23:27:4
+W:40:25:300:120000
+P:0:9d4:0:0:-5
+F:STR | RES_FEAR | VORPAL |
+F:SLAY_HUMAN | SLAY_ORC | SLAY_TROLL | SLAY_GIANT
+D:$Asakura's captain Naotaka Magara defeated a lot of soldiers
+D:$with this large katana.
+D:Åá¿È¸Þ¼Ü»°À£¤ÎŤ¯¤Æ½Å¤¤ÂÀÅá¤À¡£Ä«ÁҲȲȿÿ¿ÊÁľδ¤Ï¡¢¤³¤Î
+D:Â礤ÊÂÀÅá¤ò¼ê¤Ë¤·¤Æ¿¤¯¤ÎŨʼ¤ÎÌ¿¤òÃ¥¤¤¤µ¤Ã¤¿¡£¤½¤Î¶¯¤µ¤æ
+D:¤¨¤ËŨ¿Ø¤ËÆͤùþ¤ß¤¹¤®¤¿¤È¤¤¤¦¡£
+
+N:230:¼êÉʻդÎ
+E:of Magician
+I:23:1:0
+W:1:1:5:3000
+P:0:1d1:0:0:0
+D:$This dagger can not injure someone almostly.
+D:¤³¤Î¥À¥¬¡¼¤Ï¿Í¤ò½ý¤Ä¤±¤ë¤³¤È¤Ï¤Ê¤¤¤À¤í¤¦¡£
+
+N:231:°Å»¦¼Ô·ÕíƤÎ
+E:of Jing Ke
+I:23:6:1
+W:15:15:20:50000
+P:0:2d5:-2:13:0
+F:DEX | BLOWS | SPEED | HIDE_TYPE |
+F:BRAND_COLD | BRAND_POIS | VORPAL | RES_FEAR
+D:ÌÔÆǤοϤò»ý¤Ä±Ô¤¤Ò¸¼ó¤À¡£»Â¤é¤ì¤ì¤Ð¤¿¤Á¤Þ¤Á»à¤Ë»ê¤ë¤À¤í¤¦¡£
+D:±í¤Î»ÉµÒ·ÕíƤϡ¢¤³¤ÎÒ¸¼ó¤òÍѤ¤¤Æ¿Á¤Î»Ï¹ÄÄë¤Î°Å»¦¤ò»î¤ß¤¿¡£
+D:¤¤¤Þ¤â¤½¤Î¼¹Ç°¤¬½É¤ë¡£
+D:¡Ö¶¿ÍêÖáÝÇ¡¡ÀéºÜÍñ±¾ð¡×(Æ«Ê¥ÌÀ¡Ö±Ó·ÕíÆ¡×)
+
+N:232:ÇÀÉ×¥Þ¥´¥Ã¥È¤Î
+E:of Maggot
+I:22:3:1
+W:10:4:70:10000
+P:0:2d3:7:9:0
+F:STR | DEX | RES_FIRE | RES_LITE | VORPAL |
+D:$This is farmer Maggot's sickle. He left it behind on his
+D:$farm.
+D:¤³¤ì¤ÏÇÀÉ×¥Þ¥´¥Ã¥È¤ÎÇÀºî¶ÈÍѤγù¤À¡£¤É¤¦¤ä¤éÇÀ¾ì¤ËÃ֤˺¤ì
+D:¤Æ¤·¤Þ¤Ã¤¿¤è¤¦¤À¡£
# Crusade
R:9:0
+
+
+### Sniper ###
+N:27
+I:NONE:DEX:0x00:0:99:0
+# Life
+R:0:0
+
+# Sorcery
+R:1:0
+
+# Neture
+R:2:0
+
+# Chaos
+R:3:0
+
+# Death
+R:4:0
+
+# Trump
+R:5:0
+
+# Arcane
+R:6:0
+
+# Craft
+R:7:0
+
+# Deamon
+R:8:0
+
+# Crusade
+R:9:0
M:WY:66
# Maximum number of monsters in r_info.txt
-M:R:1073
+M:R:1079
# Maximum number of items in k_info.txt
M:K:663
M:F:255
# Maximum number of artifacts in a_info.txt
-M:A:221
+M:A:233
# Maximum number of ego-items in e_info.txt
M:E:255
D:$A demon small in stature whose face you can't help but love.
D:Áþ¤á¤Ê¤¤´é¤ò¤·¤¿¾®ÊÁ¤Ê°Ëâ¤À¡£
-#
-#¥Ö¥í¥Ã¥À¤Î¥³¥Ô¡¼
-#
N:1030:ÆîÈÚ²¦¡ØÌҳ͡Ù
E:Meng Huo, the King of Southerings
G:p:o
-I:110:25d10:20:25:20
-W:12:2:0:100:0:0
+I:110:38d10:20:50:20
+W:18:2:0:250:0:0
B:HIT:HURT:1d15
B:HIT:HURT:1d15
B:HIT:HURT:1d15
B:HIT:HURT:1d15
F:UNIQUE | MALE | EVIL | HAS_LITE_2 | HUMAN |
F:FORCE_MAXHP | CAN_SPEAK | WILD_ALL | DROP_SKELETON | DROP_CORPSE
-F:ONLY_ITEM | DROP_1D2 | DROP_GOOD |
+F:ONLY_ITEM | DROP_2D2 | DROP_GOOD | ESCORT |
F:OPEN_DOOR | BASH_DOOR
-D:$He is a king of southerings. He was arrested by Zhuge Liang 7 times.
+S:1_IN_10 |
+S:S_KIN
+D:$He is the king of Nanman. He was arrested by Zhuge Liang 7 times.
D:ÆîÈڤβ¦¡£½ô³ëμ¤Ë¼·ÅÙÚ¢¤Ë¤µ¤ì¤ë¡£
N:1031:¶â¿§¤Î²ø¿Í¡Ø¥ï¥Ã¥Ï¥Þ¥ó¡Ù
F:OPEN_DOOR | BASH_DOOR | CAN_SPEAK |
F:EVIL | ORC | IM_POIS | RES_DARK
+#
+#¥Ö¥í¥Ã¥À¤Î¥³¥Ô¡¼
+#
+N:1073:ÌҳͤÎÄï¡ØÌÒÍ¥¡Ù
+E:Meng You, the Brother of Meng Huo
+G:p:o
+I:110:25d10:20:25:20
+W:12:2:0:100:0:0
+B:HIT:HURT:1d15
+B:HIT:HURT:1d15
+B:HIT:HURT:1d15
+B:HIT:HURT:1d15
+F:UNIQUE | MALE | EVIL | HAS_LITE_2 | HUMAN |
+F:FORCE_MAXHP | CAN_SPEAK | WILD_ALL | DROP_SKELETON | DROP_CORPSE |
+F:ONLY_ITEM | DROP_1D2 | DROP_GOOD |
+F:OPEN_DOOR | BASH_DOOR
+D:$He is a junior brother of king of southerings Meng Huo.
+D:ÆîÈÚ²¦ÌҳͤÎÄï¤À¡£Éðͦ¤Ë¤Ï¿¾¯¤Î¼«¿®¤¬¤¢¤ë¡£
+
+N:1074:²Ð¤Î¿À¡Ø½ËÍ»¡Ù
+E:Lady Zhurong, the Avater of Flame Spirit
+G:p:R
+I:115:24d11:20:45:20
+W:14:2:0:150:0:0
+B:HIT:HURT:1d12
+B:HIT:HURT:1d12
+B:HIT:FIRE:1d15
+F:UNIQUE | FEMALE | EVIL | HAS_LITE_2 | HUMAN | IM_FIRE |
+F:FORCE_MAXHP | CAN_SPEAK | WILD_ALL | DROP_SKELETON | DROP_CORPSE |
+F:ONLY_ITEM | DROP_1D2 | DROP_GOOD | OPEN_DOOR | BASH_DOOR |
+S:1_IN_9
+S:SHRIEK
+D:$She is the wife of king Meng Huo. She is called as the avater of
+D:$flame spirit.
+D:ÆîÈÚ²¦ÌҳͤκʤÀ¡£Èà½÷¤Ï²Ð¤Î¿À¤Î²½¿È¤È¸À¤ï¤ì¤Æ¤¤¤ë¡£
+D:¤½¤ÎÉðͦ¤òÉî¤ë¤Ê¡£
+
+N:1075:ÆîÈÚ¿Í¡ØÂÓÍèƶ¼ç¡Ù
+E:Dailai Dongzhu, the Captain of Southerings
+G:p:u
+I:110:22d10:20:35:20
+W:10:2:0:100:0:0
+B:HIT:HURT:1d10
+B:HIT:HURT:1d10
+B:HIT:HURT:1d10
+B:HIT:HURT:1d10
+F:UNIQUE | MALE | EVIL | HAS_LITE_2 | HUMAN |
+F:FORCE_MAXHP | CAN_SPEAK | WILD_ALL | DROP_SKELETON | DROP_CORPSE |
+F:ONLY_ITEM | DROP_1D2 | DROP_GOOD | OPEN_DOOR | BASH_DOOR
+S:1_IN_5 |
+S:SHOOT
+D:$He is one of the captains of Nanman.
+D:$He comes to help his sister and her husband Meng Huo.
+D:ÆîÈÚ²¦Ìҳͤα緳¤È¤·¤Æ¸½¤ì¤¿ÆîÈڤξ¤À¡£ÌҳͤεÁÍý¤ÎÄï¤Ë¤¢¤¿¤ë¡£
+
+N:1076:ÆÅεƶ¼ç¡ØÛ´»×Â粦¡Ù
+E:King Duosi, the Chief of Southerings
+G:p:v
+I:110:25d10:20:45:20
+W:11:2:0:150:0:0
+B:HIT:HURT:1d10
+B:HIT:HURT:1d10
+B:HIT:HURT:1d10
+F:UNIQUE | MALE | EVIL | HAS_LITE_2 | HUMAN |
+F:FORCE_MAXHP | CAN_SPEAK | WILD_ALL | DROP_SKELETON | DROP_CORPSE |
+F:ONLY_ITEM | DROP_1D2 | DROP_GOOD | OPEN_DOOR | BASH_DOOR
+S:1_IN_5 |
+S:BA_POIS | BLINK
+D:$He is the best wise man of Nanman. His intelligence afflicted
+D:$the enemy.
+D:ÆîÈÚ¿ï°ì¤ÎÃηüԤȸÀ¤ï¤ì¤ëÍÎÏÎμç¤À¡£Èà¤ÎÃÎά¤Ïéæ·³¤ò¶ì¤·¤á¤¿¡£
+
+N:1077:ÆîÈڤν¶Ä¹¡ØÌÚ¼¯Â粦¡Ù
+E:King Mulu, the Chief of Southerings
+G:p:g
+I:110:35d10:20:45:20
+W:16:2:0:250:0:0
+B:HIT:HURT:1d13
+B:HIT:HURT:1d13
+B:HIT:HURT:1d15
+B:HIT:HURT:1d15
+F:UNIQUE | MALE | EVIL | HAS_LITE_2 | HUMAN |
+F:FORCE_MAXHP | CAN_SPEAK | DROP_SKELETON | DROP_CORPSE |
+F:ONLY_ITEM | DROP_1D2 | DROP_GOOD | OPEN_DOOR | BASH_DOOR
+S:1_IN_6 |
+S:S_ANT | S_SPIDER
+D:$He is one of chiefs of Nanman. He is also good beast master.
+D:ÆîÈÚ¤ò»ÙÇÛ¤¹¤ë½¶Ä¹¤Î°ì¿Í¤À¡£Èà¤Îưʪ·³ÃĤˤÏÌҳͤâÀäÂç¤Ê¿®Íê¤ò´ó¤»¤ë¡£
+D:¤¿¤À¤·¥«¥é¥¯¥ê¤Ï·ù¤¤¤À¡£
+
+N:1078:±¨Øù¹ñ²¦¡ØѺÆ͹ü¡Ù
+E:Wutugu, the Chief of Southerings
+G:P:u
+I:110:35d10:20:60:20
+W:17:2:0:250:0:0
+B:HIT:HURT:2d20
+B:HIT:HURT:2d20
+F:UNIQUE | MALE | EVIL | HAS_LITE_2 | HUMAN |
+F:FORCE_MAXHP | CAN_SPEAK | DROP_SKELETON | DROP_CORPSE |
+F:ONLY_ITEM | DROP_1D2 | DROP_GOOD | OPEN_DOOR | BASH_DOOR |
+F:IM_ACID | IM_ELEC | IM_POIS | HURT_FIRE |
+D:$This giant man is the king of southern Nanman. It is said that
+D:$he is about 10 feet tall. His army has hard rattan armor.
+D:ÆîÈÚ¤ÎÆî¤Ë¤¢¤ë±¨Øù¹ñ¤ò»ÙÇÛ¤¹¤ë²¦¤Ç¡¢¤½¤Î¿È¤Î¾æ¤Ï12¼Ü¤È¸À¤ï¤ì¤Æ¤¤¤ë¡£
+D:Èà¤Î¸Ø¤ëÆ£¹Ãʼ¤Ï¿å¤â¿Ï¤â¤Ï¤¸¤¯¡£¤¿¤À¤·Ç³¤¨¤ä¤¹¤¤¡£
S:0:0:7000 # SUDE
S:1:4000:8000 # NITOURYU
S:2:0:0 # RIDING
+
+### ARCHER ###
+N:27
+# Bow
+W:0:0:0:4 # 0
+W:0:1:0:4 #
+W:0:2:1:4 # SLING
+W:0:3:0:4 #
+W:0:4:0:4 #
+W:0:5:0:4 #
+W:0:6:0:4 #
+W:0:7:0:4 #
+W:0:8:0:4 #
+W:0:9:0:4 #
+W:0:10:0:4 # 10
+W:0:11:0:4 #
+W:0:12:1:4 # SHORT_BOW
+W:0:13:1:4 # LONG_BOW
+W:0:14:0:4 #
+W:0:15:0:4 #
+W:0:16:0:4 #
+W:0:17:0:4 #
+W:0:18:0:4 #
+W:0:19:0:4 #
+W:0:20:0:4 # 20
+W:0:21:0:4 #
+W:0:22:0:4 #
+W:0:23:1:4 # LIGHT_XBOW
+W:0:24:1:4 # HEAVY_XBOW
+W:0:25:0:4 #
+W:0:26:0:4 #
+W:0:27:0:4 #
+W:0:28:0:4 #
+W:0:29:0:4 #
+W:0:30:0:4 # 30
+W:0:31:0:4 #
+W:0:32:0:4 #
+W:0:33:0:4 #
+W:0:34:0:4 #
+W:0:35:0:4 #
+W:0:36:0:4 #
+W:0:37:0:4 #
+W:0:38:0:4 #
+W:0:39:0:4 #
+W:0:40:0:4 # 40
+W:0:41:0:4 #
+W:0:42:0:4 #
+W:0:43:0:4 #
+W:0:44:0:4 #
+W:0:45:0:4 #
+W:0:46:0:4 #
+W:0:47:0:4 #
+W:0:48:0:4 #
+W:0:49:0:4 #
+W:0:50:0:4 # 50
+W:0:51:0:4 #
+W:0:52:0:4 #
+W:0:53:0:4 #
+W:0:54:0:4 #
+W:0:55:0:4 #
+W:0:56:0:4 #
+W:0:57:0:4 #
+W:0:58:0:4 #
+W:0:59:0:4 #
+W:0:60:0:4 # 60
+W:0:61:0:4 #
+W:0:62:0:4 #
+W:0:63:1:4 # NAMAKE
+# Digging
+W:1:0:0:1 # 0
+W:1:1:0:1 # SHOVEL
+W:1:2:0:1 # GNOMISH_SHOVEL
+W:1:3:0:1 # DWARVEN_SHOVEL
+W:1:4:0:1 # PICK
+W:1:5:0:1 # ORCISH_PICK
+W:1:6:0:1 # DWARVEN_PICK
+W:1:7:0:1 # MATTOCK
+W:1:8:0:1 #
+W:1:9:0:1 #
+W:1:10:0:1 # 10
+W:1:11:0:1 #
+W:1:12:0:1 #
+W:1:13:0:1 #
+W:1:14:0:1 #
+W:1:15:0:1 #
+W:1:16:0:1 #
+W:1:17:0:1 #
+W:1:18:0:1 #
+W:1:19:0:1 #
+W:1:20:0:1 # 20
+W:1:21:0:1 #
+W:1:22:0:1 #
+W:1:23:0:1 #
+W:1:24:0:1 #
+W:1:25:0:1 #
+W:1:26:0:1 #
+W:1:27:0:1 #
+W:1:28:0:1 #
+W:1:29:0:1 #
+W:1:30:0:1 # 30
+W:1:31:0:1 #
+W:1:32:0:1 #
+W:1:33:0:1 #
+W:1:34:0:1 #
+W:1:35:0:1 #
+W:1:36:0:1 #
+W:1:37:0:1 #
+W:1:38:0:1 #
+W:1:39:0:1 #
+W:1:40:0:1 # 40
+W:1:41:0:1 #
+W:1:42:0:1 #
+W:1:43:0:1 #
+W:1:44:0:1 #
+W:1:45:0:1 #
+W:1:46:0:1 #
+W:1:47:0:1 #
+W:1:48:0:1 #
+W:1:49:0:1 #
+W:1:50:0:1 # 50
+W:1:51:0:1 #
+W:1:52:0:1 #
+W:1:53:0:1 #
+W:1:54:0:1 #
+W:1:55:0:1 #
+W:1:56:0:1 #
+W:1:57:0:1 #
+W:1:58:0:1 #
+W:1:59:0:1 #
+W:1:60:0:1 # 60
+W:1:61:0:1 #
+W:1:62:0:1 #
+W:1:63:0:1 #
+# Hafted
+W:2:0:0:1 # 0
+W:2:1:0:1 # CLUB
+W:2:2:0:1 # WHIP
+W:2:3:0:1 # QUARTERSTAFF
+W:2:4:0:1 # NUNCHAKU
+W:2:5:0:1 # 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:1 #
+W:2:10:0:1 # 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:1 #
+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:0:1 # WIZSTAFF
+W:2:22:0:1 #
+W:2:23:0:1 #
+W:2:24:0:1 #
+W:2:25:0:1 #
+W:2:26:0:1 #
+W:2:27:0:1 #
+W:2:28:0:1 #
+W:2:29:0:1 #
+W:2:30:0:1 # 30
+W:2:31:0:1 #
+W:2:32:0:1 #
+W:2:33:0:1 #
+W:2:34:0:1 #
+W:2:35:0:1 #
+W:2:36:0:1 #
+W:2:37:0:1 #
+W:2:38:0:1 #
+W:2:39:0:1 #
+W:2:40:0:1 # TSURIZAO
+W:2:41:0:1 #
+W:2:42:0:1 #
+W:2:43:0:1 #
+W:2:44:0:1 #
+W:2:45:0:1 #
+W:2:46:0:1 #
+W:2:47:0:1 #
+W:2:48:0:1 #
+W:2:49:0:1 #
+W:2:50:0:1 # GROND
+W:2:51:0:1 #
+W:2:52:0:1 #
+W:2:53:0:1 #
+W:2:54:0:1 #
+W:2:55:0:1 #
+W:2:56:0:1 #
+W:2:57:0:1 #
+W:2:58:0:1 #
+W:2:59:0:1 #
+W:2:60:0:1 # 60
+W:2:61:0:1 #
+W:2:62:0:1 #
+W:2:63:0:4 # NAMAKE
+# Polearm
+W:3:0:0:1 # 0
+W:3:1:0:1 # HATCHET
+W:3:2:0:1 # SPEAR
+W:3:3:0:1 # SICKLE
+W:3:4:0:1 # AWL_PIKE
+W:3:5:0:1 # TRIDENT
+W:3:6:0:1 # FAUCHARD
+W:3:7:0:1 # 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:1 #
+W:3:19:0:1 #
+W:3:20:0:1 # LANCE
+W:3:21:0:1 #
+W:3:22:0:1 # BATTLE_AXE
+W:3:23:0:1 #
+W:3:24:0:1 #
+W:3:25:0:1 # GREAT_AXE
+W:3:26:0:1 # TRIFURCATE_SPEAR
+W:3:27:0:1 #
+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:1 #
+W:3:32:0:1 #
+W:3:33:0:1 #
+W:3:34:0:1 #
+W:3:35:0:1 #
+W:3:36:0:1 #
+W:3:37:0:1 #
+W:3:38:0:1 #
+W:3:39:0:1 #
+W:3:40:0:1 # 40
+W:3:41:0:1 #
+W:3:42:0:1 #
+W:3:43:0:1 #
+W:3:44:0:1 #
+W:3:45:0:1 #
+W:3:46:0:1 #
+W:3:47:0:1 #
+W:3:48:0:1 #
+W:3:49:0:1 #
+W:3:50:0:1 # DEATH_SCYTHE
+W:3:51:0:1 #
+W:3:52:0:1 #
+W:3:53:0:1 #
+W:3:54:0:1 #
+W:3:55:0:1 #
+W:3:56:0:1 #
+W:3:57:0:1 #
+W:3:58:0:1 #
+W:3:59:0:1 #
+W:3:60:0:1 # 60
+W:3:61:0:1 #
+W:3:62:0:1 #
+W:3:63:0:1 #
+# Sword
+W:4:0:0:1 # 0
+W:4:1:0:1 # BROKEN_DAGGER
+W:4:2:0:1 # BROKEN_SWORD
+W:4:3:0:1 #
+W:4:4:1:1 # DAGGER
+W:4:5:0:1 # MAIN_GAUCHE
+W:4:6:0:1 # TANTO
+W:4:7:0:1 # RAPIER
+W:4:8:0:1 # SMALL_SWORD
+W:4:9:0:1 # BASILLARD
+W:4:10:0:1 # SHORT_SWORD
+W:4:11:0:1 # SABRE
+W:4:12:0:1 # CUTLASS
+W:4:13:0:1 # WAKIZASHI
+W:4:14:0:1 # KHOPESH
+W:4:15:0:1 # TULWAR
+W:4:16:0:1 # BROAD_SWORD
+W:4:17:0:1 # LONG_SWORD
+W:4:18:0:1 # SCIMITAR
+W:4:19:0:1 # NINJATO
+W:4:20:0:1 # 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:1 # 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:1 # DOKUBARI
+W:4:33:0:1 #
+W:4:34:0:1 #
+W:4:35:0:1 #
+W:4:36:0:1 #
+W:4:37:0:1 #
+W:4:38:0:1 #
+W:4:39:0:1 #
+W:4:40:0:1 # 40
+W:4:41:0:1 #
+W:4:42:0:1 #
+W:4:43:0:1 #
+W:4:44:0:1 #
+W:4:45:0:1 #
+W:4:46:0:1 #
+W:4:47:0:1 #
+W:4:48:0:1 #
+W:4:49:0:1 #
+W:4:50:0:1 # 50
+W:4:51:0:1 #
+W:4:52:0:1 #
+W:4:53:0:1 #
+W:4:54:0:1 #
+W:4:55:0:1 #
+W:4:56:0:1 #
+W:4:57:0:1 #
+W:4:58:0:1 #
+W:4:59:0:1 #
+W:4:60:0:1 # 60
+W:4:61:0:1 #
+W:4:62:0:1 #
+W:4:63:0:1 #
+# Skill
+S:0:0:2000 # SUDE
+S:1:0:1000 # NITOURYU
+S:2:0:0 # RIDING
F:b:BUILDING_1:3:0:0:0:0:NONE:14
F:!:FLOOR:3:0:43
+# Light Cross Bow
+?:[AND [EQU $QUEST1 3] [EQU $CLASS Sniper] ]
+F:b:BUILDING_1:3:0:0:0:0:NONE:14
+F:!:FLOOR:3:0:75
+
# Quest 1 finished, continue with quest 14
?:[EQU $QUEST1 4]
F:b:BUILDING_1:3:0:0:0:0:NONE:14
F:a:BUILDING_0:3
F:@:FLOOR:3:0:0:0:220
+# Quest 27 rewarding (Sniper gets the Cloak of Tuor)
+?:[AND [EQU $QUEST27 3] [EQU $CLASS Sniper] ]
+F:a:BUILDING_0:3
+F:@:FLOOR:3:0:0:0:50
+
# Quest 27 finished, no new quest is available
?:[EQU $QUEST27 4]
F:a:BUILDING_0:3
B:7:A:0:Éð´ï¤ò¶¯²½¤¹¤ë:400:800:w:23:0
B:$7:A:1:Enchant armor:300:600:a:24:0
B:7:A:1:Ëɶñ¤ò¶¯²½¤¹¤ë:300:600:a:24:0
-B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0
-B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0
+B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0: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:À¸Ì¿Ëâ½Ñ¤ÎÅã:¥¯¥ê¥µ¥Ë¥¢:¿Í´Ö
B:10:A:1:°ìÇñ¤¹¤ë:0:100:r:17:0
B:$10:A:2:Identify possessions:100:2000:i:26:0
B:10:A:2:»ý¤ÁʪÁ´¤Æ¤ò´ÕÄê:100:2000:i:26:0
-B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
-B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
+B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0: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:¥¢¡¼¥Á¥ã¡¼¤Î¥®¥ë¥É:¥È¥¥¥é¥ê¥ó:¥Ï¡¼¥Õ¥¨¥ë¥Õ
B:11:A:0:Ìð¤äÀÐÅù¤ò¶¯²½¤¹¤ë:20:40:a:30:0
B:$11:A:1:Enchant bow:400:800:b:31:0
B:11:A:1:µÝ¤ò¶¯²½¤¹¤ë:400:800:b:31:0
-B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0
-B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0
+B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:2
+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:2
B:$12:N:Paladins Guild:Langordathur:Human
B:12:N:¥Ñ¥é¥Ç¥£¥ó¤Î¥®¥ë¥É:¥é¥ó¥´¥ë¥À¥¹¡¼¥ë:¿Í´Ö
B:12:A:0:Ëɶñ¤ò¶¯²½¤¹¤ë:300:600:a:24:0
B:$12:A:1:See Healers:0:150:h:28:0
B:12:A:1:¼£ÎŲȤ˲ñ¤¦:0:150:h:28:0
-B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
-B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
+B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0: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#
B:7:A:1:Ëɶñ¤ò¶¯²½¤¹¤ë:300:600:a:24:0
B:$7:A:2:Request quest:0:0:q:6:0
B:7:A:2:¥¯¥¨¥¹¥È:0:0:q:6:0
-B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0:0
-B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0:0
+B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0:0: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:¸¼Ô¤ÎÅã:¥¿¥Ë¥¹¥Æ¥£¥ë:¥¨¥ë¥Õ
B:10:A:2:»ý¤ÁʪÁ´¤Æ¤ò´ÕÄê:100:600:i:26:0
B:$10:A:3:request Quest:0:0:q:6:0
B:10:A:3:¥¯¥¨¥¹¥È:0:0:q:6:0
-B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
-B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
+B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0: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:¥¢¡¼¥Á¥ã¡¼¤Î¥®¥ë¥É:¥¢¥ó¥°¥í¥¹:¥¨¥ë¥Õ
B:11:A:0:Ìð¤äÀÐÅù¤ò¶¯²½¤¹¤ë:20:40:a:30:0
B:$11:A:1:Enchant bow:400:800:b:31:0
B:11:A:1:µÝ¤ò¶¯²½¤¹¤ë:400:800:b:31:0
-B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0
-B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0
+B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:2
+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:2
B:$12:N:Paladins Guild:Vilios:Human
B:12:N:¥Ñ¥é¥Ç¥£¥ó¤Î¥®¥ë¥É:¥ô¥£¥ê¥ª¥¹:¿Í´Ö
B:12:A:0:Ëɶñ¤ò¶¯²½¤¹¤ë:400:1000:a:24:0
B:$12:A:1:See Healers:0:150:h:28:0
B:12:A:1:¼£ÎŲȤ˲ñ¤¦:0:150:h:28:0
-B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
-B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
+B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0: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:¥È¥é¥ó¥×Ëâ½Ñ¤ÎÅã:¥Ú¥í¥¤:¥¢¥ó¥Ð¥é¥¤¥È
B:7:A:1:Ëɶñ¤ò¶¯²½¤¹¤ë:200:500:a:24:0
B:$7:A:2:Request quest:0:0:q:6:0
B:7:A:2:¥¯¥¨¥¹¥È:0:0:q:6:0
-B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0
-B:7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0
+B:$7:C:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:2:0:0:2:2:2:0:0: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:¸¼Ô¤ÎÅã:¥ô¥¡¥ë¥»¥í¥ó:ÍÅÀº
B:8:A:1:Á´¤Æ¤Î¥¢¥¤¥Æ¥à¤òºÆ½¼Å¶:0:0:a:45:0
B:$8:A:2:Identify posessions:200:1000:i:26:0
B:8:A:2:»ý¤ÁʪÁ´¤Æ¤ò´ÕÄê:200:1000:i:26:0
-B:$8:C:0:2:0:0:1:0:1:0:0:0:2:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0
-B:8:C:0:2:0:0:1:0:1:0:0:0:2:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0
+B:$8:C:0:2:0:0:1:0:1:0:0:0:2:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0: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:»û±¡:¥«¥Ó¡¼:¥É¥ï¡¼¥Õ
B:9:A:0:¼£ÎŤε§Åø:0:100:h:28:0
B:$9:A:1:Restoration:300:1000:r:29:0
B:9:A:1:ǽÎϲóÉü:300:1000:r:29:0
-B:$9:C:0:0:2:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
-B:9:C:0:0:2:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
+B:$9:C:0:0:2:0:0:1:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0: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:Åð±¤Î¥¢¥¸¥È:¥â¥ë¥Ö¥é¥¨:¥À¡¼¥¯¡¦¥¨¥ë¥Õ
B:10:A:1:°ìÇñ¤¹¤ë:0:50:r:17:0
B:$10:A:2:Identify possessions:175:800:i:26:0
B:10:A:2:»ý¤ÁʪÁ´¤Æ¤ò´ÕÄê:175:800:i:26:0
-B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
-B:10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
+B:$10:C:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0: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:¥¢¡¼¥Á¥ã¡¼¤Î¼ò¾ì:¥±¥ì¥¬¥¤¥ë:¥¨¥ë¥Õ
B:11:A:0:Ìð¤äÀÐÅù¤ò¶¯²½¤¹¤ë:22:44:a:30:0
B:$11:A:1:Enchant bow:400:500:b:31:0
B:11:A:1:µÝ¤ò¶¯²½¤¹¤ë:400:500:b:31:0
-B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0
-B:11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0
+B:$11:C:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:2
+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:2
B:$12:N:Paladins Sanctum:Calpirosse:Half-Elf
B:12:N:¥Ñ¥é¥Ç¥£¥ó¤ÎÀ»½ê:¥«¥ë¥Ñ¥¤¥í¥¹:¥Ï¡¼¥Õ¥¨¥ë¥Õ
B:12:A:0:Ëɶñ¤ò¶¯²½¤¹¤ë:240:440:a:24:0
B:$12:A:1:See Healers:0:100:h:28:0
B:12:A:1:¼£ÎŲȤ˲ñ¤¦:0:100:h:28:0
-B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
-B:12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0
+B:$12:C:0:0:0:0:0:2:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0:0: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:¥È¥é¥ó¥×Ëâ½Ñ¤ÎÅã:¥³¥ì¥¦¥¹:¥¢¥ó¥Ð¥é¥¤¥È
****************************************
- ** Hengband 1.7.0 **
+ ** Hengband 1.7.1 **
****************************************
Based on Moria: Copyright (c) 1985 Robert Alan Koeneke
***************************************
- ** ÊѶòÈÚÅÜ 1.7.0 **
+ ** ÊѶòÈÚÅÜ 1.7.1 **
***************************************
Based on Moria: Copyright (c) 1985 Robert Alan Koeneke
¡Ø¥µ¡¼¥Ú¥ó¥Ä¥¿¥ó¡Ù
¡Ø¥µ¥¤¥É¥ï¥¤¥ó¥À¡¼¡Ù
¡Ø¥¯¥í¥¿¥ë¥¹¤ÎÆDzç¡Ù
-°Å»¦¼Ô·ÕíƤÎ
N: 3:BIAS_FIRE
¡Ø²Ð¤ÎÄ»¡Ù
Tourist, Imitator, BeastMaster, Sorcerer, Archer,
Magic-Eater, Bard, Red-Mage, Samurai, ForceTrainer,
Blue-Mage, Cavalry, Berserker, Weaponsmith, Mirror-Master,
- Ninja
+ Ninja, Sniper
$PLAYER
Returns player name.
Chaos-Warrior, Monk, Mindcrafter, High-Mage, Tourist, Imitator,
BeastMaster, Sorcerer, Archer, Magic-Eater, Bard, Red-Mage,
Samurai, ForceTrainer, Blue-Mage, Cavalry, Berserker, Weaponsmith,
- Mirror-Master, Ninja
+ Mirror-Master, Ninja, Sniper
¤Î¤É¤ì¤«
$PLAYER
- ÃÃÌê(ÃÃÌê»Õ)
- ¶ÀËâË¡(¶À»È¤¤)
- Ǧ½Ñ(Ǧ¼Ô)
+- ¼Í·â½Ñ(¥¹¥Ê¥¤¥Ñ¡¼)
¤³¤ì¤é¤ÎËâË¡(ǽÎÏ)¤Ï²±¤¨Êý¤â»È¤¤Êý¤âÍÍ¡¹¤Ç¤¹¡£¾ÜºÙ¤Ï¿¦¶È¤Î¹à
(jraceclas.hlp#TheClasses [a])¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£
ÃÃÌê»Õ ¶¯¤¤ ¤È¤Æ¤â®¤¤ ÃÙ¤¤
¶À»È¤¤ ¼å¤¤ ÉáÄÌ ¤È¤Æ¤â®¤¤
Ǧ¼Ô ¶¯¤¤ ®¤¤ ÃÙ¤¤
+ ¥¹¥Ê¥¤¥Ñ¡¼ ¶¯¤¤ ÉáÄÌ ÉÔ²Äǽ
µ¿»÷´ÕÄꤵ¤ì¤¿¥¢¥¤¥Æ¥à¤Ï´¶¤¸¤¿ÉʼÁ¤Ë¤è¤Ã¤ÆÌ䬹ï¤Þ¤ì¤Þ¤¹(²¼¤Î [e]¤ò»²
¤«¤Ë®¤¯Áö¤ë»ö¤¬¤Ç¤¤Þ¤¹¡£
+***** <Sniper>
+--- ¥¹¥Ê¥¤¥Ñ¡¼ ---
+ ¥¹¥Ê¥¤¥Ñ¡¼¤Ï¼Í·â¤ËÆò½¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¥¢¡¼¥Á¥ã¡¼¤Î¤è¤¦¤ËÌð¤òÌð·Ñ¤®Áá
+ ¤Ëȯ¼Í¤¹¤ë¥¯¥é¥¹¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£Èà¤é¤Ï¡¢½¸ÃæÎϤò¹â¤á¤ë¤³¤È¤Ç¡¢¼Í·â
+ ¤ÎÀºÅÙ¤ä°ÒÎϤò¹â¤á¤ë¤À¤±¤Ç¤Ï¤Ê¤¯¡¢¤½¤Î¶²¤í¤·¤¤¼Í·â½Ñ¤ò»ÈÍѤ¹¤ë¤³¤È
+ ¤¬¤Ç¤¤Þ¤¹¡£
+
+ Èà¤é¤ËɬÍפʤΤϡ¢¹â°ÒÎϤεݤ䥯¥í¥¹¥Ü¥¦¡¢¼Á¤Î¤è¤¤ÌðÃƤȡ¢²¿»ö¤Ë¤â
+ Æ°¤¸¤Ê¤¤¶¯¤¤Ç¦ÂÑÎϤǤ¹¡£
+
+
***** <ThePersonalities>
=== À³Ê ===
ÃÃÌê»Õ +3 -1 -1 +1 +0 -1 +6 +30%
¶À»È¤¤ -2 +3 +1 -1 -2 +1 +2 +30%
Ǧ¼Ô +0 -1 -1 +3 +2 -1 +2 +20%
+¥¹¥Ê¥¤¥Ñ¡¼ +2 -1 -1 +2 +1 +0 +2 +20%
--- Table 3 - Personality Statistic Bonus Table ---
ÃÃÌê»Õ 30+10 28+10 28+10 1 20 10 60+21 45+15
¶À»È¤¤ 30+10 33+11 40+12 3 14 16 34+6 30+10
Ǧ¼Ô 45+15 24+10 36+10 8 48 32 70+25 66+18
+¥¹¥Ê¥¤¥Ñ¡¼ 25+12 24+10 28+10 5 32 18 35+12 72+28
³Æ¿¦¶È¤Îµ»Ç½Ãͤò¼¨¤¹ 2¤Ä¤Î¿ôÃͤϽé´üµ»Ç½¤È10¥ì¥Ù¥ë¤¢¤¿¤ê¤Î¾å¾ºÂ®ÅÙ¤ò¼¨
¤·¤Æ¤¤¤Þ¤¹¡£Î㤨¤Ð¡¢Àï»Î¤Î²ò½üµ»Ç½¤Ï 25+12 ¤Ç¤¹¤«¤é¡¢30¥ì¥Ù¥ë¤ËÅþ㤷
Åþ㤷¤¿¤È¤¤Ë¤Ï -5 + 40/50 * (-5) ¤Ç -9 ¤Ë¤Ê¤ê¤Þ¤¹¡£
--
-Updated : Hengband 1.3.2
+Updated : Hengband 1.7.0
- Smithery (for Weaponsmith)
- Mirror-magic (for Mirror Master)
- Ninjutsu (for Ninja)
+- Shooting (for Sniper)
See raceclas.txt#TheClasses [a] for more details.
Weaponsmith Strong Very Fast Slow
Mirror-Master Weak Medium Very Fast
Ninja Strong Fast Slow
+ Sniper Strong Medium Impossible
When you pseudo-id an item, it will be inscribed (see below [e]) with
extremely fast.
+***** <Sniper>
+--- Sniper ---
+ Snipers are specialists in marksmanship, but not like archers who
+ fire off arrow after arrow in swift succession. They don't just
+ increase accuracy and power of shots by concentration, they can use
+ fearsome archery techniques.
+
+ What they require is powerful bows or crossbows, good quality
+ ammunition and the fortitude to bear up without flinching under
+ any situation.
+
+ Snipers know their enemies well and can shoot them from the shadows.
+ They have no time for magic.
+
+
***** <ThePersonalities>
=== The Personality ===
Weaponsmith +3 -1 -1 +1 +0 -1 +6 +30%
Mirror-Master -2 +3 +1 -1 -2 +1 +2 +30%
Ninja +0 -1 -1 +3 +2 -1 +2 +20%
+Sniper +2 -1 -1 +2 +1 +0 +2 +20%
--- Table 3 - Personality Statistic Bonus Table ---
Weaponsmith 30+10 28+10 28+10 1 20 10 60+21 45+15
Mirror-Master 30+10 33+11 40+12 3 14 16 34+6 30+10
Ninja 45+15 24+10 36+10 8 48 32 70+25 66+18
+Sniper 25+12 24+10 28+10 5 32 18 35+12 72+28
For character classes, there are two figures: the first figure is the
base level of the ability, while the second figure is the bonus that
--
-Updated : Hengband 1.3.2
+Updated : Hengband 1.7.0
store.c birth.c load.c \
wizard1.c wizard2.c grid.c streams.c rooms.c \
generate.c dungeon.c init1.c init2.c \
- effects.c racial.c inet.c report.c\
+ effects.c racial.c inet.c report.c snipe.c \
artifact.c autopick.c mutation.c flavor.c spells3.c \
mspells1.c mspells2.c scores.c mind.c mane.c hissatsu.c \
bldg.c obj_kind.c wild.c avatar.c japanese.c mspells3.c \
warrior_artifact_bias = 25;
break;
case CLASS_RANGER:
+ case CLASS_SNIPER:
artifact_bias = BIAS_RANGER;
warrior_artifact_bias = 30;
break;
p_ptr->vir_types[i++] = V_TEMPERANCE;
break;
case CLASS_ROGUE:
+ case CLASS_SNIPER:
p_ptr->vir_types[i++] = V_HONOUR;
break;
case CLASS_RANGER:
"¶À»È¤¤¤Ï¡¢ËâÎϤιþ¤á¤é¤ì¤¿¶À¤òºî¤ê½Ð¤·¤Æ¡¢¤½¤ì¤ò¿¨ÇޤȤ·¤Æ¹¶·â¤ò¹Ô¤Ê¤¦¤³¤È¤¬¤Ç¤¤ë¶ÀËâË¡¤ò»È¤¤¤Þ¤¹¡£¶À»È¤¤¤Ï¶À¤Î¾å¤Ç¼ÂÎϤòȯ´ø¤·¡¢¶À¤Î¾å¤Ç¤ÏÁÇÁᤤ¥Æ¥ì¥Ý¡¼¥È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£ËâË¡¤Î¶À¤Ï¡¢¥ì¥Ù¥ë¤Ë¤è¤Ã¤Æ°ìÅÙ¤ËÀ©¸æ¤Ç¤¤ë¿ô¤¬À©¸Â¤µ¤ì¤Þ¤¹¡£¶ÀËâË¡¤ËɬÍפÊǽÎϤÏÃÎǽ¤Ç¤¹¡£",
-"Ǧ¼Ô¤Ï°Å°Ç¤ËÀø¤à¶²¤ë¤Ù¤°Å»¦¼Ô¤Ç¤¢¤ê¡¢¸÷¸»¤ò»ý¤¿¤º¤Ë¹ÔÆ°¤·¡¢Áê¼ê¤ÎÉÔ°Õ¤ò¤Ä¤°ì·â¤Ç©¤Îº¬¤ò»ß¤á¤Þ¤¹¡£¤Þ¤¿¡¢Áê¼ê¤òÏǤ魯¤¿¤á¤ÎǦ½Ñ¤â¿È¤Ë¤Ä¤±¤Þ¤¹¡£æ«¤ä¥É¥¢¤ò¸«¤Ä¤±¤ëǽÎϤËÍ¥¤ì¡¢æ«¤Î²ò½ü¤ä¸°³«¤±¤Ë½Ï㤷¤Æ¤¤¤Þ¤¹¡£·ÚÁõ¤ò¹¥¤ß¡¢½Å¤¤³»¤äÉð´ï¤òÁõÈ÷¤¹¤ë¤ÈÃø¤·¤¯Æ°¤¤¬À©¸Â¤µ¤ì¡¢¤Þ¤¿¡¢½â¤òÁõÈ÷¤·¤è¤¦¤È¤Ï¤·¤Þ¤»¤ó¡£·ÚÁõ¤Ê¤é¤Ð¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤Ë¤Ä¤ì¤è¤ê®¤¯¤è¤êÀŤ«¤Ë¹ÔÆ°¤Ç¤¤Þ¤¹¡£¤µ¤é¤ËǦ¼Ô¤Ï¶²Éݤ»¤º¡¢À®Ä¹¤¹¤ì¤ÐÆǤ¬¤Û¤È¤ó¤É¸ú¤«¤Ê¤¯¤Ê¤ê¡¢Æ©ÌÀ¤Ê¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Ç¦½Ñ¤ËɬÍפÊǽÎϤϴïÍѤµ¤Ç¤¹¡£"
+"Ǧ¼Ô¤Ï°Å°Ç¤ËÀø¤à¶²¤ë¤Ù¤°Å»¦¼Ô¤Ç¤¢¤ê¡¢¸÷¸»¤ò»ý¤¿¤º¤Ë¹ÔÆ°¤·¡¢Áê¼ê¤ÎÉÔ°Õ¤ò¤Ä¤°ì·â¤Ç©¤Îº¬¤ò»ß¤á¤Þ¤¹¡£¤Þ¤¿¡¢Áê¼ê¤òÏǤ魯¤¿¤á¤ÎǦ½Ñ¤â¿È¤Ë¤Ä¤±¤Þ¤¹¡£æ«¤ä¥É¥¢¤ò¸«¤Ä¤±¤ëǽÎϤËÍ¥¤ì¡¢æ«¤Î²ò½ü¤ä¸°³«¤±¤Ë½Ï㤷¤Æ¤¤¤Þ¤¹¡£·ÚÁõ¤ò¹¥¤ß¡¢½Å¤¤³»¤äÉð´ï¤òÁõÈ÷¤¹¤ë¤ÈÃø¤·¤¯Æ°¤¤¬À©¸Â¤µ¤ì¡¢¤Þ¤¿¡¢½â¤òÁõÈ÷¤·¤è¤¦¤È¤Ï¤·¤Þ¤»¤ó¡£·ÚÁõ¤Ê¤é¤Ð¡¢¥ì¥Ù¥ë¤¬¾å¤¬¤ë¤Ë¤Ä¤ì¤è¤ê®¤¯¤è¤êÀŤ«¤Ë¹ÔÆ°¤Ç¤¤Þ¤¹¡£¤µ¤é¤ËǦ¼Ô¤Ï¶²Éݤ»¤º¡¢À®Ä¹¤¹¤ì¤ÐÆǤ¬¤Û¤È¤ó¤É¸ú¤«¤Ê¤¯¤Ê¤ê¡¢Æ©ÌÀ¤Ê¤â¤Î¤ò¸«¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£Ç¦½Ñ¤ËɬÍפÊǽÎϤϴïÍѤµ¤Ç¤¹¡£",
+
+"¥¹¥Ê¥¤¥Ñ¡¼¤Ï°ì·âɬ»¦¤òÁÀ¤¦¶²¤ë¤Ù¤¼Í¼ê¤Ç¤¹¡£Àº¿À¤ò¹â¤á¤ë¤³¤È¤Ë¤è¤ê¡¢¼Í·â¤Î°ÒÎϤÈÀºÅÙ¤ò¹â¤á¤Þ¤¹¡£¤Þ¤¿¡¢ËâË¡¤ò»È¤¦¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¤¬¡¢¸¦¤®À¡¤Þ¤µ¤ì¤¿Àº¿À¤«¤é·«¤ê½Ð¤µ¤ì¤ë¼Í·â½Ñ¤Ï¤µ¤é¤Ê¤ë°ÒÎϤò¤â¤¿¤é¤¹¤³¤È¤Ç¤·¤ç¤¦¡£¥Æ¥¯¥Ë¥Ã¥¯¤¬É¬ÍפȤµ¤ì¤ë¿¦¶È¤Ç¤¹¡£"
#else
"Mirror-Masters are spell casters; like other mages, they must live by their wits. They can create magical mirrors, and employ them in the casting of Mirror-Magic spells. A Mirror-Master standing on a mirror has greater ability and, for example, can perform quick teleports. The maximum number of Magical Mirrors which can be controlled simultaneously depends on the level. Intelligence determines a Mirror-Master's spell casting ability.",
-"A Ninja is a fearful assassin lurking in darkness. He or she can navigate effectively with no light source, catch enemies unawares, and kill with a single blow. Ninjas can use Ninjutsu, and are good at locating hidden traps and doors, disarming traps and picking locks. Since heavy armors, heavy weapons, or shields will restrict their motion greatly, they prefer light clothes, and become faster and more stealthy as they gain levels. A Ninja knows no fear and, at high level, becomes almost immune to poison and able to see invisible things. Dexterity determines a Ninja's ability to use Ninjutsu."
+"A Ninja is a fearful assassin lurking in darkness. He or she can navigate effectively with no light source, catch enemies unawares, and kill with a single blow. Ninjas can use Ninjutsu, and are good at locating hidden traps and doors, disarming traps and picking locks. Since heavy armors, heavy weapons, or shields will restrict their motion greatly, they prefer light clothes, and become faster and more stealthy as they gain levels. A Ninja knows no fear and, at high level, becomes almost immune to poison and able to see invisible things. Dexterity determines a Ninja's ability to use Ninjutsu.",
+
+"Snipers are good at shooting, and they can kill targets by a few shots. After they concentrate deeply, they can demonstrate their shooting talents. You can see incredibly firepower of their shots."
#endif
};
{ TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
{ TV_SWORD, SV_DAGGER }
},
+ {
+ /* Sniper */
+ { TV_BOW, SV_LIGHT_XBOW },
+ { TV_SOFT_ARMOR, SV_SOFT_LEATHER_ARMOR },
+ { TV_SWORD, SV_DAGGER }
+ },
};
add_outfit(q_ptr);
}
+ else if (p_ptr->pclass == CLASS_SNIPER)
+ {
+ /* Hack -- Give the player some bolts */
+ object_prep(q_ptr, lookup_kind(TV_BOLT, SV_AMMO_NORMAL));
+ q_ptr->number = (byte)rand_range(15, 20);
+
+ add_outfit(q_ptr);
+ }
if(p_ptr->pseikaku == SEIKAKU_SEXY)
{
int i, k;
/* Extract "shot" power */
- i = (weight + ((p_ptr->to_h_b + plus) * 4) + (p_ptr->lev * 2));
+ i = ((p_ptr->to_h_b + plus) * 4) + (p_ptr->lev * 2);
+
+ /* Snipers can shot more critically with crossbows */
+ if (p_ptr->concent) i += ((i * p_ptr->concent) / 5);
+ if ((p_ptr->pclass == CLASS_SNIPER) && (p_ptr->tval_ammo == TV_BOLT)) i *= 2;
/* Critical hit */
if (randint1(5000) <= i)
{
- k = weight + randint1(500);
+ k = weight * randint1(500);
- if (k < 500)
+ if (k < 900)
{
#ifdef JP
msg_print("¼ê¤´¤¿¤¨¤¬¤¢¤Ã¤¿¡ª");
msg_print("It was a good hit!");
#endif
- dam = 2 * dam + 5;
+ dam += (dam / 2);
}
- else if (k < 1000)
+ else if (k < 1350)
{
#ifdef JP
msg_print("¤«¤Ê¤ê¤Î¼ê¤´¤¿¤¨¤¬¤¢¤Ã¤¿¡ª");
msg_print("It was a great hit!");
#endif
- dam = 2 * dam + 10;
+ dam *= 2;
}
else
{
msg_print("It was a superb hit!");
#endif
- dam = 3 * dam + 15;
+ dam *= 3;
}
}
{
int archer_bonus = (p_ptr->pclass == CLASS_ARCHER ? (p_ptr->lev-1)/7 + 4: 0);
+ /* Examine the snipe type */
+ if (snipe_type)
+ {
+ if (snipe_type == SP_KILL_WALL) return (100);
+ if (snipe_type == SP_EXPLODE) return (100);
+ if (snipe_type == SP_PIERCE) return (100);
+ if (snipe_type == SP_FINAL) return (100);
+ if (snipe_type == SP_NEEDLE) return (100);
+ if (snipe_type == SP_EVILNESS) return (40);
+ if (snipe_type == SP_HOLYNESS) return (40);
+ }
+
/* Examine the item type */
switch (o_ptr->tval)
{
}
}
+ /* Sniper */
+ if (snipe_type) mult = tot_dam_aux_snipe(mult, m_ptr);
+
/* Return the total damage */
return (tdam * mult / 10);
}
void do_cmd_fire_aux(int item, object_type *j_ptr)
{
int dir;
- int j, y, x, ny, nx, ty, tx, prev_y, prev_x;
+ int i, j, y, x, ny, nx, ty, tx, prev_y, prev_x;
int tdam, tdis, thits, tmul;
int bonus, chance;
int cur_dis, visible;
o_ptr = &o_list[0 - item];
}
+ /* Sniper - Cannot shot a single arrow twice */
+ if ((snipe_type == SP_DOUBLE) && (o_ptr->number < 2)) snipe_type = SP_NONE;
+
/* Describe the object */
object_desc(o_name, o_ptr, OD_OMIT_PREFIX);
-
/* Use the proper number of shots */
thits = p_ptr->num_fire;
tdam *= tmul;
tdam /= 100;
+ /* Get extra damage from concentration */
+ if (p_ptr->concent) tdam = boost_concentration_damage(tdam);
+
/* Base range */
- tdis = 10 + tmul/40;
+ tdis = 13 + tmul/80;
if ((j_ptr->sval == SV_LIGHT_XBOW) || (j_ptr->sval == SV_HEAVY_XBOW))
- tdis -= 5;
+ {
+ if (p_ptr->concent)
+ tdis -= (5 - (p_ptr->concent + 1) / 2);
+ else
+ tdis -= 5;
+ }
project_length = tdis + 1;
{
energy_use = 0;
+ if (snipe_type == SP_AWAY) snipe_type = SP_NONE;
+
/* need not to reset project_length (already did)*/
return;
}
- /* Start at the player */
- y = py;
- x = px;
-
/* Predict the "target" location */
tx = px + 99 * ddx[dir];
ty = py + 99 * ddy[dir];
}
+ /* Take a (partial) turn */
+ energy_use = (energy_use / thits);
+ is_fired = TRUE;
+
+ /* Sniper - Difficult to shot twice at 1 turn */
+ if (snipe_type == SP_DOUBLE) p_ptr->concent = (p_ptr->concent + 1) / 2;
+
+ /* Sniper - Repeat shooting when double shots */
+ for (i = 0; i < ((snipe_type == SP_DOUBLE) ? 2 : 1); i++)
+ {
+
+ /* Start at the player */
+ y = py;
+ x = px;
+
/* Get local object */
q_ptr = &forge;
floor_item_optimize(0 - item);
}
-
/* Sound */
sound(SOUND_SHOOT);
-
- /* Take a (partial) turn */
- energy_use = (energy_use / thits);
-
-
/* Hack -- Handle stuff */
handle_stuff();
prev_y = y;
prev_x = x;
+ /* The shot does not hit yet */
+ hit_body = FALSE;
+
/* Travel until stopped */
for (cur_dis = 0; cur_dis <= tdis; )
{
+ cave_type *c_ptr;
+
/* Hack -- Stop at the target */
if ((y == ty) && (x == tx)) break;
nx = x;
mmove2(&ny, &nx, py, px, ty, tx);
+ /* Shatter Arrow */
+ if (snipe_type == SP_KILL_WALL)
+ {
+ c_ptr = &cave[ny][nx];
+
+ if (cave_have_flag_grid(c_ptr, FF_HURT_ROCK) && !c_ptr->m_idx)
+ {
+#ifdef JP
+ if (c_ptr->info & (CAVE_MARK)) msg_print("´ä¤¬ºÕ¤±»¶¤Ã¤¿¡£");
+#else
+ if (c_ptr->info & (CAVE_MARK)) msg_print("Wall rocks were shattered.");
+#endif
+ /* Forget the wall */
+ c_ptr->info &= ~(CAVE_MARK);
+
+ p_ptr->update |= (PU_VIEW | PU_LITE | PU_FLOW | PU_MON_LITE);
+
+ /* Destroy the wall */
+ cave_alter_feat(ny, nx, FF_HURT_ROCK);
+
+ hit_body = TRUE;
+ break;
+ }
+ }
+
/* Stopped by walls/doors */
if (!cave_have_flag_bold(ny, nx, FF_PROJECT) && !cave[ny][nx].m_idx) break;
/* Advance the distance */
cur_dis++;
+ /* Sniper */
+ if (snipe_type == SP_LITE)
+ {
+ cave[ny][nx].info |= (CAVE_GLOW);
+
+ /* Notice */
+ note_spot(ny, nx);
+
+ /* Redraw */
+ lite_spot(ny, nx);
+ }
/* The player can see the (on screen) missile */
if (panel_contains(ny, nx) && player_can_see_bold(ny, nx))
Term_xtra(TERM_XTRA_DELAY, msec);
}
+ /* Sniper */
+ if (snipe_type == SP_KILL_TRAP)
+ {
+ if (is_trap(cave[ny][nx].feat))
+ {
+ if (player_can_see_bold(ny, nx))
+ {
+#ifdef JP
+ msg_print("¤Þ¤Ð¤æ¤¤Á®¸÷¤¬Áö¤Ã¤¿¡ª");
+#else
+ msg_print("There is a bright flash of light!");
+#endif
+ cave[ny][nx].info &= ~(CAVE_UNSAFE);
+ }
+
+ cave_alter_feat(ny, nx, FF_DISARM);
+ }
+ }
+
+ /* Sniper */
+ if (snipe_type == SP_EVILNESS)
+ {
+ cave[ny][nx].info &= ~(CAVE_GLOW | CAVE_MARK);
+
+ /* Notice */
+ note_spot(ny, nx);
+
+ /* Redraw */
+ lite_spot(ny, nx);
+ }
+
/* Save the old location */
prev_y = y;
prev_x = x;
/* Monster here, Try to hit it */
if (cave[y][x].m_idx)
{
+ int armour;
cave_type *c_ptr = &cave[y][x];
monster_type *m_ptr = &m_list[c_ptr->m_idx];
}
}
+ /* Some shots have hit bonus */
+ armour = r_ptr->ac;
+ if (p_ptr->concent)
+ {
+ armour *= (10 - p_ptr->concent);
+ armour /= 10;
+ }
+
/* Did we hit it (penalize range) */
- if (test_hit_fire(chance - cur_dis, r_ptr->ac, m_ptr->ml))
+ if (test_hit_fire(chance - cur_dis, armour, m_ptr->ml))
{
bool fear = FALSE;
}
}
- /* Apply special damage XXX XXX XXX */
- tdam = tot_dam_aux_shot(q_ptr, tdam, m_ptr);
- tdam = critical_shot(q_ptr->weight, q_ptr->to_h, tdam);
+ if (snipe_type == SP_NEEDLE)
+ {
+ if ((randint1(randint1(r_ptr->level / (3 + p_ptr->concent)) + (8 - p_ptr->concent)) == 1)
+ && !(r_ptr->flags1 & RF1_UNIQUE) && !(r_ptr->flags7 & RF7_UNIQUE2))
+ {
+ char m_name[80];
- /* No negative damage */
- if (tdam < 0) tdam = 0;
+ /* Get "the monster" or "it" */
+ monster_desc(m_name, m_ptr, 0);
- /* Modify the damage */
- tdam = mon_damage_mod(m_ptr, tdam, FALSE);
+ tdam = m_ptr->hp + 1;
+#ifdef JP
+ msg_format("%s¤ÎµÞ½ê¤ËÆͤ»É¤µ¤Ã¤¿¡ª", m_name);
+#else
+ msg_format("Your shot sticked on a fatal spot of %s!", m_name);
+#endif
+ }
+ else tdam = 1;
+ }
+ else
+ {
+ /* Apply special damage XXX XXX XXX */
+ tdam = tot_dam_aux_shot(q_ptr, tdam, m_ptr);
+ tdam = critical_shot(q_ptr->weight, q_ptr->to_h, tdam);
+
+ /* No negative damage */
+ if (tdam < 0) tdam = 0;
+
+ /* Modify the damage */
+ tdam = mon_damage_mod(m_ptr, tdam, FALSE);
+ }
/* Complex message */
if (p_ptr->wizard || cheat_xtra)
}
+ /* Sniper */
+ if (snipe_type == SP_EXPLODE)
+ {
+ u16b flg = (PROJECT_STOP | PROJECT_JUMP | PROJECT_KILL | PROJECT_GRID);
+
+ sound(SOUND_EXPLODE); /* No explode sound - use breath fire instead */
+ project(0, ((p_ptr->concent + 1) / 2 + 1), ny, nx, tdam, GF_MISSILE, flg, -1);
+ break;
+ }
+
+ /* Sniper */
+ if (snipe_type == SP_HOLYNESS)
+ {
+ cave[ny][nx].info |= (CAVE_GLOW);
+
+ /* Notice */
+ note_spot(ny, nx);
+
+ /* Redraw */
+ lite_spot(ny, nx);
+ }
+
/* Hit the monster, check for death */
if (mon_take_hit(c_ptr->m_idx, tdam, &fear, extract_note_dies(real_r_ptr(m_ptr))))
{
#endif
}
+
set_target(m_ptr, py, px);
+
+ /* Sniper */
+ if (snipe_type == SP_RUSH)
+ {
+ int n = randint1(5) + 3;
+ int m_idx = c_ptr->m_idx;
+
+ for ( ; cur_dis <= tdis; )
+ {
+ int ox = nx;
+ int oy = ny;
+
+ if (!n) break;
+
+ /* Calculate the new location (see "project()") */
+ mmove2(&ny, &nx, py, px, ty, tx);
+
+ /* Stopped by wilderness boundary */
+ if (!in_bounds2(ny, nx)) break;
+
+ /* Stopped by walls/doors */
+ if (!player_can_enter(cave[ny][nx].feat, 0)) break;
+
+ /* Stopped by monsters */
+ if (!cave_empty_bold(ny, nx)) break;
+
+ cave[ny][nx].m_idx = m_idx;
+ cave[oy][ox].m_idx = 0;
+
+ m_ptr->fx = nx;
+ m_ptr->fy = ny;
+
+ /* Update the monster (new location) */
+ update_mon(c_ptr->m_idx, TRUE);
+
+ lite_spot(ny, nx);
+ lite_spot(oy, ox);
+
+ Term_fresh();
+ Term_xtra(TERM_XTRA_DELAY, msec);
+
+ x = nx;
+ y = ny;
+ cur_dis++;
+ n--;
+ }
+ }
}
}
+ /* Sniper */
+ if (snipe_type == SP_PIERCE)
+ {
+ if(p_ptr->concent < 1) break;
+ p_ptr->concent--;
+ continue;
+ }
+
/* Stop looking */
break;
}
/* Drop (or break) near that location */
(void)drop_near(q_ptr, j, prev_y, prev_x);
}
+
+ /* Sniper - Repeat shooting when double shots */
+ }
+
+ /* Sniper - Loose his/her concentration after any shot */
+ if (p_ptr->concent) reset_concentration(FALSE);
}
object_type *j_ptr;
cptr q, s;
+ is_fired = FALSE; /* not fired yet */
+
/* Get the "bow" (if any) */
j_ptr = &inventory[INVEN_BOW];
/* Fire the item */
do_cmd_fire_aux(item, j_ptr);
+
+ if (!is_fired || p_ptr->pclass != CLASS_SNIPER) return;
+
+ /* Sniper actions after some shootings */
+ if (snipe_type == SP_AWAY)
+ {
+ teleport_player(10 + (p_ptr->concent * 2), 0L);
+ }
+ if (snipe_type == SP_FINAL)
+ {
+#ifdef JP
+ msg_print("¼Í·â¤ÎÈ¿Æ°¤¬ÂΤò½±¤Ã¤¿¡£");
+#else
+ msg_print("A reactionary of shooting attacked you. ");
+#endif
+ (void)set_slow(p_ptr->slow + randint0(7) + 7, FALSE);
+ (void)set_stun(p_ptr->stun + randint1(25));
+ }
}
}
case ART_BRAND:
+ case ART_HELLFIRE:
{
#ifdef JP
msg_print("¥¯¥í¥¹¥Ü¥¦¤¬¿¼¹È¤Ëµ±¤¤¤¿...");
break;
}
+ case ART_AESCULAPIUS:
+ {
+#ifdef JP
+ msg_print("Ï»¼ÜËÀ¤ÏÇ»Îп§¤Ëµ±¤¤¤Æ¤¤¤ë...");
+#else
+ msg_print("The jo staff glows a deep green...");
+#endif
+
+ (void)do_res_stat(A_STR);
+ (void)do_res_stat(A_INT);
+ (void)do_res_stat(A_WIS);
+ (void)do_res_stat(A_DEX);
+ (void)do_res_stat(A_CON);
+ (void)do_res_stat(A_CHR);
+ (void)restore_level();
+ o_ptr->timeout = 750;
+ break;
+ }
+
case ART_NIGHT:
{
#ifdef JP
*/
#define H_VER_MAJOR 1
#define H_VER_MINOR 7
-#define H_VER_PATCH 0
+#define H_VER_PATCH 1
#define H_VER_EXTRA 6
/*
* Maximum number of player "class" types (see "table.c", etc)
*/
-#define MAX_CLASS 27
+#define MAX_CLASS 28
#define MAX_SEIKAKU 12
#define CLASS_SMITH 24
#define CLASS_MIRROR_MASTER 25
#define CLASS_NINJA 26
+#define CLASS_SNIPER 27
#define SEIKAKU_FUTUU 0
#define SEIKAKU_CHIKARA 1
#define ART_GOTHMOG 212
#define ART_JIZO 213
#define ART_FUNDIN 214
+#define ART_AESCULAPIUS 225
/* Bows */
#define ART_BELTHRONDING 124
#define ART_YOICHI 148
#define ART_HARAD 180
#define ART_NAMAKE_BOW 182
+#define ART_ROBIN_HOOD 221
+#define ART_HELLFIRE 222
/* Arrows */
#define ART_BARD_ARROW 153
* For travel command (auto run)
*/
#define TRAVEL
+
+/* Sniper */
+#define SP_NONE 0
+#define SP_LITE 1
+#define SP_AWAY 2
+#define SP_FIRE 3
+#define SP_KILL_WALL 4
+#define SP_COLD 5
+#define SP_KILL_TRAP 6
+#define SP_ELEC 7
+#define SP_PIERCE 8
+#define SP_RUSH 9
+#define SP_DOUBLE 10
+#define SP_EXPLODE 11
+#define SP_EVILNESS 12
+#define SP_HOLYNESS 13
+#define SP_FINAL 14
+#define SP_NEEDLE 15
+
+#define CONCENT_RADAR_THRESHOLD 2
+#define CONCENT_TELE_THRESHOLD 5
}
case CLASS_PALADIN:
+ case CLASS_SNIPER:
{
/* Bad sensing */
if (0 != randint0(77777L / (plev * plev + 40))) return;
case CLASS_SAMURAI:
case CLASS_CAVALRY:
case CLASS_BERSERKER:
+ case CLASS_SNIPER:
{
return;
}
now_message = 0;
+ /* Sniper */
+ if ((p_ptr->pclass == CLASS_SNIPER) && (p_ptr->concent))
+ reset_concent = TRUE;
+
/* Parse the command */
switch (command_cmd)
{
do_cmd_kaji(TRUE);
else if (p_ptr->pclass == CLASS_MAGIC_EATER)
do_cmd_magic_eater(TRUE);
+ else if (p_ptr->pclass == CLASS_SNIPER)
+ do_cmd_snipe_browse();
else do_cmd_browse();
break;
}
do_cmd_cast_learned();
else if (p_ptr->pclass == CLASS_SMITH)
do_cmd_kaji(FALSE);
+ else if (p_ptr->pclass == CLASS_SNIPER)
+ do_cmd_snipe();
else
do_cmd_cast();
}
break;
}
+ /* Sniper */
+ if (energy_use && reset_concent) reset_concentration(TRUE);
+
/* Handle "leaving" */
if (p_ptr->leaving) break;
}
p_ptr->action = ACTION_NONE;
}
+ /* Sniper */
+ if (p_ptr->concent) reset_concentration(TRUE);
+
notice = TRUE;
p_ptr->counter = FALSE;
chg_virtue(V_HARMONY, -1);
msg_print("You are paralyzed!");
#endif
+ /* Sniper */
+ if (p_ptr->concent) reset_concentration(TRUE);
+
p_ptr->counter = FALSE;
notice = TRUE;
}
msg_print("Oh, wow! Everything looks so cosmic now!");
#endif
+ /* Sniper */
+ if (p_ptr->concent) reset_concentration(TRUE);
+
p_ptr->counter = FALSE;
notice = TRUE;
}
p_ptr->action = ACTION_NONE;
}
+ /* Sniper */
+ if (p_ptr->concent) reset_concentration(TRUE);
+
/* Notice */
notice = TRUE;
}
/* for travel */
extern travel_type travel;
#endif
+
+/* variable.c (for snipers) */
+extern int snipe_type;
+extern bool reset_concent; /* Concentration reset flag */
+extern bool is_fired;
+
+/* sniper.c */
+extern void reset_concentration(bool msg);
+extern void display_snipe_list(void);
+extern int tot_dam_aux_snipe (int mult, monster_type *m_ptr);
+extern void do_cmd_snipe(void);
+extern void do_cmd_snipe_browse(void);
+extern int boost_concentration_damage(int tdam);
/* Launcher multiplier */
avgdam *= tmul;
avgdam /= (100 * 10);
+
+ /* Get extra damage from concentration */
+ if (p_ptr->concent) avgdam = boost_concentration_damage(avgdam);
+
if (avgdam < 0) avgdam = 0;
/* Display (shot damage/ avg damage) */
/* More info */
strip_bytes(8);
rd_s16b(&p_ptr->sc);
- strip_bytes(2);
+ rd_s16b(&p_ptr->concent);
/* Read the flags */
strip_bytes(2); /* Old "rest" */
grid.obj hissatsu.obj inet.obj init1.obj init2.obj japanese.obj \
load.obj main-win.obj mane.obj melee1.obj melee2.obj mind.obj \
monster1.obj monster2.obj mspells1.obj mspells2.obj mspells3.obj \
- mutation.obj \
+ mutation.obj snipe.obj \
obj_kind.obj object1.obj object2.obj racial.obj readdib.obj \
report.obj rooms.obj save.obj scores.obj spells1.obj \
spells2.obj spells3.obj store.obj streams.obj tables.obj util.obj \
do-spell.o store.o birth.o load.o \
wizard1.o wizard2.o grid.o streams.o rooms.o \
generate.o dungeon.o init1.o init2.o \
- effects.o racial.o \
+ effects.o racial.o snipe.o \
artifact.o autopick.o mutation.o flavor.o spells3.o \
mspells1.o mspells2.o scores.o mind.o mane.o hissatsu.o \
bldg.o obj_kind.o wild.o avatar.o japanese.o mspells3.o \
racial.o: racial.c $(INCS)
save.o: save.c $(INCS)
scores.o: scores.c $(INCS)
+snipe.o: snipe.c $(INCS)
spells1.o: spells1.c $(INCS)
spells2.o: spells2.c $(INCS)
spells3.o: spells3.c $(INCS)
do-spell.o store.o birth.o load.o \
wizard1.o wizard2.o grid.o streams.o rooms.o \
generate.o dungeon.o init1.o init2.o \
- effects.o racial.o \
+ effects.o racial.o snipe.c \
artifact.o autopick.o mutation.o flavor.o spells3.o \
mspells1.o mspells2.o scores.o mind.o mane.o hissatsu.o \
bldg.o obj_kind.o wild.o avatar.o japanese.o mspells3.o \
do-spell.c store.c birth.c load.c \
wizard1.c wizard2.c grid.c streams.c rooms.c \
generate.c dungeon.c init1.c init2.c \
- effects.c racial.c inet.c report.c\
+ effects.c racial.c inet.c report.c snipe.c \
artifact.c autopick.c mutation.c flavor.c spells3.c \
mspells1.c mspells2.c scores.c mind.c mane.c hissatsu.c \
bldg.c obj_kind.c wild.c avatar.c japanese.c mspells3.c \
do-spell.o store.o birth.o load.o \
wizard1.o wizard2.o grid.o streams.o rooms.o \
generate.o dungeon.o init1.o init2.o \
- effects.o racial.o inet.o report.o \
+ effects.o racial.o inet.o report.o snipe.o \
artifact.o autopick.o mutation.o flavor.o spells3.o \
mspells1.o mspells2.o scores.o mind.o mane.o hissatsu.o \
bldg.o obj_kind.o wild.o avatar.o japanese.o mspells3.o \
report.o: report.c $(INCS)
scores.o: scores.c $(INCS)
save.o: save.c $(INCS)
+snipe.o: snipe.c $(INCS)
spells1.o: spells1.c $(INCS)
spells2.o: spells2.c $(INCS)
spells3.o: spells3.c $(INCS)
}
/* Basic telepathy */
- else if (p_ptr->telepathy)
+ /* Snipers get telepathy when they concentrate deeper */
+ else if ((p_ptr->telepathy) || (p_ptr->concent >= CONCENT_TELE_THRESHOLD))
{
/* Empty mind, no telepathy */
if (r_ptr->flags2 & (RF2_EMPTY_MIND))
bool do_invisible = FALSE;
bool do_cold_blood = FALSE;
+ /* Snipers can see targets in darkness when they concentrate deeper */
+ if (p_ptr->concent >= CONCENT_RADAR_THRESHOLD)
+ {
+ /* Easy to see */
+ easy = flag = TRUE;
+ }
+
/* Use "infravision" */
if (d <= p_ptr->see_infra)
{
}
case ART_BRAND:
+ case ART_HELLFIRE:
{
#ifdef JP
return "¿ÏÀè¤Î¥Õ¥¡¥¤¥¢¡¦¥Ü¥ë¥È : 999 ¥¿¡¼¥óËè";
#endif
}
+ case ART_AESCULAPIUS:
+ {
+#ifdef JP
+ return "Á´¥¹¥Æ¡¼¥¿¥¹¤È·Ð¸³ÃÍÉü³è : 750 ¥¿¡¼¥óËè";
+#else
+ return "restore stats and life levels every 750 turns";
+#endif
+ }
}
break;
}
case CLASS_RANGER:
+ case CLASS_SNIPER:
{
#ifdef JP
msg_print("Ũ¤òÄ´ºº¤·¤¿...");
break;
}
case CLASS_RANGER:
+ case CLASS_SNIPER:
{
#ifdef JP
strcpy(power_desc[num].name, "¥â¥ó¥¹¥¿¡¼Ä´ºº");
wr_s16b(0); /* oops */
wr_s16b(0); /* oops */
wr_s16b(p_ptr->sc);
- wr_s16b(0); /* oops */
+ wr_s16b(p_ptr->concent);
wr_s16b(0); /* old "rest" */
wr_s16b(p_ptr->blind);
--- /dev/null
+#include "angband.h"
+
+#define MAX_SNIPE_POWERS 16
+
+typedef struct snipe_power snipe_power;
+struct snipe_power
+{
+ int min_lev;
+ int mana_cost;
+ const char *name;
+};
+
+static const char *snipe_tips[MAX_SNIPE_POWERS] =
+{
+#ifdef JP
+ "Àº¿À¤ò½¸Ã椹¤ë¡£¼Í·â¤Î°ÒÎÏ¡¢ÀºÅÙ¤¬¾å¤¬¤ê¡¢¹âÅ٤ʼͷâ½Ñ¤¬»ÈÍѤǤ¤ë¤è¤¦¤Ë¤Ê¤ë¡£",
+ "¸÷¤ëÌð¤òÊü¤Ä¡£¸÷¤Ë¼å¤¤¥â¥ó¥¹¥¿¡¼¤Ë°ÒÎϤòȯ´ø¤¹¤ë¡£",
+ "¼Í·â¤ò¹Ô¤Ã¤¿¸å¡¢Ã»µ÷Î¥¤Î½Ö´Ö°ÜÆ°¤ò¹Ô¤¦¡£",
+ "µ°Æ»¾å¤Î櫤ò¤¹¤Ù¤Æ̵¸ú¤Ë¤¹¤ëÄã¶õÈô¹Ô¤ÎÌð¤òÊü¤Ä¡£",
+ "²Ð±ê°À¤ÎÌð¤òÊü¤Ä¡£",
+ "ÊɤòÊ´ºÕ¤¹¤ëÌð¤òÊü¤Ä¡£´ä¤Ç¤Ç¤¤¿¥â¥ó¥¹¥¿¡¼¤È̵À¸Êª¤Î¥â¥ó¥¹¥¿¡¼¤Ë°ÒÎϤòȯ´ø¤¹¤ë¡£",
+ "Î䵤°À¤ÎÌð¤òÊü¤Ä¡£",
+ "Ũ¤òÆͤÈô¤Ð¤¹Ìð¤òÊü¤Ä¡£",
+ "Ê£¿ô¤ÎŨ¤ò´ÓÄ̤¹¤ëÌð¤òÊü¤Ä¡£",
+ "Á±Îɤʥâ¥ó¥¹¥¿¡¼¤Ë°ÒÎϤòȯ´ø¤¹¤ëÌð¤òÊü¤Ä¡£",
+ "¼Ù°¤Ê¥â¥ó¥¹¥¿¡¼¤Ë°ÒÎϤòȯ´ø¤¹¤ëÌð¤òÊü¤Ä¡£",
+ "Åö¤¿¤ë¤ÈÇúȯ¤¹¤ëÌð¤òÊü¤Ä¡£",
+ "2²ó¼Í·â¤ò¹Ô¤¦¡£",
+ "ÅÅ·â°À¤ÎÌð¤òÊü¤Ä¡£",
+ "Ũ¤ÎµÞ½ê¤Ë¤á¤¬¤±¤ÆÌð¤òÊü¤Ä¡£À®¸ù¤¹¤ë¤ÈŨ¤ò°ì·â»à¤µ¤»¤ë¡£¼ºÇÔ¤¹¤ë¤È1¥À¥á¡¼¥¸¡£",
+ "Á´¤Æ¤Î¥â¥ó¥¹¥¿¡¼¤Ë¹â°ÒÎϤòȯ´ø¤¹¤ëÌð¤òÊü¤Ä¡£È¿Æ°¤Ë¤è¤ëÉû¼¡¸ú²Ì¤ò¼õ¤±¤ë¡£",
+#else
+ "Concentrate your mind fot shooting.",
+ "Shot an allow with brightness.",
+ "Blink after shooting.",
+ "Shot an allow able to shatter traps.",
+ "Deals extra damege of fire.",
+ "Shot an allow able to shatter rocks.",
+ "Deals extra damege of ice.",
+ "An allow rushes away a target.",
+ "An allow pierces some monsters.",
+ "Deals more damage to good monsters.",
+ "Deals more damage to evil monsters.",
+ "An allow explodes when it hits a monster.",
+ "Shot allows twice.",
+ "Deals extra damege of lightning.",
+ "Deals quick death or 1 damage.",
+ "Deals great damage to all monsters, and some side effects to you.",
+#endif
+};
+
+snipe_power snipe_powers[MAX_SNIPE_POWERS] =
+{
+ /* Level gained, cost, name */
+#ifdef JP
+ { 1, 0, "Àº¿À½¸Ãæ" },
+ { 2, 1, "¥Õ¥é¥Ã¥·¥å¥¢¥í¡¼" },
+ { 3, 1, "¥·¥å¡¼¥È¡õ¥¢¥¦¥§¥¤" },
+ { 5, 1, "²ò½ü¤ÎÌð" },
+ { 8, 2, "²Ð±ê¤ÎÌð" },
+ { 10, 2, "´äºÕ¤" },
+ { 13, 2, "Î䵤¤ÎÌð" },
+ { 18, 2, "ÎõÉ÷ÃÆ"},
+ { 22, 3, "´ÓÄÌÃÆ" },
+ { 25, 4, "¼ÙÇ°ÃÆ"},
+ { 26, 4, "ÇËËâÌð" },
+ { 30, 3, "Çúȯ¤ÎÌð"},
+ { 32, 4, "¥À¥Ö¥ë¥·¥ç¥Ã¥È" },
+ { 36, 3, "¥×¥é¥º¥Þ¥Ü¥ë¥È" },
+ { 40, 3, "¥Ë¡¼¥É¥ë¥·¥ç¥Ã¥È" },
+ { 48, 7, "¥»¥¤¥ó¥È¥¹¥¿¡¼¥¢¥í¡¼" },
+#else
+ { 1, 0, "Concentration" },
+ { 2, 1, "Flush Arrow" },
+ { 3, 1, "Shoot & Away" },
+ { 5, 1, "Disarm Shot" },
+ { 8, 2, "Fire Shot" },
+ { 10, 2, "Shatter Arrow" },
+ { 13, 2, "Ice Shot" },
+ { 18, 2, "Rushing Arrow"},
+ { 22, 3, "Piercing Shot" },
+ { 25, 4, "Evil Shot"},
+ { 26, 4, "Holy Shot" },
+ { 30, 3, "Missile"},
+ { 32, 4, "Double Shot" },
+ { 36, 3, "Plasma Bolt" },
+ { 40, 3, "Needle Shot" },
+ { 48, 7, "Saint Stars Arrow" },
+#endif
+};
+
+
+static bool snipe_concentrate(void)
+{
+ if ((int)p_ptr->concent < (2 + (p_ptr->lev + 5) / 10)) p_ptr->concent++;
+
+#ifdef JP
+ msg_format("½¸Ã椷¤¿¡£(½¸ÃæÅÙ %d)", p_ptr->concent);
+#else
+ msg_format("You concentrate deeply. (lvl %d)", p_ptr->concent);
+#endif
+
+ reset_concent = FALSE;
+
+ p_ptr->redraw |= (PR_STATUS);
+
+ /* Update the monsters */
+ p_ptr->update |= (PU_MONSTERS);
+
+ return (TRUE);
+}
+
+void reset_concentration(bool msg)
+{
+ if (msg)
+ {
+#ifdef JP
+ msg_print("½¸ÃæÎϤ¬ÅÓÀÚ¤ì¤Æ¤·¤Þ¤Ã¤¿¡£");
+#else
+ msg_print("Stop concentrating.");
+#endif
+ }
+
+ p_ptr->concent = 0;
+ reset_concent = FALSE;
+
+ p_ptr->redraw |= (PR_STATUS);
+
+ /* Update the monsters */
+ p_ptr->update |= (PU_MONSTERS);
+}
+
+int boost_concentration_damage(int tdam)
+{
+ tdam *= (10 + p_ptr->concent);
+ tdam /= 10;
+
+ return (tdam);
+}
+
+void display_snipe_list(void)
+{
+ int i;
+ int y = 1;
+ int x = 1;
+ int plev = p_ptr->lev;
+ snipe_power spell;
+ char psi_desc[80];
+
+ /* Display a list of spells */
+ prt("", y, x);
+#ifdef JP
+ put_str("̾Á°", y, x + 5);
+ put_str("Lv MP", y, x + 35);
+#else
+ put_str("Name", y, x + 5);
+ put_str("Lv Mana", y, x + 35);
+#endif
+
+ /* Dump the spells */
+ for (i = 0; i < MAX_SNIPE_POWERS; i++)
+ {
+ /* Access the available spell */
+ spell = snipe_powers[i];
+ if (spell.min_lev > plev) continue;
+ if (spell.mana_cost > (int)p_ptr->concent) continue;
+
+ /* Dump the spell */
+ sprintf(psi_desc, " %c) %-30s%2d %4d",
+ I2A(i), spell.name, spell.min_lev, spell.mana_cost);
+
+ Term_putstr(x, y + i + 1, -1, TERM_WHITE, psi_desc);
+ }
+ return;
+}
+
+
+/*
+ * Allow user to choose a mindcrafter power.
+ *
+ * If a valid spell is chosen, saves it in '*sn' and returns TRUE
+ * If the user hits escape, returns FALSE, and set '*sn' to -1
+ * If there are no legal choices, returns FALSE, and sets '*sn' to -2
+ *
+ * The "prompt" should be "cast", "recite", or "study"
+ * The "known" should be TRUE for cast/pray, FALSE for study
+ *
+ * nb: This function has a (trivial) display bug which will be obvious
+ * when you run it. It's probably easy to fix but I haven't tried,
+ * sorry.
+ */
+static int get_snipe_power(int *sn, bool only_browse)
+{
+ int i;
+ int num = 0;
+ int y = 1;
+ int x = 20;
+ int plev = p_ptr->lev;
+ int ask;
+ char choice;
+ char out_val[160];
+#ifdef JP
+ cptr p = "¼Í·â½Ñ";
+#else
+ cptr p = "power";
+#endif
+ snipe_power spell;
+ bool flag, redraw;
+
+#ifdef ALLOW_REPEAT /* TNB */
+
+ repeat_push(*sn);
+
+ /* Assume cancelled */
+ *sn = (-1);
+
+ /* Repeat previous command */
+ /* Get the spell, if available */
+ if (repeat_pull(sn))
+ {
+ /* Verify the spell */
+ if ((snipe_powers[*sn].min_lev <= plev) && (snipe_powers[*sn].mana_cost <= (int)p_ptr->concent))
+ {
+ /* Success */
+ return (TRUE);
+ }
+ }
+
+#endif /* ALLOW_REPEAT -- TNB */
+
+ /* Nothing chosen yet */
+ flag = FALSE;
+
+ /* No redraw yet */
+ redraw = FALSE;
+
+ for (i = 0; i < MAX_SNIPE_POWERS; i++)
+ {
+ if ((snipe_powers[i].min_lev <= plev) &&
+ ((only_browse) || (snipe_powers[i].mana_cost <= (int)p_ptr->concent)))
+ {
+ num = i;
+ }
+ }
+
+ /* Build a prompt (accept all spells) */
+ if (only_browse)
+ {
+#ifdef JP
+ (void)strnfmt(out_val, 78, "(%^s %c-%c, '*'¤Ç°ìÍ÷, ESC) ¤É¤Î%s¤Ë¤Ä¤¤¤ÆÃΤê¤Þ¤¹¤«¡©",
+#else
+ (void)strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) Use which %s? ",
+#endif
+ p, I2A(0), I2A(num), p);
+ }
+ else
+ {
+#ifdef JP
+ (void)strnfmt(out_val, 78, "(%^s %c-%c, '*'¤Ç°ìÍ÷, ESC) ¤É¤Î%s¤ò»È¤¤¤Þ¤¹¤«¡©",
+#else
+ (void)strnfmt(out_val, 78, "(%^ss %c-%c, *=List, ESC=exit) Use which %s? ",
+#endif
+ p, I2A(0), I2A(num), p);
+ }
+
+ /* Get a spell from the user */
+ choice = always_show_list ? ESCAPE : 1;
+ while (!flag)
+ {
+ if(choice == ESCAPE) choice = ' ';
+ else if( !get_com(out_val, &choice, FALSE) )break;
+
+ /* Request redraw */
+ if ((choice == ' ') || (choice == '*') || (choice == '?'))
+ {
+ /* Show the list */
+ if (!redraw)
+ {
+ char psi_desc[80];
+
+ /* Show list */
+ redraw = TRUE;
+
+ /* Save the screen */
+ if (!only_browse) screen_save();
+
+ /* Display a list of spells */
+ prt("", y, x);
+#ifdef JP
+ put_str("̾Á°", y, x + 5);
+ if (only_browse) put_str("Lv ½¸ÃæÅÙ", y, x + 35);
+#else
+ put_str("Name", y, x + 5);
+ if (only_browse) put_str("Lv Pow", y, x + 35);
+#endif
+
+ /* Dump the spells */
+ for (i = 0; i < MAX_SNIPE_POWERS; i++)
+ {
+ Term_erase(x, y + i + 1, 255);
+
+ /* Access the spell */
+ spell = snipe_powers[i];
+ if (spell.min_lev > plev) continue;
+ if (!only_browse && (spell.mana_cost > (int)p_ptr->concent)) continue;
+
+ /* Dump the spell --(-- */
+ if (only_browse)
+ sprintf(psi_desc, " %c) %-30s%2d %4d",
+ I2A(i), spell.name, spell.min_lev, spell.mana_cost);
+ else
+ sprintf(psi_desc, " %c) %-30s", I2A(i), spell.name);
+ prt(psi_desc, y + i + 1, x);
+ }
+
+ /* Clear the bottom line */
+ prt("", y + i + 1, x);
+ }
+
+ /* Hide the list */
+ else
+ {
+ /* Hide list */
+ redraw = FALSE;
+
+ /* Restore the screen */
+ if (!only_browse) screen_load();
+ }
+
+ /* Redo asking */
+ continue;
+ }
+
+ /* Note verify */
+ ask = isupper(choice);
+
+ /* Lowercase */
+ if (ask) choice = tolower(choice);
+
+ /* Extract request */
+ i = (islower(choice) ? A2I(choice) : -1);
+
+ /* Totally Illegal */
+ if ((i < 0) || (i > num) ||
+ (!only_browse &&(snipe_powers[i].mana_cost > (int)p_ptr->concent)))
+ {
+ bell();
+ continue;
+ }
+
+ /* Save the spell index */
+ spell = snipe_powers[i];
+
+ /* Verify it */
+ if (ask)
+ {
+ char tmp_val[160];
+
+ /* Prompt */
+#ifdef JP
+ (void) strnfmt(tmp_val, 78, "%s¤ò»È¤¤¤Þ¤¹¤«¡©", snipe_powers[i].name);
+#else
+ (void)strnfmt(tmp_val, 78, "Use %s? ", snipe_powers[i].name);
+#endif
+
+ /* Belay that order */
+ if (!get_check(tmp_val)) continue;
+ }
+
+ /* Stop the loop */
+ flag = TRUE;
+ }
+
+ /* Restore the screen */
+ if (redraw && !only_browse) screen_load();
+
+ /* Show choices */
+ p_ptr->window |= (PW_SPELL);
+
+ /* Window stuff */
+ window_stuff();
+
+ /* Abort if needed */
+ if (!flag) return (FALSE);
+
+ /* Save the choice */
+ (*sn) = i;
+
+#ifdef ALLOW_REPEAT /* TNB */
+
+ repeat_push(*sn);
+
+#endif /* ALLOW_REPEAT -- TNB */
+
+ /* Success */
+ return (TRUE);
+}
+
+
+int tot_dam_aux_snipe (int mult, monster_type *m_ptr)
+{
+ monster_race *r_ptr = &r_info[m_ptr->r_idx];
+ bool seen = is_seen(m_ptr);
+
+ switch (snipe_type)
+ {
+ case SP_LITE:
+ if (r_ptr->flags3 & (RF3_HURT_LITE))
+ {
+ int n = 20 + p_ptr->concent;
+ if (seen) r_ptr->r_flags3 |= (RF3_HURT_LITE);
+ if (mult < n) mult = n;
+ }
+ break;
+ case SP_FIRE:
+ if (r_ptr->flagsr & RFR_IM_FIRE)
+ {
+ if (seen) r_ptr->r_flagsr |= RFR_IM_FIRE;
+ }
+ else
+ {
+ int n = 15 + (p_ptr->concent * 3);
+ if (mult < n) mult = n;
+ }
+ break;
+ case SP_COLD:
+ if (r_ptr->flagsr & RFR_IM_COLD)
+ {
+ if (seen) r_ptr->r_flagsr |= RFR_IM_COLD;
+ }
+ else
+ {
+ int n = 15 + (p_ptr->concent * 3);
+ if (mult < n) mult = n;
+ }
+ break;
+ case SP_ELEC:
+ if (r_ptr->flagsr & RFR_IM_ELEC)
+ {
+ if (seen) r_ptr->r_flagsr |= RFR_IM_ELEC;
+ }
+ else
+ {
+ int n = 18 + (p_ptr->concent * 4);
+ if (mult < n) mult = n;
+ }
+ break;
+ case SP_KILL_WALL:
+ if (r_ptr->flags3 & RF3_HURT_ROCK)
+ {
+ int n = 15 + (p_ptr->concent * 2);
+ if (seen) r_ptr->r_flags3 |= RF3_HURT_ROCK;
+ if (mult < n) mult = n;
+ }
+ else if (r_ptr->flags3 & RF3_NONLIVING)
+ {
+ int n = 15 + (p_ptr->concent * 2);
+ if (seen) r_ptr->r_flags3 |= RF3_NONLIVING;
+ if (mult < n) mult = n;
+ }
+ break;
+ case SP_EVILNESS:
+ if (r_ptr->flags3 & RF3_GOOD)
+ {
+ int n = 15 + (p_ptr->concent * 4);
+ if (seen) r_ptr->r_flags3 |= RF3_GOOD;
+ if (mult < n) mult = n;
+ }
+ break;
+ case SP_HOLYNESS:
+ if (r_ptr->flags3 & RF3_EVIL)
+ {
+ int n = 12 + (p_ptr->concent * 3);
+ if (seen) r_ptr->r_flags3 |= RF3_EVIL;
+ if (r_ptr->flags3 & (RF3_HURT_LITE))
+ {
+ n += (p_ptr->concent * 3);
+ if (seen) r_ptr->r_flags3 |= (RF3_HURT_LITE);
+ }
+ if (mult < n) mult = n;
+ }
+ break;
+ case SP_FINAL:
+ if (mult < 50) mult = 50;
+ break;
+ }
+
+ return (mult);
+}
+
+/*
+ * do_cmd_cast calls this function if the player's class
+ * is 'mindcrafter'.
+ */
+static bool cast_sniper_spell(int spell)
+{
+ bool flag = FALSE;
+ object_type *o_ptr = &inventory[INVEN_BOW];
+
+ if (o_ptr->tval != TV_BOW)
+ {
+#ifdef JP
+ msg_print("µÝ¤òÁõÈ÷¤·¤Æ¤¤¤Ê¤¤¡ª");
+#else
+ msg_print("You wield no bow!");
+#endif
+ return (FALSE);
+ }
+
+ /* spell code */
+ switch (spell)
+ {
+ case 0: /* Concentration */
+ if (!snipe_concentrate()) return (FALSE);
+ energy_use = 100;
+ return (TRUE);
+ case 1: snipe_type = SP_LITE; break;
+ case 2: snipe_type = SP_AWAY; break;
+ case 3: snipe_type = SP_KILL_TRAP; break;
+ case 4: snipe_type = SP_FIRE; break;
+ case 5: snipe_type = SP_KILL_WALL; break;
+ case 6: snipe_type = SP_COLD; break;
+ case 7: snipe_type = SP_RUSH; break;
+ case 8: snipe_type = SP_PIERCE; break;
+ case 9: snipe_type = SP_EVILNESS; break;
+ case 10: snipe_type = SP_HOLYNESS; break;
+ case 11: snipe_type = SP_EXPLODE; break;
+ case 12: snipe_type = SP_DOUBLE; break;
+ case 13: snipe_type = SP_ELEC; break;
+ case 14: snipe_type = SP_NEEDLE; break;
+ case 15: snipe_type = SP_FINAL; break;
+ default:
+#ifdef JP
+ msg_print("¤Ê¤Ë¡©");
+#else
+ msg_print("Zap?");
+#endif
+ }
+
+ command_cmd = 'f';
+ do_cmd_fire();
+ snipe_type = 0;
+
+ return (is_fired);
+}
+
+
+/*
+ * do_cmd_cast calls this function if the player's class
+ * is 'mindcrafter'.
+ */
+void do_cmd_snipe(void)
+{
+ int n = 0;
+ int plev = p_ptr->lev;
+ int old_chp = p_ptr->chp;
+ snipe_power spell;
+ bool cast;
+
+
+ /* not if confused */
+ if (p_ptr->confused)
+ {
+#ifdef JP
+ msg_print("º®Í𤷤Ƥ¤¤Æ½¸Ãæ¤Ç¤¤Ê¤¤¡ª");
+#else
+ msg_print("You are too confused!");
+#endif
+ return;
+ }
+
+ /* not if hullucinated */
+ if (p_ptr->image)
+ {
+#ifdef JP
+ msg_print("¸¸³Ð¤¬¸«¤¨¤Æ½¸Ãæ¤Ç¤¤Ê¤¤¡ª");
+#else
+ msg_print("You are too hallucinated!");
+#endif
+ return;
+ }
+
+ /* not if stuned */
+ if (p_ptr->stun)
+ {
+#ifdef JP
+ msg_print("Ƭ¤¬Û¯Û°¤È¤·¤Æ¤¤¤Æ½¸Ãæ¤Ç¤¤Ê¤¤¡ª");
+#else
+ msg_print("You are too stuned!");
+#endif
+ return;
+ }
+
+ /* get power */
+ if (!get_snipe_power(&n, FALSE)) return;
+
+ spell = snipe_powers[n];
+
+ sound(SOUND_SHOOT);
+
+ /* Cast the spell */
+ cast = cast_sniper_spell(n);
+
+ if (!cast) return;
+#if 0
+ /* Take a turn */
+ energy_use = 100;
+#endif
+ /* Redraw mana */
+ p_ptr->redraw |= (PR_HP | PR_MANA);
+
+ /* Window stuff */
+ p_ptr->window |= (PW_PLAYER);
+ p_ptr->window |= (PW_SPELL);
+}
+
+/*
+ * do_cmd_cast calls this function if the player's class
+ * is 'mindcrafter'.
+ */
+void do_cmd_snipe_browse(void)
+{
+ int n = 0;
+ int j, line;
+ char temp[62 * 4];
+
+ screen_save();
+
+ while(1)
+ {
+ /* get power */
+ if (!get_snipe_power(&n, TRUE))
+ {
+ screen_load();
+ return;
+ }
+
+ /* Clear lines, position cursor (really should use strlen here) */
+ Term_erase(12, 22, 255);
+ Term_erase(12, 21, 255);
+ Term_erase(12, 20, 255);
+ Term_erase(12, 19, 255);
+ Term_erase(12, 18, 255);
+
+ roff_to_buf(snipe_tips[n], 62, temp, sizeof(temp));
+ for(j = 0, line = 19; temp[j]; j += (1 + strlen(&temp[j])))
+ {
+ prt(&temp[j], line, 15);
+ line++;
+ }
+ }
+}
if (p_ptr->pclass == CLASS_SORCERER) return;
if (p_ptr->pclass == CLASS_RED_MAGE) return;
+ /* Snipers */
+ if (p_ptr->pclass == CLASS_SNIPER)
+ {
+ display_snipe_list();
+ return;
+ }
+
/* mind.c type classes */
if ((p_ptr->pclass == CLASS_MINDCRAFTER) ||
(p_ptr->pclass == CLASS_BERSERKER) ||
do_cmd_kaji(TRUE);
else if (p_ptr->pclass == CLASS_MAGIC_EATER)
do_cmd_magic_eater(TRUE);
+ else if (p_ptr->pclass == CLASS_SNIPER)
+ do_cmd_snipe();
else do_cmd_browse();
break;
}
72, 6, 180, 25,
66, 4, 150, 20,
0,
- 0x7FFFFFF,
+ 0xFFFFFFF,
},
{
#ifdef JP
66, 6, 130, 15,
62, 6, 100, 10,
2,
- 0x677E7FF,
+ 0xE77E7FF,
},
{
#ifdef JP
60, 4, 100, 6,
54, 4, 80, 6,
3,
- 0x677E75B,
+ 0xE77E75B,
},
{
36, 3, 60, 3,
33, 3, 50, 3,
4,
- 0x76FFC0B,
+ 0xF6FFC0B,
},
{
#ifdef JP
42, 3, 90, 6,
39, 3, 75, 3,
4,
- 0x767D60F,
+ 0xF67D60F,
},
{
#ifdef JP
66, 1, 150, 5,
62, 1, 120, 5,
3,
- 0x5D8818D,
+ 0xDD8818D,
},
{
#ifdef JP
82, 5, 190, 20,
78, 6, 180, 15,
0,
- 0x7FFF7FF,
+ 0xFFFF7FF,
},
{
#ifdef JP
90, 10, 190, 20,
82, 10, 180, 15,
4,
- 0x777E75B,
+ 0xF77E75B,
},
{
#ifdef JP
100,10, 255, 65,
80, 10, 240, 64,
3,
- 0x0880011,
+ 0x8880011,
},
{
#ifdef JP
60, 4, 100, 6,
54, 4, 80, 6,
5,
- 0x677C7DF,
+ 0xE77C7DF,
},
{
#ifdef JP
68, 1, 150, 5,
64, 1, 120, 5,
3,
- 0x6B537CB,
+ 0xDB537CB,
},
{
#ifdef JP
82, 5, 190, 20,
78, 6, 180, 15,
0,
- 0x7FFF7FF,
+ 0xFFFF7FF,
},
{
#ifdef JP
80, 8, 90, 20,
73, 8, 80, 15,
4,
- 0x633C7DF,
+ 0xE33C7DF,
},
{
#ifdef JP
48, 6, 150, 25,
44, 4, 130, 20,
0,
- 0x418B7AD,
+ 0xC18B7AD,
},
{
#ifdef JP
15, 10, 10, 0, 0, 0, 25,18,
2, 20, 40
},
+
+ {
+#ifdef JP
+ "¥¹¥Ê¥¤¥Ñ¡¼",
+#endif
+ "Sniper",
+
+ { 2, -1, -1, 2, 1, 0},
+ 25, 24, 28, 5, 32, 18, 35, 72,
+ 12, 10, 10, 0, 0, 0, 12, 28,
+ 2, 20, 40,
+ },
};
player_seikaku seikaku_info[MAX_SEIKAKU] =
(CH_NONE), /* Weaponsmith */
(CH_NONE), /* Mirror-master */
(CH_NONE), /* Ninja */
+ (CH_NONE), /* Sniper */
};
(CH_NONE), /* Weaponsmith */
(CH_NONE), /* Mirror-master */
(CH_NONE), /* Ninja */
+ (CH_NONE), /* Sniper */
};
"°Å»¦¼Ô",
"»à¤ÎŤÏÓ",
},
+
+ /* Sniper */
+ {
+ "¿·»²Ê¼",
+ "ʼ»Î",
+ "ÍÃʼ",
+ "¸Å»²Ê¼",
+ "·õ»Î",
+ "Æ®»Î",
+ "±Ñͺ",
+ "Ã˼ß",
+ "Çì¼ß",
+ "Îμç",
+ },
};
#else
"Assassinator",
"Death Lord",
},
+
+ /* Sniper */
+ {
+ "Rookie",
+ "Soldier",
+ "Mercenary",
+ "Veteran",
+ "Swordsman",
+ "Champion",
+ "Hero",
+ "Baron",
+ "Duke",
+ "Lord",
+ },
};
#endif
s16b mane_dam[MAX_MANE];
s16b mane_num;
+ s16b concent; /* Sniper's concentration level */
+
s16b player_hp[PY_MAX_LEVEL];
char died_from[80]; /* What killed the player */
cptr last_message; /* Last message on death or retirement */
/* for travel */
travel_type travel;
#endif
+
+/* for snipers */
+int snipe_type = SP_NONE;
+bool reset_concent = FALSE; /* Concentration reset flag */
+bool is_fired = FALSE;
if (p_ptr->tim_invis) ADD_FLG(BAR_SENSEUNSEEN);
/* Timed esp */
- if (IS_TIM_ESP()) ADD_FLG(BAR_TELEPATHY);
+ if (IS_TIM_ESP() ||
+ (p_ptr->concent >= CONCENT_TELE_THRESHOLD)) ADD_FLG(BAR_TELEPATHY);
/* Timed regenerate */
if (p_ptr->tim_regen) ADD_FLG(BAR_REGENERATION);
{
p_ptr->num_fire += (p_ptr->lev * 4);
}
+
+ /* Snipers love Cross bows */
+ if ((p_ptr->pclass == CLASS_SNIPER) &&
+ (p_ptr->tval_ammo == TV_BOLT))
+ {
+ p_ptr->to_h_b += (10 + (p_ptr->lev / 5));
+ p_ptr->dis_to_h_b += (10 + (p_ptr->lev / 5));
+ }
}
}
case CLASS_FORCETRAINER:
num = 4; wgt = 60; mul = 2; break;
- /* Mirror Master */
+ /* Mirror Master, Sniper */
case CLASS_MIRROR_MASTER:
+ case CLASS_SNIPER:
num = 3; wgt = 100; mul = 3; break;
/* Ninja */
a_idx = ART_FUNDIN;
chance = 5;
break;
+
+ case MON_ROBIN_HOOD:
+ a_idx = ART_ROBIN_HOOD;
+ chance = 5;
+ break;
}
if ((a_idx > 0) && ((randint0(100) < chance) || p_ptr->wizard))