OSDN Git Service

branch-mogami-TR をマージ。バージョンを1.3.0に上げた。
authormogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sat, 13 Jul 2002 15:35:27 +0000 (15:35 +0000)
committermogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Sat, 13 Jul 2002 15:35:27 +0000 (15:35 +0000)
新しく増えたart_flags[3]をセーブするようにして、
セーブファイルバージョンを1.3.0.0に上げた。

35 files changed:
configure.in
lib/edit/a_info_j.txt
lib/edit/e_info_j.txt
lib/edit/k_info_j.txt
lib/file/news.txt
lib/file/news_j.txt
src/artifact.c
src/bldg.c
src/cmd1.c
src/cmd2.c
src/cmd3.c
src/cmd4.c
src/cmd6.c
src/defines.h
src/externs.h
src/files.c
src/flavor.c
src/hissatsu.c
src/init1.c
src/load.c
src/melee2.c
src/monster2.c
src/mspells1.c
src/mspells2.c
src/object1.c
src/object2.c
src/save.c
src/spells1.c
src/spells2.c
src/spells3.c
src/store.c
src/types.h
src/wizard1.c
src/wizard2.c
src/xtra1.c

index c9ec510..ac68dbc 100644 (file)
@@ -3,7 +3,7 @@ AC_INIT(src/main.c)
 
 AM_CONFIG_HEADER(src/autoconf.h)
 
-AM_INIT_AUTOMAKE(hengband, 1.1.0b)
+AM_INIT_AUTOMAKE(hengband, 1.3.0)
 
 AC_ARG_WITH(setgid,
 [  --with-setgid=NAME      install hengband as group NAME],
index c1a28bd..fef3c41 100644 (file)
@@ -331,7 +331,8 @@ F:AGGRAVATE | DRAIN_EXP | SEE_INVIS | REGEN | TY_CURSE |
 F:IM_FIRE | IM_COLD | IM_ELEC | IM_ACID |
 F:SUST_STR | SUST_DEX | SUST_CON |
 F:SUST_INT | SUST_WIS | SUST_CHR |
-F:INSTA_ART | XTRA_POWER | XTRA_H_RES
+F:INSTA_ART | XTRA_POWER | XTRA_H_RES |
+F:ESP_DEMON | ESP_UNDEAD
 D:$"One Ring to rule them all, One Ring to find them, One Ring to bring 
 D:$them all and in the darkness bind them."  Made of massive gold, and 
 D:$set with runes in the foul speech of Mordor, Isildur's Bane possesses 
@@ -360,12 +361,12 @@ D:
 D:ÉáÄ̤μԤϤ½¤ì¤ò¿È¤ËÉÕ¤±¤ë¤À¤±¤ÇÏĤá¤é¤ì»ÙÇÛ¤µ¤ì¤Æ¤·¤Þ¤¦¡£
 
 
-N:15:¥Ñ¥é¥ó¥Æ¥£¥¢¤Î
-E:of Westernesse
+N:15:¥Ñ¥é¥ó¥Æ¥£¥¢¤ÎÀÐ
+E:Palantir~ of Westernesse
 I:39:8:3
 W:60:50:10:60000
 P:0:1d1:0:0:0
-F:WIS | CHR | ACTIVATE | TELEPATHY | INSTA_ART
+F:WIS | CHR | ACTIVATE | TELEPATHY | INSTA_ART | FULL_NAME
 D:$A shining white ball of unbreakable crystal, the ancient palantiri, 
 D:$or 'far-watchers', were used by kings of Numenor and later by the Exiles 
 D:$for rapid communication between distant lands. 
@@ -516,7 +517,7 @@ W:40:15:250:120000
 P:15:2d4:-2:0:40
 F:STR | CHR | HIDE_TYPE |
 F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | RES_DARK |
-F:RES_DISEN | XTRA_H_RES | ACTIVATE
+F:RES_DISEN | XTRA_H_RES | ACTIVATE | ESP_ANIMAL
 D:¿¿À¤³¦¥¢¥ó¥Ð¡¼¤Î¥¢¡¼¥Ç¥ó¤Î¿¹¤ò¼é¤ë¥¸¥å¥ê¥¢¥ó¤Î¶ä¤Î³»¤À¡£
 
 
@@ -1189,7 +1190,8 @@ I:23:5:3
 W:15:30:30:62500
 P:0:2d5:12:15:0
 F:INT | DEX | HIDE_TYPE | SPEED | XTRA_RES_OR_POWER |
-F:SLAY_TROLL | SLAY_GIANT | FREE_ACT | SEE_INVIS | SHOW_MODS
+F:SLAY_TROLL | SLAY_GIANT | FREE_ACT | SEE_INVIS | SHOW_MODS |
+F:ESP_ORC | ESP_TROLL | ESP_GIANT
 D:$A short thrusting blade with a large guard worn by Maedhros the Tall, 
 D:$eldest son of Feanor, and wielded with his left hand after the loss of 
 D:$his right hand in the pits of Thangorodrim.
@@ -1340,8 +1342,9 @@ I:23:16:1
 W:20:20:150:40000
 P:0:2d5:10:15:0
 F:SEARCH |
-F:SLAY_EVIL | BRAND_FIRE | SLAY_ORC | RES_FIRE | RES_LITE | LITE |
-F:SLOW_DIGEST | SHOW_MODS | RIDING | XTRA_RES_OR_POWER
+F:SLAY_EVIL | BRAND_FIRE | KILL_ORC | RES_FIRE | RES_LITE | LITE |
+F:SLOW_DIGEST | SHOW_MODS | RIDING | XTRA_RES_OR_POWER |
+F:ESP_ORC | ESP_TROLL | ESP_GIANT
 D:$This fiery, shining blade earned its sobriquet "Foe-Hammer" from dying orcs 
 D:$who dared to come near hidden Gondolin.
 D:¤³¤Îdz¤¨¤ë¤è¤¦¤Ëµ±¤¯·õ¤Ï¡Ø¥ª¥ë¥¯¥ê¥¹¥È¡Ù¤ÈÂФòÀ®¤·¡¢
@@ -1402,8 +1405,9 @@ E:'Orcrist'
 I:23:16:3
 W:20:20:150:40000
 P:0:2d5:10:15:0
-F:STEALTH | SLAY_EVIL | BRAND_COLD | SLAY_ORC | RES_COLD | LITE |
-F:SLOW_DIGEST | SHOW_MODS | RIDING | XTRA_RES_OR_POWER
+F:STEALTH | SLAY_EVIL | BRAND_COLD | KILL_ORC | RES_COLD | LITE |
+F:SLOW_DIGEST | SHOW_MODS | RIDING | XTRA_RES_OR_POWER |
+F:ESP_ORC | ESP_TROLL | ESP_GIANT
 D:$This coldly gleaming blade is called simply "Biter", by orcs who came to 
 D:$know its power all too well.
 D:¤³¤ÎÎ䤿¤¯µ±¤¯·õ¤Ï¡Ø¥°¥é¥à¥É¥ê¥ó¥°¡Ù¤ÈÂФòÀ®¤·¡¢¥ª¡¼¥¯¤¿¤Á¤«¤é¤Ï
@@ -1531,7 +1535,8 @@ W:20:120:130:300000
 P:0:4d5:22:25:0
 F:SPEED | REGEN | ACTIVATE | SHOW_MODS | RIDING |
 F:SLAY_EVIL | BRAND_COLD | SLAY_UNDEAD | SLAY_DEMON | SLAY_TROLL |
-F:FREE_ACT | RES_COLD | RES_LITE | LITE | SEE_INVIS | SLOW_DIGEST | 
+F:FREE_ACT | RES_COLD | RES_LITE | LITE | SEE_INVIS | SLOW_DIGEST |
+F:ESP_ORC | ESP_TROLL | ESP_GIANT
 D:$The weapon of Fingolfin, High King of the Noldor; it shines like a column 
 D:$of ice lit by light unquenchable.  Morgoth came but unwillingly to meet it 
 D:$of old; his lame foot will remind him of its might should be meet it again.
@@ -1595,7 +1600,8 @@ I:23:16:-2
 W:50:50:130:66666
 P:0:11d5:-30:7:0
 F:DEX | CHR | STEALTH | HIDE_TYPE | SPEED | AGGRAVATE | VORPAL |
-F:SLAY_HUMAN | SLAY_TROLL | SLAY_ORC | SEE_INVIS | SHOW_MODS
+F:SLAY_HUMAN | SLAY_TROLL | SLAY_ORC | SEE_INVIS | SHOW_MODS |
+F:ESP_ORC | ESP_TROLL | ESP_HUMAN
 D:»ý¤Ã¤¿¼Ô¤ò»¦Ù¤¥Þ¥·¡¼¥ó¤ËÊѤ¨¤ë¼ö¤ï¤ì¤¿·õ¤À¡£¤¢¤Ê¤¿¤Ë¤Ï¤³¤Î·õ¤Î
 D:·ì¤Ëµ²¤¨¤¿¶«¤Ó¤¬Ê¹¤³¤¨¤ë¤À¤í¤¦¡£
 
@@ -1638,7 +1644,8 @@ I:23:8:2
 W:20:15:75:100000
 P:0:1d6:7:8:0
 F:STR | DEX | CON | BLOWS | SLAY_EVIL | SLAY_UNDEAD | SLAY_ORC |
-F:FREE_ACT | RES_LITE | LITE | SEE_INVIS | SHOW_MODS | XTRA_H_RES | QUESTITEM
+F:FREE_ACT | RES_LITE | LITE | SEE_INVIS | SHOW_MODS | XTRA_H_RES | QUESTITEM |
+F:ESP_ORC | ESP_TROLL | ESP_GIANT
 D:$"I will give you a name, and I shall call you Sting."  The perfect size 
 D:$for Bilbo, and stamped forever by the courage he found in Mirkwood, this 
 D:$sturdy little blade grants the wearer combat prowess and survival 
@@ -2483,7 +2490,7 @@ E:of Azaghal
 I:23:5:0
 W:15:30:30:40000
 P:0:2d5:12:14:0
-F:KILL_DRAGON | IM_FIRE | XTRA_RES_OR_POWER
+F:KILL_DRAGON | ESP_DRAGON | IM_FIRE | XTRA_RES_OR_POWER
 D:$At the Nirnaeth the Dwarves stayed the onslaught of Glaurung, and 
 D:$Azaghal their lord drove this short blade into the drake's belly before 
 D:$he was trampled underfoot. The black blood of the Father of Dragons 
@@ -2549,15 +2556,15 @@ P:0:2d6:17:12:0
 F:DEX | BLOWS | SLAY_EVIL | SLAY_UNDEAD | SLAY_ORC | SLAY_DEMON |
 F:FREE_ACT | SEE_INVIS | SHOW_MODS | RES_DARK | RES_DISEN | SPEED
 
-N:141:¥×¥é¥Á¥Ê¥¤¥§¥ó¥À¡¼°õ
-E:'The Platinum Yendorian Express Card'
+N:141:¥×¥é¥Á¥Ê¥¤¥§¥ó¥À¡¼°õ¥¨¥¯¥¹¥×¥ì¥¹¥«¡¼¥É
+E:& Platinum Yendorian Express Card~
 I:50:0:3
 W:127:1:2:1000000
 P:0:1d1:15:15:25
 F:STR | INT | WIS | DEX | CON | CHR | SPEED | STEALTH | HIDE_TYPE |
 F:ACTIVATE | HOLD_LIFE | FREE_ACT | SEE_INVIS | TELEPATHY |
 F:FEATHER | SLOW_DIGEST | REGEN | SEARCH | LITE | WARNING |
-F:INSTA_ART | QUESTITEM
+F:INSTA_ART | QUESTITEM | FULL_NAME
 
 N:142:¡Ø¥¦¥©¡¼¥Ñ¥ë¥Ö¥ì¡¼¥É¡Ù
 E:'Worpal Blade'
@@ -2696,7 +2703,7 @@ F:SUST_STR | FREE_ACT | RES_ACID | RES_DISEN | RES_FIRE | RES_COLD |
 F:RES_CHAOS | SEE_INVIS | TELEPATHY | AGGRAVATE | DRAIN_EXP | SHOW_MODS |
 F:CHAOTIC | CURSED | HEAVY_CURSE | LITE
 
-# The Long Sword Of Falis
+# The Long Sword of Falis
 
 N:155:»ê¹â¿À¥Õ¥¡¥ê¥¹¤Î
 E:of Falis
@@ -2715,7 +2722,7 @@ I:23:25:4
 W:30:90:250:100000
 P:0:4d6:13:21:0
 F:STR | HIDE_TYPE |
-F:VORPAL | SLAY_DRAGON | SLAY_GIANT |
+F:VORPAL | SLAY_DRAGON | KILL_GIANT |
 F:FREE_ACT | LITE | FEATHER | SHOW_MODS
 D:¹äÎÏ̵ÁФΥǥó¥Þ¡¼¥¯¤Î±Ñͺ²¦¥Ù¡¼¥ª¥¦¥ë¥Õ¤¬µð¿Í²¤«¤éÃ¥¤¤¡¢
 D:ºÇ¸å¤ÎÀ襤¤Ç¤Ï¤³¤Î·õ¤Ë¤è¤Ã¤Æε¤òÂ༣¤·¤¿¡£
@@ -2750,7 +2757,8 @@ E:'Gurenki'
 I:23:17:2
 W:60:150:130:100000
 P:0:4d5:-10:25:0
-F:VORPAL | VAMPIRIC | SLAY_EVIL | SLAY_DEMON | AGGRAVATE | LITE | CON 
+F:VORPAL | VAMPIRIC | SLAY_EVIL | KILL_DEMON | ESP_DEMON |
+F:AGGRAVATE | LITE | CON 
 D:Èà½÷¤Ï»Ë¾åºÇ¶¯¤ÎÇËÍÅÅá¤À¡£
 D:¼ë¶â¤Ëµ±¤¯Åá¿È¤ÇËâÀ­¤Î¿´Â¡¤ò¤Ä¤é¤Ì¤­¡¢¤½¤ÎÌ¿¤ò¿©¤Ù¤Ä¤¯¤¹¡£
 
@@ -2796,18 +2804,18 @@ F:WIS | DEX | HIDE_TYPE |
 F:SLAY_DRAGON | SLAY_DEMON | SLAY_ANIMAL | FREE_ACT | HOLD_LIFE |
 F:RES_COLD | RES_NEXUS |
 F:SEE_INVIS | SLOW_DIGEST | REGEN | ACTIVATE | 
-F:BLESSED | SHOW_MODS | RIDING
+F:BLESSED | SHOW_MODS | RIDING | ESP_ANIMAL
 D:Àç̾¤òÀ¶¸»Ì¯Æ»¿¿·¯¡¢¿ÀÀ粤­¤Ã¤Æ¤ÎÉð¿À¤Ç¤¢¤ëÆóϺ¿¿·¯¤Î»°ÀíÅá¤À¡£
 D:Èà¤Ï°­Îµ¤äËâ¿À¡¢¼«Á³¤ÎÍÅËâ¤ò¿¿ôƤȲ¤·¤¿¡£
 
-N:165:¥¬¥é¥¹¤Î
-E:of Glass
+N:165:¥¬¥é¥¹¤Î·¤
+E:Pair~ of Glass Slippers
 I:30:2:-3
 W:40:40:20:40000
 P:0:1d1:0:0:0
 F:DEX | HIDE_TYPE | SUST_CHR | STEALTH | SPEED |
 F:RES_LITE | RES_DARK | RES_NEXUS |
-F:RES_NETHER | RES_CHAOS | LITE
+F:RES_NETHER | RES_CHAOS | LITE | FULL_NAME
 
 N:166:¿å¸Í²«Ìç¤Î
 E:of Mito Koumon
@@ -2823,7 +2831,7 @@ I:23:16:1
 W:20:20:150:35000
 P:0:2d5:18:9:0
 F:CON | SEARCH | BLOWS |
-F:SLAY_EVIL | KILL_DRAGON | 
+F:SLAY_EVIL | KILL_DRAGON | ESP_DRAGON |
 F:SHOW_MODS
 D:¡Ö¡Ä¤½¤Î̾¤âͭ̾¤Ê¥«¥¦¥Ç¥£¥â¥ë¥À¥¯¥¹·õ¡¢¤Ä¤Þ¤êʪ¸ì¤ÎËܤʤÉ
 D:¤Ç¤ª¤Ê¤¸¤ß¤Î¡¢¤¢¤Î¯¤Ë¤¤¤ï¤æ¤ë³úÈøÅá¤Ç¤¢¤ë¤¾¡£¡Ä夬£µ¥Þ¥¤
@@ -3029,13 +3037,14 @@ D:
 # ·õ¤Ç¤¹¡¥¤¿¤Ö¤ó¸µ¤Î¥½¡¼¥¹¤¬ÄÖ¤ê¤ò´Ö°ã¤¨¤Á¤ã¤Ã¤¿¤ó¤À¤è¤Í¡¥
 #
 N:184:¡Ø¥¢¥é¥ó¥ë¡¼¥¹¡Ù
-E:'Arunruth'
+E:'Aranruth'
 I:23:16:4
 W:20:45:150:50000
 P:0:3d5:20:12:0
 F:DEX | HIDE_TYPE | 
 F:SLAY_DEMON | SLAY_ORC | FREE_ACT | RES_COLD | FEATHER | 
-F:SLOW_DIGEST | ACTIVATE | SHOW_MODS
+F:SLOW_DIGEST | ACTIVATE | SHOW_MODS |
+F:ESP_ORC | ESP_TROLL | ESP_GIANT | ESP_DEMON
 D:$The beautiful sword of Thingol, justly named "King's Ire".  It glistens
 D:$ icy enough to freeze the hearts of demons, and you feel supple and
 D:$ lightfooted as you clasp its hilt of gold and silver inlay.
@@ -3061,7 +3070,8 @@ E:of Earendil
 I:34:7:0
 W:50:6:160:90000
 P:10:1d6:0:0:20
-F:LITE | RES_BLIND | RES_DARK | RES_NETHER | RES_ELEC | RES_FIRE | ACTIVATE
+F:LITE | RES_BLIND | RES_DARK | RES_NETHER | RES_ELEC | RES_FIRE |
+F:ACTIVATE | ESP_GOOD
 D:$A shining shield, once borne by the great mariner Earendil, "scored with 
 D:$runes to keep all wounds and harm from him".
 D:¤«¤Ä¤Æ°ÎÂç¤Ê¤ëÁ¥¾è¤ê¥¨¥¢¥ì¥ó¥Ç¥£¥ë¤¬¿È¤ËÉÕ¤±¤Æ¤¤¤¿µ±¤¯½â¤À¡£
@@ -3107,7 +3117,7 @@ I:21:2:4
 W:15:8:30:22500
 P:0:2d6:6:9:0
 F:DEX | CHR | HIDE_TYPE | RIDING |
-F:SLAY_ANIMAL | BRAND_FIRE | ACTIVATE
+F:KILL_ANIMAL | ESP_ANIMAL | BRAND_FIRE | ACTIVATE
 D:Ë¿¹ñ¥µ¡¼¥«¥¹ÃĤǻÈÍѤµ¤ì¤¿Í³½ïÀµ¤·¤¤ÌԽûȤ¤¤Î¾Ú¤À¡£
 D:¤³¤Î¥à¥Á¤Î²»¤Ï¤É¤ó¤ÊÌԽäǤâ¿Ì¤¨¾å¤¬¤é¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
 
@@ -3209,7 +3219,7 @@ I:23:19:4
 W:20:8:100:60000
 P:0:2d9:15:2:0
 F:DEX | STEALTH | SEARCH | RES_FIRE | BRAND_POIS |
-F:ACTIVATE | SEE_INVIS | SHOW_MODS
+F:ACTIVATE | SEE_INVIS | SHOW_MODS | WARNING
 
 N:199:¡Ø¥Ö¥é¥Ã¥Ç¥£¡¦¥à¡¼¥ó¡Ù
 E:'Bloody Moon'
@@ -3438,7 +3448,7 @@ I:23:21:4
 W:30:50:140:120000
 P:0:4d4:12:16:0
 F:STR | CHR | STEALTH | SPEED | 
-F:SLAY_EVIL | SLAY_UNDEAD | SLAY_GIANT | SLAY_ANIMAL | 
+F:SLAY_EVIL | KILL_UNDEAD | SLAY_GIANT | SLAY_ANIMAL | 
 F:RES_NETHER | RES_FEAR | RES_DARK | RES_COLD
 D:¡Ö½â»ý¤Ä²µ½÷¡×¤³¤È¥í¡¼¥Ï¥ó²¦¹ñ¤Î¥¨¥ª¥¦¥£¥óɱ¤¬¡¢
 D:¥Ù¥ì¥ó¥Î¡¼¥ë¤ÎÌî¤Ë¤ª¤¤¤ÆËⲦ¤Ë¿¶¤ë¤Ã¤¿·õ¤À¡£
index bb9320f..6baba5a 100644 (file)
@@ -273,7 +273,7 @@ N:33:
 E:of Telepathy
 X:33:20
 W:0:18:0:15000
-F:TELEPATHY
+#F:TELEPATHY
 
 N:34:µÞ®²óÉü¤Î
 E:of Regeneration
@@ -538,7 +538,7 @@ E:(Blessed)
 X:24:20
 W:0:36:0:5000
 C:0:0:0:3
-F:WIS | 
+F:WIS | ESP_GOOD |
 F:BLESSED | XTRA_POWER
 
 # 67 (unused)
@@ -550,6 +550,7 @@ W:0:36:0:15000
 C:5:5:0:2
 F:STR | DEX | CON | 
 F:SLAY_ORC | SLAY_TROLL | SLAY_GIANT | 
+F:ESP_ORC | ESP_TROLL | ESP_GIANT | 
 F:FREE_ACT | SEE_INVIS
 
 N:69:Äɲù¶·â¤Î
@@ -685,56 +686,56 @@ E:of *Slay* Animal
 X:24:20
 W:0:90:0:6000
 C:0:0:0:2
-F:INT | SLAY_ANIMAL | REGEN
+F:INT | KILL_ANIMAL | REGEN | ESP_ANIMAL
 
 N:89:*ÌǼÙ*¤Î
 E:of *Slay* Evil
 X:24:20
 W:0:90:0:5000
 C:0:0:0:2
-F:WIS | SLAY_EVIL | BLESSED | RES_FEAR
+F:WIS | SLAY_EVIL | BLESSED | RES_FEAR | ESP_EVIL
 
 N:90:*¥¢¥ó¥Ç¥Ã¥É¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Undead
 X:24:24
 W:0:90:0:8000
 C:0:0:0:2
-F:WIS | SLAY_UNDEAD | SEE_INVIS | RES_NETHER
+F:WIS | KILL_UNDEAD | SEE_INVIS | RES_NETHER | ESP_UNDEAD
 
 N:91:*¥Ç¡¼¥â¥ó¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Demon
 X:24:16
 W:0:90:0:4000
 C:0:0:0:2
-F:INT | SLAY_DEMON
+F:INT | KILL_DEMON | ESP_DEMON
 
 N:92:*¥ª¡¼¥¯¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Orc
 X:24:14
 W:0:60:0:4000
 C:0:0:0:2
-F:DEX | SLAY_ORC
+F:DEX | KILL_ORC | ESP_ORC
 
 N:93:*¥È¥í¥ë¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Troll
 X:24:14
 W:0:60:0:4000
 C:0:0:0:2
-F:STR | SLAY_TROLL
+F:STR | KILL_TROLL | ESP_TROLL
 
 N:94:*¥¸¥ã¥¤¥¢¥ó¥È¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Giant
 X:24:16
 W:0:60:0:4000
 C:0:0:0:2
-F:STR | SLAY_GIANT
+F:STR | KILL_GIANT | ESP_GIANT
 
 N:95:*¥É¥é¥´¥ó¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Dragon
 X:24:24
 W:0:90:0:6000
 C:0:0:0:1
-F:CON | SLAY_DRAGON | KILL_DRAGON | XTRA_E_RES | XTRA_D_RES
+F:CON | SLAY_DRAGON | KILL_DRAGON | XTRA_E_RES | XTRA_D_RES | ESP_DRAGON
 
 #JZ#
 N:96:(µÛ·ì)
@@ -791,7 +792,8 @@ E:of Morgul
 X:24:0
 W:0:36:0:0
 C:20:20:10:0
-F:SEE_INVIS | AGGRAVATE | HEAVY_CURSE | CURSED
+F:SEE_INVIS | AGGRAVATE | HEAVY_CURSE | CURSED | 
+F:SLAY_UNDEAD | BRAND_POIS | ESP_UNDEAD
 F:RANDOM_CURSE2
 
 N:103:*¿Í¶ô¤¤*¤Î
@@ -799,7 +801,7 @@ E:of *Slay* Human
 X:24:16
 W:0:60:0:4000
 C:0:0:0:2
-F:DEX | SLAY_HUMAN
+F:DEX | KILL_HUMAN | ESP_HUMAN
 
 
 ### Missile Launchers ###
index e35baa3..416db0d 100644 (file)
@@ -5338,7 +5338,7 @@ W:15:0:100:1000
 F:SHOW_MODS | INSTA_ART
 
 N:589:& ÀÐ
-E:& Palantir~
+E:& Crystal Ball~
 G:*:y
 I:39:8:0
 W:60:0:10:60000
index 577e03f..5c7abea 100644 (file)
@@ -1,6 +1,6 @@
 
                   ****************************************
-                  **          Hengband 1.1.0b           **
+                  **           Hengband 1.3.0           **
                   ****************************************
 
           Based on Moria:    Copyright (c) 1985 Robert Alan Koeneke
index bba0720..83b64d8 100644 (file)
@@ -1,6 +1,6 @@
 
                   ***************************************
-                  **          ÊѶòÈÚÅÜ  1.1.0b         **
+                  **           ÊѶòÈÚÅÜ  1.3.0         **
                   ***************************************
 
           Based on Moria:    Copyright (c) 1985 Robert Alan Koeneke
index c98b6d8..ecd0ebf 100644 (file)
@@ -38,12 +38,12 @@ void one_sustain(object_type *o_ptr)
 {
        switch (randint0(6))
        {
-               case 0: o_ptr->art_flags2 |= (TR2_SUST_STR); break;
-               case 1: o_ptr->art_flags2 |= (TR2_SUST_INT); break;
-               case 2: o_ptr->art_flags2 |= (TR2_SUST_WIS); break;
-               case 3: o_ptr->art_flags2 |= (TR2_SUST_DEX); break;
-               case 4: o_ptr->art_flags2 |= (TR2_SUST_CON); break;
-               case 5: o_ptr->art_flags2 |= (TR2_SUST_CHR); break;
+               case 0: add_flag(o_ptr->art_flags, TR_SUST_STR); break;
+               case 1: add_flag(o_ptr->art_flags, TR_SUST_INT); break;
+               case 2: add_flag(o_ptr->art_flags, TR_SUST_WIS); break;
+               case 3: add_flag(o_ptr->art_flags, TR_SUST_DEX); break;
+               case 4: add_flag(o_ptr->art_flags, TR_SUST_CON); break;
+               case 5: add_flag(o_ptr->art_flags, TR_SUST_CHR); break;
        }
 }
 
@@ -55,18 +55,18 @@ void one_high_resistance(object_type *o_ptr)
 {
        switch (randint0(12))
        {
-               case  0: o_ptr->art_flags2 |= (TR2_RES_POIS);   break;
-               case  1: o_ptr->art_flags2 |= (TR2_RES_LITE);   break;
-               case  2: o_ptr->art_flags2 |= (TR2_RES_DARK);   break;
-               case  3: o_ptr->art_flags2 |= (TR2_RES_SHARDS); break;
-               case  4: o_ptr->art_flags2 |= (TR2_RES_BLIND);  break;
-               case  5: o_ptr->art_flags2 |= (TR2_RES_CONF);   break;
-               case  6: o_ptr->art_flags2 |= (TR2_RES_SOUND);  break;
-               case  7: o_ptr->art_flags2 |= (TR2_RES_NETHER); break;
-               case  8: o_ptr->art_flags2 |= (TR2_RES_NEXUS);  break;
-               case  9: o_ptr->art_flags2 |= (TR2_RES_CHAOS);  break;
-               case 10: o_ptr->art_flags2 |= (TR2_RES_DISEN);  break;
-               case 11: o_ptr->art_flags2 |= (TR2_RES_FEAR);   break;
+               case  0: add_flag(o_ptr->art_flags, TR_RES_POIS);   break;
+               case  1: add_flag(o_ptr->art_flags, TR_RES_LITE);   break;
+               case  2: add_flag(o_ptr->art_flags, TR_RES_DARK);   break;
+               case  3: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
+               case  4: add_flag(o_ptr->art_flags, TR_RES_BLIND);  break;
+               case  5: add_flag(o_ptr->art_flags, TR_RES_CONF);   break;
+               case  6: add_flag(o_ptr->art_flags, TR_RES_SOUND);  break;
+               case  7: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
+               case  8: add_flag(o_ptr->art_flags, TR_RES_NEXUS);  break;
+               case  9: add_flag(o_ptr->art_flags, TR_RES_CHAOS);  break;
+               case 10: add_flag(o_ptr->art_flags, TR_RES_DISEN);  break;
+               case 11: add_flag(o_ptr->art_flags, TR_RES_FEAR);   break;
        }
 }
 
@@ -78,16 +78,16 @@ void one_lordly_high_resistance(object_type *o_ptr)
 {
        switch (randint0(10))
        {
-               case 0: o_ptr->art_flags2 |= (TR2_RES_LITE);   break;
-               case 1: o_ptr->art_flags2 |= (TR2_RES_DARK);   break;
-               case 2: o_ptr->art_flags2 |= (TR2_RES_SHARDS); break;
-               case 3: o_ptr->art_flags2 |= (TR2_RES_BLIND);  break;
-               case 4: o_ptr->art_flags2 |= (TR2_RES_CONF);   break;
-               case 5: o_ptr->art_flags2 |= (TR2_RES_SOUND);  break;
-               case 6: o_ptr->art_flags2 |= (TR2_RES_NETHER); break;
-               case 7: o_ptr->art_flags2 |= (TR2_RES_NEXUS);  break;
-               case 8: o_ptr->art_flags2 |= (TR2_RES_CHAOS);  break;
-               case 9: o_ptr->art_flags2 |= (TR2_RES_FEAR);   break;
+               case 0: add_flag(o_ptr->art_flags, TR_RES_LITE);   break;
+               case 1: add_flag(o_ptr->art_flags, TR_RES_DARK);   break;
+               case 2: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
+               case 3: add_flag(o_ptr->art_flags, TR_RES_BLIND);  break;
+               case 4: add_flag(o_ptr->art_flags, TR_RES_CONF);   break;
+               case 5: add_flag(o_ptr->art_flags, TR_RES_SOUND);  break;
+               case 6: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
+               case 7: add_flag(o_ptr->art_flags, TR_RES_NEXUS);  break;
+               case 8: add_flag(o_ptr->art_flags, TR_RES_CHAOS);  break;
+               case 9: add_flag(o_ptr->art_flags, TR_RES_FEAR);   break;
        }
 }
 
@@ -99,10 +99,10 @@ void one_ele_resistance(object_type *o_ptr)
 {
        switch (randint0(4))
        {
-               case  0: o_ptr->art_flags2 |= (TR2_RES_ACID); break;
-               case  1: o_ptr->art_flags2 |= (TR2_RES_ELEC); break;
-               case  2: o_ptr->art_flags2 |= (TR2_RES_COLD); break;
-               case  3: o_ptr->art_flags2 |= (TR2_RES_FIRE); break;
+               case  0: add_flag(o_ptr->art_flags, TR_RES_ACID); break;
+               case  1: add_flag(o_ptr->art_flags, TR_RES_ELEC); break;
+               case  2: add_flag(o_ptr->art_flags, TR_RES_COLD); break;
+               case  3: add_flag(o_ptr->art_flags, TR_RES_FIRE); break;
        }
 }
 
@@ -114,7 +114,7 @@ void one_dragon_ele_resistance(object_type *o_ptr)
 {
        if (one_in_(7))
        {
-               o_ptr->art_flags2 |= (TR2_RES_POIS);
+               add_flag(o_ptr->art_flags, TR_RES_POIS);
        }
        else
        {
@@ -144,16 +144,31 @@ void one_resistance(object_type *o_ptr)
  */
 void one_ability(object_type *o_ptr)
 {
-       switch (randint0(8))
+       switch (randint0(10))
        {
-               case 0: o_ptr->art_flags3 |= (TR3_FEATHER);     break;
-               case 1: o_ptr->art_flags3 |= (TR3_LITE);        break;
-               case 2: o_ptr->art_flags3 |= (TR3_SEE_INVIS);   break;
-               case 3: o_ptr->art_flags3 |= (TR3_WARNING);     break;
-               case 4: o_ptr->art_flags3 |= (TR3_SLOW_DIGEST); break;
-               case 5: o_ptr->art_flags3 |= (TR3_REGEN);       break;
-               case 6: o_ptr->art_flags2 |= (TR2_FREE_ACT);    break;
-               case 7: o_ptr->art_flags2 |= (TR2_HOLD_LIFE);   break;
+       case 0: add_flag(o_ptr->art_flags, TR_FEATHER);     break;
+       case 1: add_flag(o_ptr->art_flags, TR_LITE);        break;
+       case 2: add_flag(o_ptr->art_flags, TR_SEE_INVIS);   break;
+       case 3: add_flag(o_ptr->art_flags, TR_WARNING);     break;
+       case 4: add_flag(o_ptr->art_flags, TR_SLOW_DIGEST); break;
+       case 5: add_flag(o_ptr->art_flags, TR_REGEN);       break;
+       case 6: add_flag(o_ptr->art_flags, TR_FREE_ACT);    break;
+       case 7: add_flag(o_ptr->art_flags, TR_HOLD_LIFE);   break;
+       case 8:
+       case 9:
+               switch (randint1(9))
+               {
+               case 1: add_flag(o_ptr->art_flags, TR_ESP_ANIMAL);   break;
+               case 2: add_flag(o_ptr->art_flags, TR_ESP_UNDEAD);   break;
+               case 3: add_flag(o_ptr->art_flags, TR_ESP_DEMON);   break;
+               case 4: add_flag(o_ptr->art_flags, TR_ESP_ORC);   break;
+               case 5: add_flag(o_ptr->art_flags, TR_ESP_TROLL);   break;
+               case 6: add_flag(o_ptr->art_flags, TR_ESP_GIANT);   break;
+               case 7: add_flag(o_ptr->art_flags, TR_ESP_DRAGON);   break;
+               case 8: add_flag(o_ptr->art_flags, TR_ESP_HUMAN);   break;
+               case 9: add_flag(o_ptr->art_flags, TR_ESP_GOOD);   break;
+               }
+               break;
        }
 }
 
@@ -166,17 +181,17 @@ static void curse_artifact(object_type * o_ptr)
        if (o_ptr->to_d > 0) o_ptr->to_d = 0 - (o_ptr->to_d + randint1(4));
 
        o_ptr->curse_flags |= (TRC_HEAVY_CURSE | TRC_CURSED);
-       o_ptr->art_flags3 &= ~(TR3_BLESSED);
+       remove_flag(o_ptr->art_flags, TR_BLESSED);
 
        if (one_in_(4)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
-       if (one_in_(3)) o_ptr->art_flags3 |= TR3_TY_CURSE;
-       if (one_in_(2)) o_ptr->art_flags3 |= TR3_AGGRAVATE;
-       if (one_in_(3)) o_ptr->art_flags3 |= TR3_DRAIN_EXP;
-       if (one_in_(2)) o_ptr->art_flags3 |= TR3_TELEPORT;
-       else if (one_in_(3)) o_ptr->art_flags3 |= TR3_NO_TELE;
+       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+       if (one_in_(2)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+       if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+       if (one_in_(2)) add_flag(o_ptr->art_flags, TR_TELEPORT);
+       else if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
 
        if ((p_ptr->pclass != CLASS_WARRIOR) && (p_ptr->pclass != CLASS_ARCHER) && (p_ptr->pclass != CLASS_CAVALRY) && (p_ptr->pclass != CLASS_BERSERKER) && (p_ptr->pclass != CLASS_SMITH) && one_in_(3))
-               o_ptr->art_flags3 |= TR3_NO_MAGIC;
+               add_flag(o_ptr->art_flags, TR_NO_MAGIC);
 }
 
 
@@ -187,123 +202,123 @@ static void random_plus(object_type * o_ptr)
        switch (artifact_bias)
        {
        case BIAS_WARRIOR:
-               if (!(o_ptr->art_flags1 & TR1_STR))
+               if (!(have_flag(o_ptr->art_flags, TR_STR)))
                {
-                       o_ptr->art_flags1 |= TR1_STR;
+                       add_flag(o_ptr->art_flags, TR_STR);
                        if (one_in_(2)) return;
                }
 
-               if (!(o_ptr->art_flags1 & TR1_CON))
+               if (!(have_flag(o_ptr->art_flags, TR_CON)))
                {
-                       o_ptr->art_flags1 |= TR1_CON;
+                       add_flag(o_ptr->art_flags, TR_CON);
                        if (one_in_(2)) return;
                }
 
-               if (!(o_ptr->art_flags1 & TR1_DEX))
+               if (!(have_flag(o_ptr->art_flags, TR_DEX)))
                {
-                       o_ptr->art_flags1 |= TR1_DEX;
+                       add_flag(o_ptr->art_flags, TR_DEX);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_MAGE:
-               if (!(o_ptr->art_flags1 & TR1_INT))
+               if (!(have_flag(o_ptr->art_flags, TR_INT)))
                {
-                       o_ptr->art_flags1 |= TR1_INT;
+                       add_flag(o_ptr->art_flags, TR_INT);
                        if (one_in_(2)) return;
                }
-               if ((o_ptr->tval == TV_GLOVES) && !(o_ptr->art_flags1 & TR1_MAGIC_MASTERY))
+               if ((o_ptr->tval == TV_GLOVES) && !(have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY)))
                {
-                       o_ptr->art_flags1 |= TR1_MAGIC_MASTERY;
+                       add_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_PRIESTLY:
-               if (!(o_ptr->art_flags1 & TR1_WIS))
+               if (!(have_flag(o_ptr->art_flags, TR_WIS)))
                {
-                       o_ptr->art_flags1 |= TR1_WIS;
+                       add_flag(o_ptr->art_flags, TR_WIS);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_RANGER:
-               if (!(o_ptr->art_flags1 & TR1_DEX))
+               if (!(have_flag(o_ptr->art_flags, TR_DEX)))
                {
-                       o_ptr->art_flags1 |= TR1_DEX;
+                       add_flag(o_ptr->art_flags, TR_DEX);
                        if (one_in_(2)) return;
                }
 
-               if (!(o_ptr->art_flags1 & TR1_CON))
+               if (!(have_flag(o_ptr->art_flags, TR_CON)))
                {
-                       o_ptr->art_flags1 |= TR1_CON;
+                       add_flag(o_ptr->art_flags, TR_CON);
                        if (one_in_(2)) return;
                }
 
-               if (!(o_ptr->art_flags1 & TR1_STR))
+               if (!(have_flag(o_ptr->art_flags, TR_STR)))
                {
-                       o_ptr->art_flags1 |= TR1_STR;
+                       add_flag(o_ptr->art_flags, TR_STR);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_ROGUE:
-               if (!(o_ptr->art_flags1 & TR1_STEALTH))
+               if (!(have_flag(o_ptr->art_flags, TR_STEALTH)))
                {
-                       o_ptr->art_flags1 |= TR1_STEALTH;
+                       add_flag(o_ptr->art_flags, TR_STEALTH);
                        if (one_in_(2)) return;
                }
-               if (!(o_ptr->art_flags1 & TR1_SEARCH))
+               if (!(have_flag(o_ptr->art_flags, TR_SEARCH)))
                {
-                       o_ptr->art_flags1 |= TR1_SEARCH;
+                       add_flag(o_ptr->art_flags, TR_SEARCH);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_STR:
-               if (!(o_ptr->art_flags1 & TR1_STR))
+               if (!(have_flag(o_ptr->art_flags, TR_STR)))
                {
-                       o_ptr->art_flags1 |= TR1_STR;
+                       add_flag(o_ptr->art_flags, TR_STR);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_WIS:
-               if (!(o_ptr->art_flags1 & TR1_WIS))
+               if (!(have_flag(o_ptr->art_flags, TR_WIS)))
                {
-                       o_ptr->art_flags1 |= TR1_WIS;
+                       add_flag(o_ptr->art_flags, TR_WIS);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_INT:
-               if (!(o_ptr->art_flags1 & TR1_INT))
+               if (!(have_flag(o_ptr->art_flags, TR_INT)))
                {
-                       o_ptr->art_flags1 |= TR1_INT;
+                       add_flag(o_ptr->art_flags, TR_INT);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_DEX:
-               if (!(o_ptr->art_flags1 & TR1_DEX))
+               if (!(have_flag(o_ptr->art_flags, TR_DEX)))
                {
-                       o_ptr->art_flags1 |= TR1_DEX;
+                       add_flag(o_ptr->art_flags, TR_DEX);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_CON:
-               if (!(o_ptr->art_flags1 & TR1_CON))
+               if (!(have_flag(o_ptr->art_flags, TR_CON)))
                {
-                       o_ptr->art_flags1 |= TR1_CON;
+                       add_flag(o_ptr->art_flags, TR_CON);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_CHR:
-               if (!(o_ptr->art_flags1 & TR1_CHR))
+               if (!(have_flag(o_ptr->art_flags, TR_CHR)))
                {
-                       o_ptr->art_flags1 |= TR1_CHR;
+                       add_flag(o_ptr->art_flags, TR_CHR);
                        if (one_in_(2)) return;
                }
                break;
@@ -311,9 +326,9 @@ static void random_plus(object_type * o_ptr)
 
        if ((artifact_bias == BIAS_MAGE || artifact_bias == BIAS_PRIESTLY) && (o_ptr->tval == TV_SOFT_ARMOR) && (o_ptr->sval == SV_ROBE))
        {
-               if (!(o_ptr->art_flags3 & TR3_DEC_MANA) && one_in_(3))
+               if (!(have_flag(o_ptr->art_flags, TR_DEC_MANA)) && one_in_(3))
                {
-                       o_ptr->art_flags3 |= TR3_DEC_MANA;
+                       add_flag(o_ptr->art_flags, TR_DEC_MANA);
                        if (one_in_(2)) return;
                }
        }
@@ -321,71 +336,71 @@ static void random_plus(object_type * o_ptr)
        switch (randint1(this_type))
        {
        case 1: case 2:
-               o_ptr->art_flags1 |= TR1_STR;
+               add_flag(o_ptr->art_flags, TR_STR);
                if (!artifact_bias && !one_in_(13))
                        artifact_bias = BIAS_STR;
                else if (!artifact_bias && one_in_(7))
                        artifact_bias = BIAS_WARRIOR;
                break;
        case 3: case 4:
-               o_ptr->art_flags1 |= TR1_INT;
+               add_flag(o_ptr->art_flags, TR_INT);
                if (!artifact_bias && !one_in_(13))
                        artifact_bias = BIAS_INT;
                else if (!artifact_bias && one_in_(7))
                        artifact_bias = BIAS_MAGE;
                break;
        case 5: case 6:
-               o_ptr->art_flags1 |= TR1_WIS;
+               add_flag(o_ptr->art_flags, TR_WIS);
                if (!artifact_bias && !one_in_(13))
                        artifact_bias = BIAS_WIS;
                else if (!artifact_bias && one_in_(7))
                        artifact_bias = BIAS_PRIESTLY;
                break;
        case 7: case 8:
-               o_ptr->art_flags1 |= TR1_DEX;
+               add_flag(o_ptr->art_flags, TR_DEX);
                if (!artifact_bias && !one_in_(13))
                        artifact_bias = BIAS_DEX;
                else if (!artifact_bias && one_in_(7))
                        artifact_bias = BIAS_ROGUE;
                break;
        case 9: case 10:
-               o_ptr->art_flags1 |= TR1_CON;
+               add_flag(o_ptr->art_flags, TR_CON);
                if (!artifact_bias && !one_in_(13))
                        artifact_bias = BIAS_CON;
                else if (!artifact_bias && one_in_(9))
                        artifact_bias = BIAS_RANGER;
                break;
        case 11: case 12:
-               o_ptr->art_flags1 |= TR1_CHR;
+               add_flag(o_ptr->art_flags, TR_CHR);
                if (!artifact_bias && !one_in_(13))
                        artifact_bias = BIAS_CHR;
                break;
        case 13: case 14:
-               o_ptr->art_flags1 |= TR1_STEALTH;
+               add_flag(o_ptr->art_flags, TR_STEALTH);
                if (!artifact_bias && one_in_(3))
                        artifact_bias = BIAS_ROGUE;
                break;
        case 15: case 16:
-               o_ptr->art_flags1 |= TR1_SEARCH;
+               add_flag(o_ptr->art_flags, TR_SEARCH);
                if (!artifact_bias && one_in_(9))
                        artifact_bias = BIAS_RANGER;
                break;
        case 17: case 18:
-               o_ptr->art_flags1 |= TR1_INFRA;
+               add_flag(o_ptr->art_flags, TR_INFRA);
                break;
        case 19:
-               o_ptr->art_flags1 |= TR1_SPEED;
+               add_flag(o_ptr->art_flags, TR_SPEED);
                if (!artifact_bias && one_in_(11))
                        artifact_bias = BIAS_ROGUE;
                break;
        case 20: case 21:
-               o_ptr->art_flags1 |= TR1_TUNNEL;
+               add_flag(o_ptr->art_flags, TR_TUNNEL);
                break;
        case 22: case 23:
                if (o_ptr->tval == TV_BOW) random_plus(o_ptr);
                else
                {
-                       o_ptr->art_flags1 |= TR1_BLOWS;
+                       add_flag(o_ptr->art_flags, TR_BLOWS);
                        if (!artifact_bias && one_in_(11))
                                artifact_bias = BIAS_WARRIOR;
                }
@@ -399,135 +414,156 @@ static void random_resistance(object_type * o_ptr)
        switch (artifact_bias)
        {
        case BIAS_ACID:
-               if (!(o_ptr->art_flags2 & TR2_RES_ACID))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_ACID)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_ACID;
+                       add_flag(o_ptr->art_flags, TR_RES_ACID);
                        if (one_in_(2)) return;
                }
-               if (one_in_(BIAS_LUCK) && !(o_ptr->art_flags2 & TR2_IM_ACID))
+               if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ACID)))
                {
-                       o_ptr->art_flags2 |= TR2_IM_ACID;
-                       if (!one_in_(IM_LUCK)) o_ptr->art_flags2 &= ~(TR2_IM_ELEC | TR2_IM_COLD | TR2_IM_FIRE);
+                       add_flag(o_ptr->art_flags, TR_IM_ACID);
+                       if (!one_in_(IM_LUCK))
+                       {
+                               remove_flag(o_ptr->art_flags, TR_IM_ELEC);
+                               remove_flag(o_ptr->art_flags, TR_IM_COLD);
+                               remove_flag(o_ptr->art_flags, TR_IM_FIRE);
+                       }
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_ELEC:
-               if (!(o_ptr->art_flags2 & TR2_RES_ELEC))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_ELEC)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_ELEC;
+                       add_flag(o_ptr->art_flags, TR_RES_ELEC);
                        if (one_in_(2)) return;
                }
                if ((o_ptr->tval >= TV_CLOAK) && (o_ptr->tval <= TV_HARD_ARMOR) &&
-                   !(o_ptr->art_flags3 & TR3_SH_ELEC))
+                   !(have_flag(o_ptr->art_flags, TR_SH_ELEC)))
                {
-                       o_ptr->art_flags3 |= TR3_SH_ELEC;
+                       add_flag(o_ptr->art_flags, TR_SH_ELEC);
                        if (one_in_(2)) return;
                }
-               if (one_in_(BIAS_LUCK) && !(o_ptr->art_flags2 & TR2_IM_ELEC))
+               if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_ELEC)))
                {
-                       o_ptr->art_flags2 |= TR2_IM_ELEC;
-                       if (!one_in_(IM_LUCK)) o_ptr->art_flags2 &= ~(TR2_IM_ACID | TR2_IM_COLD | TR2_IM_FIRE);
+                       add_flag(o_ptr->art_flags, TR_IM_ELEC);
+                       if (!one_in_(IM_LUCK))
+                       {
+                               remove_flag(o_ptr->art_flags, TR_IM_ACID);
+                               remove_flag(o_ptr->art_flags, TR_IM_COLD);
+                               remove_flag(o_ptr->art_flags, TR_IM_FIRE);
+                       }
+
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_FIRE:
-               if (!(o_ptr->art_flags2 & TR2_RES_FIRE))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_FIRE)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_FIRE;
+                       add_flag(o_ptr->art_flags, TR_RES_FIRE);
                        if (one_in_(2)) return;
                }
                if ((o_ptr->tval >= TV_CLOAK) &&
                    (o_ptr->tval <= TV_HARD_ARMOR) &&
-                   !(o_ptr->art_flags3 & TR3_SH_FIRE))
+                   !(have_flag(o_ptr->art_flags, TR_SH_FIRE)))
                {
-                       o_ptr->art_flags3 |= TR3_SH_FIRE;
+                       add_flag(o_ptr->art_flags, TR_SH_FIRE);
                        if (one_in_(2)) return;
                }
                if (one_in_(BIAS_LUCK) &&
-                   !(o_ptr->art_flags2 & TR2_IM_FIRE))
+                   !(have_flag(o_ptr->art_flags, TR_IM_FIRE)))
                {
-                       o_ptr->art_flags2 |= TR2_IM_FIRE;
-                       if (!one_in_(IM_LUCK)) o_ptr->art_flags2 &= ~(TR2_IM_ELEC | TR2_IM_COLD | TR2_IM_ACID);
+                       add_flag(o_ptr->art_flags, TR_IM_FIRE);
+                       if (!one_in_(IM_LUCK))
+                       {
+                               remove_flag(o_ptr->art_flags, TR_IM_ELEC);
+                               remove_flag(o_ptr->art_flags, TR_IM_COLD);
+                               remove_flag(o_ptr->art_flags, TR_IM_ACID);
+                       }
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_COLD:
-               if (!(o_ptr->art_flags2 & TR2_RES_COLD))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_COLD)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_COLD;
+                       add_flag(o_ptr->art_flags, TR_RES_COLD);
                        if (one_in_(2)) return;
                }
                if ((o_ptr->tval >= TV_CLOAK) &&
                    (o_ptr->tval <= TV_HARD_ARMOR) &&
-                   !(o_ptr->art_flags3 & TR3_SH_COLD))
+                   !(have_flag(o_ptr->art_flags, TR_SH_COLD)))
                {
-                       o_ptr->art_flags3 |= TR3_SH_COLD;
+                       add_flag(o_ptr->art_flags, TR_SH_COLD);
                        if (one_in_(2)) return;
                }
-               if (one_in_(BIAS_LUCK) && !(o_ptr->art_flags2 & TR2_IM_COLD))
+               if (one_in_(BIAS_LUCK) && !(have_flag(o_ptr->art_flags, TR_IM_COLD)))
                {
-                       o_ptr->art_flags2 |= TR2_IM_COLD;
-                       if (!one_in_(IM_LUCK)) o_ptr->art_flags2 &= ~(TR2_IM_ELEC | TR2_IM_ACID | TR2_IM_FIRE);
+                       add_flag(o_ptr->art_flags, TR_IM_COLD);
+                       if (!one_in_(IM_LUCK))
+                       {
+                               remove_flag(o_ptr->art_flags, TR_IM_ELEC);
+                               remove_flag(o_ptr->art_flags, TR_IM_ACID);
+                               remove_flag(o_ptr->art_flags, TR_IM_FIRE);
+                       }
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_POIS:
-               if (!(o_ptr->art_flags2 & TR2_RES_POIS))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_POIS;
+                       add_flag(o_ptr->art_flags, TR_RES_POIS);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_WARRIOR:
-               if (!one_in_(3) && (!(o_ptr->art_flags2 & TR2_RES_FEAR)))
+               if (!one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_RES_FEAR))))
                {
-                       o_ptr->art_flags2 |= TR2_RES_FEAR;
+                       add_flag(o_ptr->art_flags, TR_RES_FEAR);
                        if (one_in_(2)) return;
                }
-               if (one_in_(3) && (!(o_ptr->art_flags3 & TR3_NO_MAGIC)))
+               if (one_in_(3) && (!(have_flag(o_ptr->art_flags, TR_NO_MAGIC))))
                {
-                       o_ptr->art_flags3 |= TR3_NO_MAGIC;
+                       add_flag(o_ptr->art_flags, TR_NO_MAGIC);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_NECROMANTIC:
-               if (!(o_ptr->art_flags2 & TR2_RES_NETHER))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_NETHER)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_NETHER;
+                       add_flag(o_ptr->art_flags, TR_RES_NETHER);
                        if (one_in_(2)) return;
                }
-               if (!(o_ptr->art_flags2 & TR2_RES_POIS))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_POIS)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_POIS;
+                       add_flag(o_ptr->art_flags, TR_RES_POIS);
                        if (one_in_(2)) return;
                }
-               if (!(o_ptr->art_flags2 & TR2_RES_DARK))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_DARK)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_DARK;
+                       add_flag(o_ptr->art_flags, TR_RES_DARK);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_CHAOS:
-               if (!(o_ptr->art_flags2 & TR2_RES_CHAOS))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_CHAOS)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_CHAOS;
+                       add_flag(o_ptr->art_flags, TR_RES_CHAOS);
                        if (one_in_(2)) return;
                }
-               if (!(o_ptr->art_flags2 & TR2_RES_CONF))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_CONF)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_CONF;
+                       add_flag(o_ptr->art_flags, TR_RES_CONF);
                        if (one_in_(2)) return;
                }
-               if (!(o_ptr->art_flags2 & TR2_RES_DISEN))
+               if (!(have_flag(o_ptr->art_flags, TR_RES_DISEN)))
                {
-                       o_ptr->art_flags2 |= TR2_RES_DISEN;
+                       add_flag(o_ptr->art_flags, TR_RES_DISEN);
                        if (one_in_(2)) return;
                }
                break;
@@ -540,7 +576,7 @@ static void random_resistance(object_type * o_ptr)
                                random_resistance(o_ptr);
                        else
                        {
-                               o_ptr->art_flags2 |= TR2_IM_ACID;
+                               add_flag(o_ptr->art_flags, TR_IM_ACID);
                                if (!artifact_bias)
                                        artifact_bias = BIAS_ACID;
                        }
@@ -550,7 +586,7 @@ static void random_resistance(object_type * o_ptr)
                                random_resistance(o_ptr);
                        else
                        {
-                               o_ptr->art_flags2 |= TR2_IM_ELEC;
+                               add_flag(o_ptr->art_flags, TR_IM_ELEC);
                                if (!artifact_bias)
                                        artifact_bias = BIAS_ELEC;
                        }
@@ -560,7 +596,7 @@ static void random_resistance(object_type * o_ptr)
                                random_resistance(o_ptr);
                        else
                        {
-                               o_ptr->art_flags2 |= TR2_IM_COLD;
+                               add_flag(o_ptr->art_flags, TR_IM_COLD);
                                if (!artifact_bias)
                                        artifact_bias = BIAS_COLD;
                        }
@@ -570,7 +606,7 @@ static void random_resistance(object_type * o_ptr)
                                random_resistance(o_ptr);
                        else
                        {
-                               o_ptr->art_flags2 |= TR2_IM_FIRE;
+                               add_flag(o_ptr->art_flags, TR_IM_FIRE);
                                if (!artifact_bias)
                                        artifact_bias = BIAS_FIRE;
                        }
@@ -578,34 +614,34 @@ static void random_resistance(object_type * o_ptr)
                case 5:
                case 6:
                case 13:
-                       o_ptr->art_flags2 |= TR2_RES_ACID;
+                       add_flag(o_ptr->art_flags, TR_RES_ACID);
                        if (!artifact_bias)
                                artifact_bias = BIAS_ACID;
                        break;
                case 7:
                case 8:
                case 14:
-                       o_ptr->art_flags2 |= TR2_RES_ELEC;
+                       add_flag(o_ptr->art_flags, TR_RES_ELEC);
                        if (!artifact_bias)
                                artifact_bias = BIAS_ELEC;
                        break;
                case 9:
                case 10:
                case 15:
-                       o_ptr->art_flags2 |= TR2_RES_FIRE;
+                       add_flag(o_ptr->art_flags, TR_RES_FIRE);
                        if (!artifact_bias)
                                artifact_bias = BIAS_FIRE;
                        break;
                case 11:
                case 12:
                case 16:
-                       o_ptr->art_flags2 |= TR2_RES_COLD;
+                       add_flag(o_ptr->art_flags, TR_RES_COLD);
                        if (!artifact_bias)
                                artifact_bias = BIAS_COLD;
                        break;
                case 17:
                case 18:
-                       o_ptr->art_flags2 |= TR2_RES_POIS;
+                       add_flag(o_ptr->art_flags, TR_RES_POIS);
                        if (!artifact_bias && !one_in_(4))
                                artifact_bias = BIAS_POIS;
                        else if (!artifact_bias && one_in_(2))
@@ -615,57 +651,57 @@ static void random_resistance(object_type * o_ptr)
                        break;
                case 19:
                case 20:
-                       o_ptr->art_flags2 |= TR2_RES_FEAR;
+                       add_flag(o_ptr->art_flags, TR_RES_FEAR);
                        if (!artifact_bias && one_in_(3))
                                artifact_bias = BIAS_WARRIOR;
                        break;
                case 21:
-                       o_ptr->art_flags2 |= TR2_RES_LITE;
+                       add_flag(o_ptr->art_flags, TR_RES_LITE);
                        break;
                case 22:
-                       o_ptr->art_flags2 |= TR2_RES_DARK;
+                       add_flag(o_ptr->art_flags, TR_RES_DARK);
                        break;
                case 23:
                case 24:
-                       o_ptr->art_flags2 |= TR2_RES_BLIND;
+                       add_flag(o_ptr->art_flags, TR_RES_BLIND);
                        break;
                case 25:
                case 26:
-                       o_ptr->art_flags2 |= TR2_RES_CONF;
+                       add_flag(o_ptr->art_flags, TR_RES_CONF);
                        if (!artifact_bias && one_in_(6))
                                artifact_bias = BIAS_CHAOS;
                        break;
                case 27:
                case 28:
-                       o_ptr->art_flags2 |= TR2_RES_SOUND;
+                       add_flag(o_ptr->art_flags, TR_RES_SOUND);
                        break;
                case 29:
                case 30:
-                       o_ptr->art_flags2 |= TR2_RES_SHARDS;
+                       add_flag(o_ptr->art_flags, TR_RES_SHARDS);
                        break;
                case 31:
                case 32:
-                       o_ptr->art_flags2 |= TR2_RES_NETHER;
+                       add_flag(o_ptr->art_flags, TR_RES_NETHER);
                        if (!artifact_bias && one_in_(3))
                                artifact_bias = BIAS_NECROMANTIC;
                        break;
                case 33:
                case 34:
-                       o_ptr->art_flags2 |= TR2_RES_NEXUS;
+                       add_flag(o_ptr->art_flags, TR_RES_NEXUS);
                        break;
                case 35:
                case 36:
-                       o_ptr->art_flags2 |= TR2_RES_CHAOS;
+                       add_flag(o_ptr->art_flags, TR_RES_CHAOS);
                        if (!artifact_bias && one_in_(2))
                                artifact_bias = BIAS_CHAOS;
                        break;
                case 37:
                case 38:
-                       o_ptr->art_flags2 |= TR2_RES_DISEN;
+                       add_flag(o_ptr->art_flags, TR_RES_DISEN);
                        break;
                case 39:
                        if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
-                               o_ptr->art_flags3 |= TR3_SH_ELEC;
+                               add_flag(o_ptr->art_flags, TR_SH_ELEC);
                        else
                                random_resistance(o_ptr);
                        if (!artifact_bias)
@@ -673,7 +709,7 @@ static void random_resistance(object_type * o_ptr)
                        break;
                case 40:
                        if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
-                               o_ptr->art_flags3 |= TR3_SH_FIRE;
+                               add_flag(o_ptr->art_flags, TR_SH_FIRE);
                        else
                                random_resistance(o_ptr);
                        if (!artifact_bias)
@@ -682,13 +718,13 @@ static void random_resistance(object_type * o_ptr)
                case 41:
                        if (o_ptr->tval == TV_SHIELD || o_ptr->tval == TV_CLOAK ||
                            o_ptr->tval == TV_HELM || o_ptr->tval == TV_HARD_ARMOR)
-                               o_ptr->art_flags2 |= TR2_REFLECT;
+                               add_flag(o_ptr->art_flags, TR_REFLECT);
                        else
                                random_resistance(o_ptr);
                        break;
                case 42:
                        if (o_ptr->tval >= TV_CLOAK && o_ptr->tval <= TV_HARD_ARMOR)
-                               o_ptr->art_flags3 |= TR3_SH_COLD;
+                               add_flag(o_ptr->art_flags, TR_SH_COLD);
                        else
                                random_resistance(o_ptr);
                        if (!artifact_bias)
@@ -704,116 +740,116 @@ static void random_misc(object_type * o_ptr)
        switch (artifact_bias)
        {
        case BIAS_RANGER:
-               if (!(o_ptr->art_flags2 & TR2_SUST_CON))
+               if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
                {
-                       o_ptr->art_flags2 |= TR2_SUST_CON;
+                       add_flag(o_ptr->art_flags, TR_SUST_CON);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_STR:
-               if (!(o_ptr->art_flags2 & TR2_SUST_STR))
+               if (!(have_flag(o_ptr->art_flags, TR_SUST_STR)))
                {
-                       o_ptr->art_flags2 |= TR2_SUST_STR;
+                       add_flag(o_ptr->art_flags, TR_SUST_STR);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_WIS:
-               if (!(o_ptr->art_flags2 & TR2_SUST_WIS))
+               if (!(have_flag(o_ptr->art_flags, TR_SUST_WIS)))
                {
-                       o_ptr->art_flags2 |= TR2_SUST_WIS;
+                       add_flag(o_ptr->art_flags, TR_SUST_WIS);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_INT:
-               if (!(o_ptr->art_flags2 & TR2_SUST_INT))
+               if (!(have_flag(o_ptr->art_flags, TR_SUST_INT)))
                {
-                       o_ptr->art_flags2 |= TR2_SUST_INT;
+                       add_flag(o_ptr->art_flags, TR_SUST_INT);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_DEX:
-               if (!(o_ptr->art_flags2 & TR2_SUST_DEX))
+               if (!(have_flag(o_ptr->art_flags, TR_SUST_DEX)))
                {
-                       o_ptr->art_flags2 |= TR2_SUST_DEX;
+                       add_flag(o_ptr->art_flags, TR_SUST_DEX);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_CON:
-               if (!(o_ptr->art_flags2 & TR2_SUST_CON))
+               if (!(have_flag(o_ptr->art_flags, TR_SUST_CON)))
                {
-                       o_ptr->art_flags2 |= TR2_SUST_CON;
+                       add_flag(o_ptr->art_flags, TR_SUST_CON);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_CHR:
-               if (!(o_ptr->art_flags2 & TR2_SUST_CHR))
+               if (!(have_flag(o_ptr->art_flags, TR_SUST_CHR)))
                {
-                       o_ptr->art_flags2 |= TR2_SUST_CHR;
+                       add_flag(o_ptr->art_flags, TR_SUST_CHR);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_CHAOS:
-               if (!(o_ptr->art_flags3 & TR3_TELEPORT))
+               if (!(have_flag(o_ptr->art_flags, TR_TELEPORT)))
                {
-                       o_ptr->art_flags3 |= TR3_TELEPORT;
+                       add_flag(o_ptr->art_flags, TR_TELEPORT);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_FIRE:
-               if (!(o_ptr->art_flags3 & TR3_LITE))
+               if (!(have_flag(o_ptr->art_flags, TR_LITE)))
                {
-                       o_ptr->art_flags3 |= TR3_LITE; /* Freebie */
+                       add_flag(o_ptr->art_flags, TR_LITE); /* Freebie */
                }
                break;
        }
 
-       switch (randint1(32))
+       switch (randint1(33))
        {
                case 1:
-                       o_ptr->art_flags2 |= TR2_SUST_STR;
+                       add_flag(o_ptr->art_flags, TR_SUST_STR);
                        if (!artifact_bias)
                                artifact_bias = BIAS_STR;
                        break;
                case 2:
-                       o_ptr->art_flags2 |= TR2_SUST_INT;
+                       add_flag(o_ptr->art_flags, TR_SUST_INT);
                        if (!artifact_bias)
                                artifact_bias = BIAS_INT;
                        break;
                case 3:
-                       o_ptr->art_flags2 |= TR2_SUST_WIS;
+                       add_flag(o_ptr->art_flags, TR_SUST_WIS);
                        if (!artifact_bias)
                                artifact_bias = BIAS_WIS;
                        break;
                case 4:
-                       o_ptr->art_flags2 |= TR2_SUST_DEX;
+                       add_flag(o_ptr->art_flags, TR_SUST_DEX);
                        if (!artifact_bias)
                                artifact_bias = BIAS_DEX;
                        break;
                case 5:
-                       o_ptr->art_flags2 |= TR2_SUST_CON;
+                       add_flag(o_ptr->art_flags, TR_SUST_CON);
                        if (!artifact_bias)
                                artifact_bias = BIAS_CON;
                        break;
                case 6:
-                       o_ptr->art_flags2 |= TR2_SUST_CHR;
+                       add_flag(o_ptr->art_flags, TR_SUST_CHR);
                        if (!artifact_bias)
                                artifact_bias = BIAS_CHR;
                        break;
                case 7:
                case 8:
                case 14:
-                       o_ptr->art_flags2 |= TR2_FREE_ACT;
+                       add_flag(o_ptr->art_flags, TR_FREE_ACT);
                        break;
                case 9:
-                       o_ptr->art_flags2 |= TR2_HOLD_LIFE;
+                       add_flag(o_ptr->art_flags, TR_HOLD_LIFE);
                        if (!artifact_bias && one_in_(5))
                                artifact_bias = BIAS_PRIESTLY;
                        else if (!artifact_bias && one_in_(6))
@@ -821,33 +857,27 @@ static void random_misc(object_type * o_ptr)
                        break;
                case 10:
                case 11:
-                       o_ptr->art_flags3 |= TR3_LITE;
+                       add_flag(o_ptr->art_flags, TR_LITE);
                        break;
                case 12:
                case 13:
-                       o_ptr->art_flags3 |= TR3_FEATHER;
+                       add_flag(o_ptr->art_flags, TR_FEATHER);
                        break;
                case 15:
                case 16:
                case 17:
-                       o_ptr->art_flags3 |= TR3_SEE_INVIS;
-                       break;
-               case 18:
-                       if (one_in_(3)) break;
-                       o_ptr->art_flags3 |= TR3_TELEPATHY;
-                       if (!artifact_bias && one_in_(9))
-                               artifact_bias = BIAS_MAGE;
+                       add_flag(o_ptr->art_flags, TR_SEE_INVIS);
                        break;
                case 19:
                case 20:
-                       o_ptr->art_flags3 |= TR3_SLOW_DIGEST;
+                       add_flag(o_ptr->art_flags, TR_SLOW_DIGEST);
                        break;
                case 21:
                case 22:
-                       o_ptr->art_flags3 |= TR3_REGEN;
+                       add_flag(o_ptr->art_flags, TR_REGEN);
                        break;
                case 23:
-                       o_ptr->art_flags3 |= TR3_TELEPORT;
+                       add_flag(o_ptr->art_flags, TR_TELEPORT);
                        break;
                case 24:
                case 25:
@@ -864,7 +894,7 @@ static void random_misc(object_type * o_ptr)
                case 29:
                {
                        int bonus_h, bonus_d;
-                       o_ptr->art_flags3 |= TR3_SHOW_MODS;
+                       add_flag(o_ptr->art_flags, TR_SHOW_MODS);
                        bonus_h = 4 + (randint1(11));
                        bonus_d = 4 + (randint1(11));
                        if ((o_ptr->tval != TV_SWORD) && (o_ptr->tval != TV_POLEARM) && (o_ptr->tval != TV_HAFTED) && (o_ptr->tval != TV_DIGGING) && (o_ptr->tval != TV_GLOVES) && (o_ptr->tval != TV_RING))
@@ -877,14 +907,89 @@ static void random_misc(object_type * o_ptr)
                        break;
                }
                case 30:
-                       o_ptr->art_flags3 |= TR3_NO_MAGIC;
+                       add_flag(o_ptr->art_flags, TR_NO_MAGIC);
                        break;
                case 31:
-                       o_ptr->art_flags3 |= TR3_NO_TELE;
+                       add_flag(o_ptr->art_flags, TR_NO_TELE);
                        break;
                case 32:
-                       o_ptr->art_flags3 |= TR3_WARNING;
+                       add_flag(o_ptr->art_flags, TR_WARNING);
+                       break;
+
+               case 18:
+                       switch (randint1(3))
+                       {
+                       case 1:
+                               add_flag(o_ptr->art_flags, TR_ESP_EVIL);
+                               if (!artifact_bias && one_in_(3))
+                                       artifact_bias = BIAS_LAW;
+                               break;
+                       case 2:
+                               add_flag(o_ptr->art_flags, TR_ESP_NONLIVING);
+                               if (!artifact_bias && one_in_(3))
+                                       artifact_bias = BIAS_MAGE;
+                               break;
+                       case 3:
+                               add_flag(o_ptr->art_flags, TR_TELEPATHY);
+                               if (!artifact_bias && one_in_(9))
+                                       artifact_bias = BIAS_MAGE;
+                               break;
+                       }
                        break;
+
+               case 33:
+               {
+                       int idx[3];
+                       int n = randint1(3);
+
+                       idx[0] = randint1(8);
+
+                       idx[1] = randint1(7);
+                       if (idx[1] >= idx[0]) idx[1]++;
+
+                       idx[2] = randint1(6);
+                       if (idx[2] >= idx[0]) idx[2]++;
+                       if (idx[2] >= idx[1]) idx[2]++;
+
+                       while (n--) switch (idx[n])
+                       {
+                       case 1:
+                               add_flag(o_ptr->art_flags, TR_ESP_ANIMAL);
+                               if (!artifact_bias && one_in_(4))
+                                       artifact_bias = BIAS_RANGER;
+                               break;
+                       case 2:
+                               add_flag(o_ptr->art_flags, TR_ESP_UNDEAD);
+                               if (!artifact_bias && one_in_(3))
+                                       artifact_bias = BIAS_PRIESTLY;
+                               else if (!artifact_bias && one_in_(6))
+                                       artifact_bias = BIAS_NECROMANTIC;
+                               break;
+                       case 3:
+                               add_flag(o_ptr->art_flags, TR_ESP_DEMON);
+                               break;
+                       case 4:
+                               add_flag(o_ptr->art_flags, TR_ESP_ORC);
+                               break;
+                       case 5:
+                               add_flag(o_ptr->art_flags, TR_ESP_TROLL);
+                               break;
+                       case 6:
+                               add_flag(o_ptr->art_flags, TR_ESP_GIANT);
+                               break;
+                       case 7:
+                               add_flag(o_ptr->art_flags, TR_ESP_HUMAN);
+                               if (!artifact_bias && one_in_(6))
+                                       artifact_bias = BIAS_ROGUE;
+                               break;
+                       case 8:
+                               add_flag(o_ptr->art_flags, TR_ESP_GOOD);
+                               if (!artifact_bias && one_in_(3))
+                                       artifact_bias = BIAS_LAW;
+                               break;
+                       }
+                       break;
+               }
        }
 }
 
@@ -898,14 +1003,14 @@ static void random_slay(object_type *o_ptr)
                        case 1:
                        case 2:
                        case 3:
-                               o_ptr->art_flags3 |= TR3_XTRA_MIGHT;
-                               if (!one_in_(7)) o_ptr->art_flags3 &= ~(TR3_XTRA_SHOTS);
+                               add_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
+                               if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
                                if (!artifact_bias && one_in_(9))
                                        artifact_bias = BIAS_RANGER;
                                break;
                        default:
-                               o_ptr->art_flags3 |= TR3_XTRA_SHOTS;
-                               if (!one_in_(7)) o_ptr->art_flags3 &= ~(TR3_XTRA_MIGHT);
+                               add_flag(o_ptr->art_flags, TR_XTRA_SHOTS);
+                               if (!one_in_(7)) remove_flag(o_ptr->art_flags, TR_XTRA_MIGHT);
                                if (!artifact_bias && one_in_(9))
                                        artifact_bias = BIAS_RANGER;
                        break;
@@ -917,39 +1022,39 @@ static void random_slay(object_type *o_ptr)
        switch (artifact_bias)
        {
        case BIAS_CHAOS:
-               if (!(o_ptr->art_flags1 & TR1_CHAOTIC))
+               if (!(have_flag(o_ptr->art_flags, TR_CHAOTIC)))
                {
-                       o_ptr->art_flags1 |= TR1_CHAOTIC;
+                       add_flag(o_ptr->art_flags, TR_CHAOTIC);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_PRIESTLY:
                if((o_ptr->tval == TV_SWORD || o_ptr->tval == TV_POLEARM) &&
-                  !(o_ptr->art_flags3 & TR3_BLESSED))
+                  !(have_flag(o_ptr->art_flags, TR_BLESSED)))
                {
                        /* A free power for "priestly" random artifacts */
-                       o_ptr->art_flags3 |= TR3_BLESSED;
+                       add_flag(o_ptr->art_flags, TR_BLESSED);
                }
                break;
 
        case BIAS_NECROMANTIC:
-               if (!(o_ptr->art_flags1 & TR1_VAMPIRIC))
+               if (!(have_flag(o_ptr->art_flags, TR_VAMPIRIC)))
                {
-                       o_ptr->art_flags1 |= TR1_VAMPIRIC;
+                       add_flag(o_ptr->art_flags, TR_VAMPIRIC);
                        if (one_in_(2)) return;
                }
-               if (!(o_ptr->art_flags1 & TR1_BRAND_POIS) && one_in_(2))
+               if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)) && one_in_(2))
                {
-                       o_ptr->art_flags1 |= TR1_BRAND_POIS;
+                       add_flag(o_ptr->art_flags, TR_BRAND_POIS);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_RANGER:
-               if (!(o_ptr->art_flags1 & TR1_SLAY_ANIMAL))
+               if (!(have_flag(o_ptr->art_flags, TR_SLAY_ANIMAL)))
                {
-                       o_ptr->art_flags1 |= TR1_SLAY_ANIMAL;
+                       add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
                        if (one_in_(2)) return;
                }
                break;
@@ -957,72 +1062,72 @@ static void random_slay(object_type *o_ptr)
        case BIAS_ROGUE:
                if ((((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DAGGER)) ||
                     ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_SPEAR))) &&
-                        !(o_ptr->art_flags2 & TR2_THROW))
+                        !(have_flag(o_ptr->art_flags, TR_THROW)))
                {
                        /* Free power for rogues... */
-                       o_ptr->art_flags2 |= TR2_THROW;
+                       add_flag(o_ptr->art_flags, TR_THROW);
                }
-               if (!(o_ptr->art_flags1 & TR1_BRAND_POIS))
+               if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
                {
-                       o_ptr->art_flags1 |= TR1_BRAND_POIS;
+                       add_flag(o_ptr->art_flags, TR_BRAND_POIS);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_POIS:
-               if (!(o_ptr->art_flags1 & TR1_BRAND_POIS))
+               if (!(have_flag(o_ptr->art_flags, TR_BRAND_POIS)))
                {
-                       o_ptr->art_flags1 |= TR1_BRAND_POIS;
+                       add_flag(o_ptr->art_flags, TR_BRAND_POIS);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_FIRE:
-               if (!(o_ptr->art_flags1 & TR1_BRAND_FIRE))
+               if (!(have_flag(o_ptr->art_flags, TR_BRAND_FIRE)))
                {
-                       o_ptr->art_flags1 |= TR1_BRAND_FIRE;
+                       add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_COLD:
-               if (!(o_ptr->art_flags1 & TR1_BRAND_COLD))
+               if (!(have_flag(o_ptr->art_flags, TR_BRAND_COLD)))
                {
-                       o_ptr->art_flags1 |= TR1_BRAND_COLD;
+                       add_flag(o_ptr->art_flags, TR_BRAND_COLD);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_ELEC:
-               if (!(o_ptr->art_flags1 & TR1_BRAND_ELEC))
+               if (!(have_flag(o_ptr->art_flags, TR_BRAND_ELEC)))
                {
-                       o_ptr->art_flags1 |= TR1_BRAND_ELEC;
+                       add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_ACID:
-               if (!(o_ptr->art_flags1 & TR1_BRAND_ACID))
+               if (!(have_flag(o_ptr->art_flags, TR_BRAND_ACID)))
                {
-                       o_ptr->art_flags1 |= TR1_BRAND_ACID;
+                       add_flag(o_ptr->art_flags, TR_BRAND_ACID);
                        if (one_in_(2)) return;
                }
                break;
 
        case BIAS_LAW:
-               if (!(o_ptr->art_flags1 & TR1_SLAY_EVIL))
+               if (!(have_flag(o_ptr->art_flags, TR_SLAY_EVIL)))
                {
-                       o_ptr->art_flags1 |= TR1_SLAY_EVIL;
+                       add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
                        if (one_in_(2)) return;
                }
-               if (!(o_ptr->art_flags1 & TR1_SLAY_UNDEAD))
+               if (!(have_flag(o_ptr->art_flags, TR_SLAY_UNDEAD)))
                {
-                       o_ptr->art_flags1 |= TR1_SLAY_UNDEAD;
+                       add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
                        if (one_in_(2)) return;
                }
-               if (!(o_ptr->art_flags1 & TR1_SLAY_DEMON))
+               if (!(have_flag(o_ptr->art_flags, TR_SLAY_DEMON)))
                {
-                       o_ptr->art_flags1 |= TR1_SLAY_DEMON;
+                       add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
                        if (one_in_(2)) return;
                }
                break;
@@ -1032,11 +1137,11 @@ static void random_slay(object_type *o_ptr)
        {
                case 1:
                case 2:
-                       o_ptr->art_flags1 |= TR1_SLAY_ANIMAL;
+                       add_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
                        break;
                case 3:
                case 4:
-                       o_ptr->art_flags1 |= TR1_SLAY_EVIL;
+                       add_flag(o_ptr->art_flags, TR_SLAY_EVIL);
                        if (!artifact_bias && one_in_(2))
                                artifact_bias = BIAS_LAW;
                        else if (!artifact_bias && one_in_(9))
@@ -1044,40 +1149,40 @@ static void random_slay(object_type *o_ptr)
                        break;
                case 5:
                case 6:
-                       o_ptr->art_flags1 |= TR1_SLAY_UNDEAD;
+                       add_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
                        if (!artifact_bias && one_in_(9))
                                artifact_bias = BIAS_PRIESTLY;
                        break;
                case 7:
                case 8:
-                       o_ptr->art_flags1 |= TR1_SLAY_DEMON;
+                       add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
                        if (!artifact_bias && one_in_(9))
                                artifact_bias = BIAS_PRIESTLY;
                        break;
                case 9:
                case 10:
-                       o_ptr->art_flags1 |= TR1_SLAY_ORC;
+                       add_flag(o_ptr->art_flags, TR_SLAY_ORC);
                        break;
                case 11:
                case 12:
-                       o_ptr->art_flags1 |= TR1_SLAY_TROLL;
+                       add_flag(o_ptr->art_flags, TR_SLAY_TROLL);
                        break;
                case 13:
                case 14:
-                       o_ptr->art_flags1 |= TR1_SLAY_GIANT;
+                       add_flag(o_ptr->art_flags, TR_SLAY_GIANT);
                        break;
                case 15:
                case 16:
-                       o_ptr->art_flags1 |= TR1_SLAY_DRAGON;
+                       add_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
                        break;
                case 17:
-                       o_ptr->art_flags1 |= TR1_KILL_DRAGON;
+                       add_flag(o_ptr->art_flags, TR_KILL_DRAGON);
                        break;
                case 18:
                case 19:
                        if (o_ptr->tval == TV_SWORD)
                        {
-                               o_ptr->art_flags1 |= TR1_VORPAL;
+                               add_flag(o_ptr->art_flags, TR_VORPAL);
                                if (!artifact_bias && one_in_(9))
                                        artifact_bias = BIAS_WARRIOR;
                        }
@@ -1085,35 +1190,35 @@ static void random_slay(object_type *o_ptr)
                                random_slay(o_ptr);
                        break;
                case 20:
-                       o_ptr->art_flags1 |= TR1_IMPACT;
+                       add_flag(o_ptr->art_flags, TR_IMPACT);
                        break;
                case 21:
                case 22:
-                       o_ptr->art_flags1 |= TR1_BRAND_FIRE;
+                       add_flag(o_ptr->art_flags, TR_BRAND_FIRE);
                        if (!artifact_bias)
                                artifact_bias = BIAS_FIRE;
                        break;
                case 23:
                case 24:
-                       o_ptr->art_flags1 |= TR1_BRAND_COLD;
+                       add_flag(o_ptr->art_flags, TR_BRAND_COLD);
                        if (!artifact_bias)
                                artifact_bias = BIAS_COLD;
                        break;
                case 25:
                case 26:
-                       o_ptr->art_flags1 |= TR1_BRAND_ELEC;
+                       add_flag(o_ptr->art_flags, TR_BRAND_ELEC);
                        if (!artifact_bias)
                                artifact_bias = BIAS_ELEC;
                        break;
                case 27:
                case 28:
-                       o_ptr->art_flags1 |= TR1_BRAND_ACID;
+                       add_flag(o_ptr->art_flags, TR_BRAND_ACID);
                        if (!artifact_bias)
                                artifact_bias = BIAS_ACID;
                        break;
                case 29:
                case 30:
-                       o_ptr->art_flags1 |= TR1_BRAND_POIS;
+                       add_flag(o_ptr->art_flags, TR_BRAND_POIS);
                        if (!artifact_bias && !one_in_(3))
                                artifact_bias = BIAS_POIS;
                        else if (!artifact_bias && one_in_(6))
@@ -1122,21 +1227,21 @@ static void random_slay(object_type *o_ptr)
                                artifact_bias = BIAS_ROGUE;
                        break;
                case 31:
-                       o_ptr->art_flags1 |= TR1_VAMPIRIC;
+                       add_flag(o_ptr->art_flags, TR_VAMPIRIC);
                        if (!artifact_bias)
                                artifact_bias = BIAS_NECROMANTIC;
                        break;
                case 32:
-                       o_ptr->art_flags1 |= TR1_FORCE_WEAPON;
+                       add_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
                        if (!artifact_bias)
                                artifact_bias = (one_in_(2) ? BIAS_MAGE : BIAS_PRIESTLY);
                        break;
                case 33:
                case 34:
-                       o_ptr->art_flags3 |= TR3_SLAY_HUMAN;
+                       add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
                        break;
                default:
-                       o_ptr->art_flags1 |= TR1_CHAOTIC;
+                       add_flag(o_ptr->art_flags, TR_CHAOTIC);
                        if (!artifact_bias)
                                artifact_bias = BIAS_CHAOS;
                        break;
@@ -1415,7 +1520,7 @@ static void give_activation_power(object_type *o_ptr)
 
        /* A type was chosen... */
        o_ptr->xtra2 = type;
-       o_ptr->art_flags3 |= TR3_ACTIVATE;
+       add_flag(o_ptr->art_flags, TR_ACTIVATE);
        o_ptr->timeout = 0;
 }
 
@@ -1523,6 +1628,7 @@ bool create_artifact(object_type *o_ptr, bool a_scroll)
        s32b    total_flags;
        bool    a_cursed = FALSE;
        int     warrior_artifact_bias = 0;
+       int i;
 
        /* Reset artifact bias */
        artifact_bias = 0;
@@ -1531,9 +1637,9 @@ bool create_artifact(object_type *o_ptr, bool a_scroll)
        o_ptr->name1 = 0;
        o_ptr->name2 = 0;
 
-       o_ptr->art_flags1 |= k_info[o_ptr->k_idx].flags1;
-       o_ptr->art_flags2 |= k_info[o_ptr->k_idx].flags2;
-       o_ptr->art_flags3 |= k_info[o_ptr->k_idx].flags3;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               o_ptr->art_flags[i] |= k_info[o_ptr->k_idx].flags[i];
+
        if (o_ptr->pval) has_pval = TRUE;
 
        if (a_scroll && one_in_(4))
@@ -1669,14 +1775,14 @@ bool create_artifact(object_type *o_ptr, bool a_scroll)
        if (has_pval)
        {
 #if 0
-               o_ptr->art_flags3 |= TR3_SHOW_MODS;
+               add_flag(o_ptr->art_flags, TR_SHOW_MODS);
 
                /* This one commented out by gw's request... */
                if (!a_scroll)
-                       o_ptr->art_flags3 |= TR3_HIDE_TYPE;
+                       add_flag(o_ptr->art_flags, TR_HIDE_TYPE);
 #endif
 
-               if (o_ptr->art_flags1 & TR1_BLOWS)
+               if (have_flag(o_ptr->art_flags, TR_BLOWS))
                {
                        o_ptr->pval = randint1(2);
                        if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_HAYABUSA))
@@ -1702,12 +1808,14 @@ bool create_artifact(object_type *o_ptr, bool a_scroll)
        {
                o_ptr->to_h += randint1(o_ptr->to_h > 19 ? 1 : 20 - o_ptr->to_h);
                o_ptr->to_d += randint1(o_ptr->to_d > 19 ? 1 : 20 - o_ptr->to_d);
-               if ((o_ptr->art_flags1 & TR1_WIS) && (o_ptr->pval > 0)) o_ptr->art_flags3 |= TR3_BLESSED;
+               if ((have_flag(o_ptr->art_flags, TR_WIS)) && (o_ptr->pval > 0)) add_flag(o_ptr->art_flags, TR_BLESSED);
        }
 
        /* Just to be sure */
-       o_ptr->art_flags3 |= (TR3_IGNORE_ACID | TR3_IGNORE_ELEC |
-                             TR3_IGNORE_FIRE | TR3_IGNORE_COLD);
+       add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
+       add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
+       add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
+       add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
 
        total_flags = flag_cost(o_ptr, o_ptr->pval);
        if (cheat_peek) msg_format("%ld", total_flags);
@@ -1738,30 +1846,30 @@ bool create_artifact(object_type *o_ptr, bool a_scroll)
                }
        }
 
-       if (((artifact_bias == BIAS_MAGE) || (artifact_bias == BIAS_INT)) && (o_ptr->tval == TV_GLOVES)) o_ptr->art_flags2 |= TR2_FREE_ACT;
+       if (((artifact_bias == BIAS_MAGE) || (artifact_bias == BIAS_INT)) && (o_ptr->tval == TV_GLOVES)) add_flag(o_ptr->art_flags, TR_FREE_ACT);
 
        if ((o_ptr->tval == TV_SWORD) && (o_ptr->sval == SV_DOKUBARI))
        {
                o_ptr->to_h = 0;
                o_ptr->to_d = 0;
-               o_ptr->art_flags1 &= ~(TR1_BLOWS);
-               o_ptr->art_flags1 &= ~(TR1_FORCE_WEAPON);
-               o_ptr->art_flags1 &= ~(TR1_SLAY_ANIMAL);
-               o_ptr->art_flags1 &= ~(TR1_SLAY_EVIL);
-               o_ptr->art_flags1 &= ~(TR1_SLAY_UNDEAD);
-               o_ptr->art_flags1 &= ~(TR1_SLAY_DEMON);
-               o_ptr->art_flags1 &= ~(TR1_SLAY_ORC);
-               o_ptr->art_flags1 &= ~(TR1_SLAY_TROLL);
-               o_ptr->art_flags1 &= ~(TR1_SLAY_GIANT);
-               o_ptr->art_flags1 &= ~(TR1_SLAY_DRAGON);
-               o_ptr->art_flags1 &= ~(TR1_KILL_DRAGON);
-               o_ptr->art_flags3 &= ~(TR3_SLAY_HUMAN);
-               o_ptr->art_flags1 &= ~(TR1_VORPAL);
-               o_ptr->art_flags1 &= ~(TR1_BRAND_POIS);
-               o_ptr->art_flags1 &= ~(TR1_BRAND_ACID);
-               o_ptr->art_flags1 &= ~(TR1_BRAND_ELEC);
-               o_ptr->art_flags1 &= ~(TR1_BRAND_FIRE);
-               o_ptr->art_flags1 &= ~(TR1_BRAND_COLD);
+               remove_flag(o_ptr->art_flags, TR_BLOWS);
+               remove_flag(o_ptr->art_flags, TR_FORCE_WEAPON);
+               remove_flag(o_ptr->art_flags, TR_SLAY_ANIMAL);
+               remove_flag(o_ptr->art_flags, TR_SLAY_EVIL);
+               remove_flag(o_ptr->art_flags, TR_SLAY_UNDEAD);
+               remove_flag(o_ptr->art_flags, TR_SLAY_DEMON);
+               remove_flag(o_ptr->art_flags, TR_SLAY_ORC);
+               remove_flag(o_ptr->art_flags, TR_SLAY_TROLL);
+               remove_flag(o_ptr->art_flags, TR_SLAY_GIANT);
+               remove_flag(o_ptr->art_flags, TR_SLAY_DRAGON);
+               remove_flag(o_ptr->art_flags, TR_KILL_DRAGON);
+               remove_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
+               remove_flag(o_ptr->art_flags, TR_VORPAL);
+               remove_flag(o_ptr->art_flags, TR_BRAND_POIS);
+               remove_flag(o_ptr->art_flags, TR_BRAND_ACID);
+               remove_flag(o_ptr->art_flags, TR_BRAND_ELEC);
+               remove_flag(o_ptr->art_flags, TR_BRAND_FIRE);
+               remove_flag(o_ptr->art_flags, TR_BRAND_COLD);
        }
 
        if (o_ptr->tval >= TV_BOOTS)
@@ -2918,8 +3026,8 @@ void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
                }
                else
                {
-                       o_ptr->art_flags3 |=
-                           (TR3_AGGRAVATE | TR3_TY_CURSE);
+                       add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+                       add_flag(o_ptr->art_flags, TR_TY_CURSE);
                        o_ptr->curse_flags |=
                            (TRC_CURSED | TRC_HEAVY_CURSE);
                        o_ptr->curse_flags |= get_curse(2, o_ptr);
@@ -2930,7 +3038,7 @@ void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
        {
                if (p_ptr->pclass != CLASS_SAMURAI)
                {
-                       o_ptr->art_flags3 |= (TR3_NO_MAGIC);
+                       add_flag(o_ptr->art_flags, TR_NO_MAGIC);
                        o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
                }
        }
@@ -2938,7 +3046,7 @@ void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
        if (o_ptr->name1 == ART_XIAOLONG)
        {
                if (p_ptr->pclass == CLASS_MONK)
-                       o_ptr->art_flags1 |= TR1_BLOWS;
+                       add_flag(o_ptr->art_flags, TR_BLOWS);
        }
 
        if (o_ptr->name1 == ART_BLOOD)
@@ -2948,8 +3056,8 @@ void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
                for (i = 0; i < dummy; i++)
                {
                        int flag = randint0(19);
-                       if (flag == 18) o_ptr->art_flags3 |= TR3_SLAY_HUMAN;
-                       else o_ptr->art_flags1 |= (TR1_CHAOTIC << flag);
+                       if (flag == 18) add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
+                       else add_flag(o_ptr->art_flags, TR_CHAOTIC + flag);
                }
                dummy = randint1(2);
                for (i = 0; i < dummy; i++)
@@ -2958,8 +3066,8 @@ void random_artifact_resistance(object_type * o_ptr, artifact_type *a_ptr)
                for (i = 0; i < dummy; i++)
                {
                        int tmp = randint0(11);
-                       if (tmp < 6) o_ptr->art_flags1 |= (TR1_STR << tmp);
-                       else o_ptr->art_flags1 |= (TR1_STEALTH << (tmp - 6));
+                       if (tmp < 6) add_flag(o_ptr->art_flags, TR_STR + tmp);
+                       else add_flag(o_ptr->art_flags, TR_STEALTH + tmp - 6);
                }
        }
 
index f9e35ae..c512e8d 100644 (file)
@@ -3035,7 +3035,7 @@ static void town_history(void)
  */
 static void compare_weapon_aux2(object_type *o_ptr, int numblows,
                                 int r, int c, int mult, cptr attr,
-                                u32b f1, u32b f2, u32b f3, byte color)
+                               byte color)
 {
        char tmp_str[80];
 
@@ -3066,53 +3066,70 @@ sprintf(tmp_str, "
 static void compare_weapon_aux1(object_type *o_ptr, int col, int r)
 {
        int mult = 60;
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
+       int blow = p_ptr->num_blow[0];
 
        /* Get the flags of the weapon */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        if (p_ptr->riding)
        {
                if ((o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE)))
                        mult = mult * (o_ptr->dd + 2) / o_ptr->dd;
        }
-       if ((p_ptr->pclass != CLASS_SAMURAI) && (f1 & TR1_FORCE_WEAPON) && (p_ptr->csp > (o_ptr->dd * o_ptr->ds / 5))) mult = mult * 7 / 2;
+       if ((p_ptr->pclass != CLASS_SAMURAI) && (have_flag(flgs, TR_FORCE_WEAPON)) && (p_ptr->csp > (o_ptr->dd * o_ptr->ds / 5))) mult = mult * 7 / 2;
 
        /* Print the relevant lines */
 #ifdef JP
-if (f1 & TR1_FORCE_WEAPON)     compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 1*mult, "ÍýÎÏ:", f1, f2, f3, TERM_L_BLUE);
-if (f1 & TR1_SLAY_ANIMAL) compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "ưʪ:", f1, f2, f3, TERM_YELLOW);
-if (f1 & TR1_SLAY_EVIL)   compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 2*mult, "¼Ù°­:", f1, f2, f3, TERM_YELLOW);
-if (f3 & TR3_SLAY_HUMAN)   compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "¿Í´Ö:", f1, f2, f3, TERM_YELLOW);
-if (f1 & TR1_SLAY_UNDEAD) compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "ÉÔ»à:", f1, f2, f3, TERM_YELLOW);
-if (f1 & TR1_SLAY_DEMON)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "°­Ëâ:", f1, f2, f3, TERM_YELLOW);
-if (f1 & TR1_SLAY_ORC)    compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "¥ª¡¼¥¯:", f1, f2, f3, TERM_YELLOW);
-if (f1 & TR1_SLAY_TROLL)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "¥È¥í¥ë:", f1, f2, f3, TERM_YELLOW);
-if (f1 & TR1_SLAY_GIANT)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "µð¿Í:", f1, f2, f3, TERM_YELLOW);
-if (f1 & TR1_KILL_DRAGON) compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult, "ε:", f1, f2, f3, TERM_YELLOW);
-else if (f1 & TR1_SLAY_DRAGON) compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "ε:", f1, f2, f3, TERM_YELLOW);
-if (f1 & TR1_BRAND_ACID)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "»À°À­:", f1, f2, f3, TERM_RED);
-if (f1 & TR1_BRAND_ELEC)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "ÅÅ°À­:", f1, f2, f3, TERM_RED);
-if (f1 & TR1_BRAND_FIRE)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "±ê°À­:", f1, f2, f3, TERM_RED);
-if (f1 & TR1_BRAND_COLD)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "Îä°À­:", f1, f2, f3, TERM_RED);
-if (f1 & TR1_BRAND_POIS)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "ÆÇ°À­:", f1, f2, f3, TERM_RED);
-#else
-       if (f1 & TR1_FORCE_WEAPON)     compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 1*mult, "Force  :", f1, f2, f3, TERM_L_BLUE);
-       if (f1 & TR1_SLAY_ANIMAL) compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "Animals:", f1, f2, f3, TERM_YELLOW);
-       if (f1 & TR1_SLAY_EVIL)   compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 2*mult, "Evil:", f1, f2, f3, TERM_YELLOW);
-       if (f3 & TR3_SLAY_HUMAN)   compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "Human:", f1, f2, f3, TERM_YELLOW);
-       if (f1 & TR1_SLAY_UNDEAD) compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "Undead:", f1, f2, f3, TERM_YELLOW);
-       if (f1 & TR1_SLAY_DEMON)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "Demons:", f1, f2, f3, TERM_YELLOW);
-       if (f1 & TR1_SLAY_ORC)    compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "Orcs:", f1, f2, f3, TERM_YELLOW);
-       if (f1 & TR1_SLAY_TROLL)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "Trolls:", f1, f2, f3, TERM_YELLOW);
-       if (f1 & TR1_SLAY_GIANT)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "Giants:", f1, f2, f3, TERM_YELLOW);
-       if (f1 & TR1_KILL_DRAGON) compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult, "Dragons:", f1, f2, f3, TERM_YELLOW);
-       else if (f1 & TR1_SLAY_DRAGON) compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 3*mult, "Dragons:", f1, f2, f3, TERM_YELLOW);
-       if (f1 & TR1_BRAND_ACID)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "Acid:", f1, f2, f3, TERM_RED);
-       if (f1 & TR1_BRAND_ELEC)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "Elec:", f1, f2, f3, TERM_RED);
-       if (f1 & TR1_BRAND_FIRE)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "Fire:", f1, f2, f3, TERM_RED);
-       if (f1 & TR1_BRAND_COLD)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "Cold:", f1, f2, f3, TERM_RED);
-       if (f1 & TR1_BRAND_POIS)  compare_weapon_aux2(o_ptr, p_ptr->num_blow[0], r++, col, 5*mult/2, "Poison:", f1, f2, f3, TERM_RED);
+if (have_flag(flgs, TR_FORCE_WEAPON))     compare_weapon_aux2(o_ptr, blow, r++, col, 1*mult, "ÍýÎÏ:", TERM_L_BLUE);
+if (have_flag(flgs, TR_KILL_ANIMAL)) compare_weapon_aux2(o_ptr, blow, r++, col, 4*mult, "ưʪ:", TERM_YELLOW);
+ else if (have_flag(flgs, TR_SLAY_ANIMAL)) compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "ưʪ:", TERM_YELLOW);
+if (have_flag(flgs, TR_KILL_EVIL))   compare_weapon_aux2(o_ptr, blow, r++, col, 7*mult/2, "¼Ù°­:", TERM_YELLOW);
+ else if (have_flag(flgs, TR_SLAY_EVIL))   compare_weapon_aux2(o_ptr, blow, r++, col, 2*mult, "¼Ù°­:", TERM_YELLOW);
+if (have_flag(flgs, TR_KILL_HUMAN))   compare_weapon_aux2(o_ptr, blow, r++, col, 4*mult, "¿Í´Ö:", TERM_YELLOW);
+ else if (have_flag(flgs, TR_SLAY_HUMAN))   compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "¿Í´Ö:", TERM_YELLOW);
+if (have_flag(flgs, TR_KILL_UNDEAD)) compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "ÉÔ»à:", TERM_YELLOW);
+ else if (have_flag(flgs, TR_SLAY_UNDEAD)) compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "ÉÔ»à:", TERM_YELLOW);
+if (have_flag(flgs, TR_KILL_DEMON))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "°­Ëâ:", TERM_YELLOW);
+ else if (have_flag(flgs, TR_SLAY_DEMON))  compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "°­Ëâ:", TERM_YELLOW);
+if (have_flag(flgs, TR_KILL_ORC))    compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "¥ª¡¼¥¯:", TERM_YELLOW);
+ else if (have_flag(flgs, TR_SLAY_ORC))    compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "¥ª¡¼¥¯:", TERM_YELLOW);
+if (have_flag(flgs, TR_KILL_TROLL))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "¥È¥í¥ë:", TERM_YELLOW);
+ else if (have_flag(flgs, TR_SLAY_TROLL))  compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "¥È¥í¥ë:", TERM_YELLOW);
+if (have_flag(flgs, TR_KILL_GIANT))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "µð¿Í:", TERM_YELLOW);
+ else if (have_flag(flgs, TR_SLAY_GIANT))  compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "µð¿Í:", TERM_YELLOW);
+if (have_flag(flgs, TR_KILL_DRAGON)) compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "ε:", TERM_YELLOW);
+else if (have_flag(flgs, TR_SLAY_DRAGON)) compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "ε:", TERM_YELLOW);
+if (have_flag(flgs, TR_BRAND_ACID))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "»À°À­:", TERM_RED);
+if (have_flag(flgs, TR_BRAND_ELEC))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "ÅÅ°À­:", TERM_RED);
+if (have_flag(flgs, TR_BRAND_FIRE))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "±ê°À­:", TERM_RED);
+if (have_flag(flgs, TR_BRAND_COLD))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "Îä°À­:", TERM_RED);
+if (have_flag(flgs, TR_BRAND_POIS))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "ÆÇ°À­:", TERM_RED);
+#else
+       if (have_flag(flgs, TR_FORCE_WEAPON))     compare_weapon_aux2(o_ptr, blow, r++, col, 1*mult, "Force  :", TERM_L_BLUE);
+       if (have_flag(flgs, TR_KILL_ANIMAL)) compare_weapon_aux2(o_ptr, blow, r++, col, 4*mult, "Animals:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_ANIMAL)) compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "Animals:", TERM_YELLOW);
+       if (have_flag(flgs, TR_KILL_EVIL))   compare_weapon_aux2(o_ptr, blow, r++, col, 7*mult/2, "Evil:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_EVIL))   compare_weapon_aux2(o_ptr, blow, r++, col, 2*mult, "Evil:", TERM_YELLOW);
+       if (have_flag(flgs, TR_KILL_HUMAN))   compare_weapon_aux2(o_ptr, blow, r++, col, 4*mult, "Human:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_HUMAN))   compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "Human:", TERM_YELLOW);
+       if (have_flag(flgs, TR_KILL_UNDEAD)) compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "Undead:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_UNDEAD)) compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "Undead:", TERM_YELLOW);
+       if (have_flag(flgs, TR_KILL_DEMON))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "Demons:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_DEMON))  compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "Demons:", TERM_YELLOW);
+       if (have_flag(flgs, TR_KILL_ORC))    compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "Orcs:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_ORC))    compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "Orcs:", TERM_YELLOW);
+       if (have_flag(flgs, TR_KILL_TROLL))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "Trolls:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_TROLL))  compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "Trolls:", TERM_YELLOW);
+       if (have_flag(flgs, TR_KILL_GIANT))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "Giants:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_GIANT))  compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "Giants:", TERM_YELLOW);
+       if (have_flag(flgs, TR_KILL_DRAGON)) compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult, "Dragons:", TERM_YELLOW);
+       else if (have_flag(flgs, TR_SLAY_DRAGON)) compare_weapon_aux2(o_ptr, blow, r++, col, 3*mult, "Dragons:", TERM_YELLOW);
+       if (have_flag(flgs, TR_BRAND_ACID))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "Acid:", TERM_RED);
+       if (have_flag(flgs, TR_BRAND_ELEC))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "Elec:", TERM_RED);
+       if (have_flag(flgs, TR_BRAND_FIRE))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "Fire:", TERM_RED);
+       if (have_flag(flgs, TR_BRAND_COLD))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "Cold:", TERM_RED);
+       if (have_flag(flgs, TR_BRAND_POIS))  compare_weapon_aux2(o_ptr, blow, r++, col, 5*mult/2, "Poison:", TERM_RED);
 #endif
 
 }
index 9e4ff68..385deba 100644 (file)
@@ -222,10 +222,10 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
 
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Some "weapons" and "ammo" do extra damage */
        switch (o_ptr->tval)
@@ -239,7 +239,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                case TV_DIGGING:
                {
                        /* Slay Animal */
-                       if ((f1 & TR1_SLAY_ANIMAL) &&
+                       if ((have_flag(flgs, TR_SLAY_ANIMAL)) &&
                            (r_ptr->flags3 & RF3_ANIMAL))
                        {
                                if (m_ptr->ml)
@@ -250,8 +250,20 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                if (mult < 25) mult = 25;
                        }
 
+                       /* Execute Animal */
+                       if ((have_flag(flgs, TR_KILL_ANIMAL)) &&
+                           (r_ptr->flags3 & RF3_ANIMAL))
+                       {
+                               if (m_ptr->ml)
+                               {
+                                       r_ptr->r_flags3 |= RF3_ANIMAL;
+                               }
+
+                               if (mult < 40) mult = 40;
+                       }
+
                        /* Slay Evil */
-                       if ((f1 & TR1_SLAY_EVIL) &&
+                       if ((have_flag(flgs, TR_SLAY_EVIL)) &&
                            (r_ptr->flags3 & RF3_EVIL))
                        {
                                if (m_ptr->ml)
@@ -262,8 +274,20 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                if (mult < 20) mult = 20;
                        }
 
+                       /* Execute Evil */
+                       if ((have_flag(flgs, TR_KILL_EVIL)) &&
+                           (r_ptr->flags3 & RF3_EVIL))
+                       {
+                               if (m_ptr->ml)
+                               {
+                                       r_ptr->r_flags3 |= RF3_EVIL;
+                               }
+
+                               if (mult < 35) mult = 35;
+                       }
+
                        /* Slay Human */
-                       if ((f3 & TR3_SLAY_HUMAN) &&
+                       if ((have_flag(flgs, TR_SLAY_HUMAN)) &&
                            (r_ptr->flags2 & RF2_HUMAN))
                        {
                                if (m_ptr->ml)
@@ -274,8 +298,20 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                if (mult < 25) mult = 25;
                        }
 
+                       /* Execute Human */
+                       if ((have_flag(flgs, TR_KILL_HUMAN)) &&
+                           (r_ptr->flags2 & RF2_HUMAN))
+                       {
+                               if (m_ptr->ml)
+                               {
+                                       r_ptr->r_flags2 |= RF2_HUMAN;
+                               }
+
+                               if (mult < 40) mult = 40;
+                       }
+
                        /* Slay Undead */
-                       if ((f1 & TR1_SLAY_UNDEAD) &&
+                       if ((have_flag(flgs, TR_SLAY_UNDEAD)) &&
                            (r_ptr->flags3 & RF3_UNDEAD))
                        {
                                if (m_ptr->ml)
@@ -286,8 +322,20 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                if (mult < 30) mult = 30;
                        }
 
+                       /* Execute Undead */
+                       if ((have_flag(flgs, TR_KILL_UNDEAD)) &&
+                           (r_ptr->flags3 & RF3_UNDEAD))
+                       {
+                               if (m_ptr->ml)
+                               {
+                                       r_ptr->r_flags3 |= RF3_UNDEAD;
+                               }
+
+                               if (mult < 50) mult = 50;
+                       }
+
                        /* Slay Demon */
-                       if ((f1 & TR1_SLAY_DEMON) &&
+                       if ((have_flag(flgs, TR_SLAY_DEMON)) &&
                            (r_ptr->flags3 & RF3_DEMON))
                        {
                                if (m_ptr->ml)
@@ -298,8 +346,20 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                if (mult < 30) mult = 30;
                        }
 
+                       /* Execute Demon */
+                       if ((have_flag(flgs, TR_KILL_DEMON)) &&
+                           (r_ptr->flags3 & RF3_DEMON))
+                       {
+                               if (m_ptr->ml)
+                               {
+                                       r_ptr->r_flags3 |= RF3_DEMON;
+                               }
+
+                               if (mult < 50) mult = 50;
+                       }
+
                        /* Slay Orc */
-                       if ((f1 & TR1_SLAY_ORC) &&
+                       if ((have_flag(flgs, TR_SLAY_ORC)) &&
                            (r_ptr->flags3 & RF3_ORC))
                        {
                                if (m_ptr->ml)
@@ -310,8 +370,20 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                if (mult < 30) mult = 30;
                        }
 
+                       /* Execute Orc */
+                       if ((have_flag(flgs, TR_KILL_ORC)) &&
+                           (r_ptr->flags3 & RF3_ORC))
+                       {
+                               if (m_ptr->ml)
+                               {
+                                       r_ptr->r_flags3 |= RF3_ORC;
+                               }
+
+                               if (mult < 50) mult = 50;
+                       }
+
                        /* Slay Troll */
-                       if ((f1 & TR1_SLAY_TROLL) &&
+                       if ((have_flag(flgs, TR_SLAY_TROLL)) &&
                            (r_ptr->flags3 & RF3_TROLL))
                        {
                                if (m_ptr->ml)
@@ -322,8 +394,20 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                if (mult < 30) mult = 30;
                        }
 
+                       /* Execute Troll */
+                       if ((have_flag(flgs, TR_KILL_TROLL)) &&
+                           (r_ptr->flags3 & RF3_TROLL))
+                       {
+                               if (m_ptr->ml)
+                               {
+                                       r_ptr->r_flags3 |= RF3_TROLL;
+                               }
+
+                               if (mult < 50) mult = 50;
+                       }
+
                        /* Slay Giant */
-                       if ((f1 & TR1_SLAY_GIANT) &&
+                       if ((have_flag(flgs, TR_SLAY_GIANT)) &&
                            (r_ptr->flags3 & RF3_GIANT))
                        {
                                if (m_ptr->ml)
@@ -336,8 +420,20 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                        mult *= 3;
                        }
 
+                       /* Execute Giant */
+                       if ((have_flag(flgs, TR_KILL_GIANT)) &&
+                           (r_ptr->flags3 & RF3_GIANT))
+                       {
+                               if (m_ptr->ml)
+                               {
+                                       r_ptr->r_flags3 |= RF3_GIANT;
+                               }
+
+                               if (mult < 50) mult = 50;
+                       }
+
                        /* Slay Dragon  */
-                       if ((f1 & TR1_SLAY_DRAGON) &&
+                       if ((have_flag(flgs, TR_SLAY_DRAGON)) &&
                            (r_ptr->flags3 & RF3_DRAGON))
                        {
                                if (m_ptr->ml)
@@ -349,7 +445,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                        }
 
                        /* Execute Dragon */
-                       if ((f1 & TR1_KILL_DRAGON) &&
+                       if ((have_flag(flgs, TR_KILL_DRAGON)) &&
                            (r_ptr->flags3 & RF3_DRAGON))
                        {
                                if (m_ptr->ml)
@@ -364,7 +460,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                        }
 
                        /* Brand (Acid) */
-                       if ((f1 & TR1_BRAND_ACID) || (p_ptr->special_attack & (ATTACK_ACID)))
+                       if ((have_flag(flgs, TR_BRAND_ACID)) || (p_ptr->special_attack & (ATTACK_ACID)))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_ACID)
@@ -383,7 +479,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                        }
 
                        /* Brand (Elec) */
-                       if ((f1 & TR1_BRAND_ELEC) || (p_ptr->special_attack & (ATTACK_ELEC)) || (mode == HISSATSU_ELEC))
+                       if ((have_flag(flgs, TR_BRAND_ELEC)) || (p_ptr->special_attack & (ATTACK_ELEC)) || (mode == HISSATSU_ELEC))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_ELEC)
@@ -395,7 +491,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                }
 
                                /* Otherwise, take the damage */
-                               else if (((f1 & TR1_BRAND_ELEC) || (p_ptr->special_attack & (ATTACK_ELEC))) && (mode == HISSATSU_ELEC))
+                               else if (((have_flag(flgs, TR_BRAND_ELEC)) || (p_ptr->special_attack & (ATTACK_ELEC))) && (mode == HISSATSU_ELEC))
                                {
                                        if (mult < 70) mult = 70;
                                }
@@ -411,7 +507,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                        }
 
                        /* Brand (Fire) */
-                       if ((f1 & TR1_BRAND_FIRE) || (p_ptr->special_attack & (ATTACK_FIRE)) || (mode == HISSATSU_FIRE))
+                       if ((have_flag(flgs, TR_BRAND_FIRE)) || (p_ptr->special_attack & (ATTACK_FIRE)) || (mode == HISSATSU_FIRE))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_FIRE)
@@ -423,7 +519,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                }
 
                                /* Otherwise, take the damage */
-                               else if (((f1 & TR1_BRAND_FIRE) || (p_ptr->special_attack & (ATTACK_FIRE))) && (mode == HISSATSU_FIRE))
+                               else if (((have_flag(flgs, TR_BRAND_FIRE)) || (p_ptr->special_attack & (ATTACK_FIRE))) && (mode == HISSATSU_FIRE))
                                {
                                        if (r_ptr->flags3 & RF3_HURT_FIRE)
                                        {
@@ -450,7 +546,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                        }
 
                        /* Brand (Cold) */
-                       if ((f1 & TR1_BRAND_COLD) || (p_ptr->special_attack & (ATTACK_COLD)) || (mode == HISSATSU_COLD))
+                       if ((have_flag(flgs, TR_BRAND_COLD)) || (p_ptr->special_attack & (ATTACK_COLD)) || (mode == HISSATSU_COLD))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_COLD)
@@ -461,7 +557,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                        }
                                }
                                /* Otherwise, take the damage */
-                               else if (((f1 & TR1_BRAND_COLD) || (p_ptr->special_attack & (ATTACK_COLD))) && (mode == HISSATSU_COLD))
+                               else if (((have_flag(flgs, TR_BRAND_COLD)) || (p_ptr->special_attack & (ATTACK_COLD))) && (mode == HISSATSU_COLD))
                                {
                                        if (r_ptr->flags3 & RF3_HURT_COLD)
                                        {
@@ -488,7 +584,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                        }
 
                        /* Brand (Poison) */
-                       if ((f1 & TR1_BRAND_POIS) || (p_ptr->special_attack & (ATTACK_POIS)) || (mode == HISSATSU_POISON))
+                       if ((have_flag(flgs, TR_BRAND_POIS)) || (p_ptr->special_attack & (ATTACK_POIS)) || (mode == HISSATSU_POISON))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_POIS)
@@ -500,7 +596,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                }
 
                                /* Otherwise, take the damage */
-                               else if (((f1 & TR1_BRAND_POIS) || (p_ptr->special_attack & (ATTACK_POIS))) && (mode == HISSATSU_POISON))
+                               else if (((have_flag(flgs, TR_BRAND_POIS)) || (p_ptr->special_attack & (ATTACK_POIS))) && (mode == HISSATSU_POISON))
                                {
                                        if (mult < 35) mult = 35;
                                }
@@ -542,7 +638,7 @@ s16b tot_dam_aux(object_type *o_ptr, int tdam, monster_type *m_ptr, int mode)
                                if (mult == 10) mult = 40;
                                else if (mult < 60) mult = 60;
                        }
-                       if ((p_ptr->pclass != CLASS_SAMURAI) && (f1 & TR1_FORCE_WEAPON) && (p_ptr->csp > (o_ptr->dd * o_ptr->ds / 5)))
+                       if ((p_ptr->pclass != CLASS_SAMURAI) && (have_flag(flgs, TR_FORCE_WEAPON)) && (p_ptr->csp > (o_ptr->dd * o_ptr->ds / 5)))
                        {
                                p_ptr->csp -= (1+(o_ptr->dd * o_ptr->ds / 5));
                                p_ptr->redraw |= (PR_MANA);
@@ -1808,7 +1904,7 @@ static void py_attack_aux(int y, int x, bool *fear, bool *mdeath, s16b hand, int
        bool            can_drain = FALSE;
        int             num_blow;
        int             drain_left = MAX_VAMPIRIC_DRAIN;
-       u32b            f1, f2, f3; /* A massive hack -- life-draining weapons */
+       u32b flgs[TR_FLAG_SIZE]; /* A massive hack -- life-draining weapons */
        bool            is_human = (r_ptr->d_char == 'p');
        bool            is_lowlevel = (r_ptr->level < (p_ptr->lev - 15));
        bool            zantetsu_mukou, e_j_mukou;
@@ -1977,10 +2073,10 @@ static void py_attack_aux(int y, int x, bool *fear, bool *mdeath, s16b hand, int
                        /* Hack -- bare hands do one damage */
                        k = 1;
 
-                       object_flags(o_ptr, &f1, &f2, &f3);
+                       object_flags(o_ptr, flgs);
 
                        /* Select a chaotic effect (50% chance) */
-                       if ((f1 & TR1_CHAOTIC) && one_in_(2))
+                       if ((have_flag(flgs, TR_CHAOTIC)) && one_in_(2))
                        {
                                if (one_in_(10))
                                chg_virtue(V_CHANCE, 1);
@@ -2013,7 +2109,7 @@ static void py_attack_aux(int y, int x, bool *fear, bool *mdeath, s16b hand, int
                        }
 
                        /* Vampiric drain */
-                       if ((f1 & TR1_VAMPIRIC) || (chaos_effect == 1) || (mode == HISSATSU_DRAIN))
+                       if ((have_flag(flgs, TR_VAMPIRIC)) || (chaos_effect == 1) || (mode == HISSATSU_DRAIN))
                        {
                                /* Only drain "living" monsters */
                                if (monster_living(r_ptr))
@@ -2022,7 +2118,7 @@ static void py_attack_aux(int y, int x, bool *fear, bool *mdeath, s16b hand, int
                                        can_drain = FALSE;
                        }
 
-                       if ((f1 & TR1_VORPAL) && (randint1(vorpal_chance*3/2) == 1) && !zantetsu_mukou)
+                       if ((have_flag(flgs, TR_VORPAL)) && (randint1(vorpal_chance*3/2) == 1) && !zantetsu_mukou)
                                vorpal_cut = TRUE;
                        else vorpal_cut = FALSE;
 
@@ -2768,7 +2864,7 @@ msg_format("
 
                        if ((o_ptr->tval == TV_POLEARM) && (o_ptr->sval == SV_DEATH_SCYTHE) && one_in_(3))
                        {
-                               u32b f1, f2, f3;
+                               u32b flgs[TR_FLAG_SIZE];
 
                                /* Sound */
                                sound(SOUND_HIT);
@@ -2787,7 +2883,7 @@ msg_format("
 #endif
 
                                /* Extract the flags */
-                               object_flags(o_ptr, &f1, &f2, &f3);
+                               object_flags(o_ptr, flgs);
 
                                k = damroll(o_ptr->dd, o_ptr->ds);
                                {
@@ -2845,7 +2941,7 @@ msg_format("
                                        if (!(p_ptr->resist_pois || p_ptr->oppose_pois) && (mult < 25))
                                                mult = 25;
 
-                                       if ((p_ptr->pclass != CLASS_SAMURAI) && (f1 & TR1_FORCE_WEAPON) && (p_ptr->csp > (p_ptr->msp / 30)))
+                                       if ((p_ptr->pclass != CLASS_SAMURAI) && (have_flag(flgs, TR_FORCE_WEAPON)) && (p_ptr->csp > (p_ptr->msp / 30)))
                                        {
                                                p_ptr->csp -= (1+(p_ptr->msp / 30));
                                                p_ptr->redraw |= (PR_MANA);
index 30a3b65..3139af0 100644 (file)
@@ -3250,10 +3250,10 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
 
        monster_race *r_ptr = &r_info[m_ptr->r_idx];
 
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Some "weapons" and "ammo" do extra damage */
        switch (o_ptr->tval)
@@ -3263,7 +3263,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                case TV_BOLT:
                {
                        /* Slay Animal */
-                       if ((f1 & TR1_SLAY_ANIMAL) &&
+                       if ((have_flag(flgs, TR_SLAY_ANIMAL)) &&
                            (r_ptr->flags3 & RF3_ANIMAL))
                        {
                                if (m_ptr->ml)
@@ -3275,7 +3275,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Slay Evil */
-                       if ((f1 & TR1_SLAY_EVIL) &&
+                       if ((have_flag(flgs, TR_SLAY_EVIL)) &&
                            (r_ptr->flags3 & RF3_EVIL))
                        {
                                if (m_ptr->ml)
@@ -3287,7 +3287,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Slay Human */
-                       if ((f3 & TR3_SLAY_HUMAN) &&
+                       if ((have_flag(flgs, TR_SLAY_HUMAN)) &&
                            (r_ptr->flags2 & RF2_HUMAN))
                        {
                                if (m_ptr->ml)
@@ -3299,7 +3299,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Slay Undead */
-                       if ((f1 & TR1_SLAY_UNDEAD) &&
+                       if ((have_flag(flgs, TR_SLAY_UNDEAD)) &&
                            (r_ptr->flags3 & RF3_UNDEAD))
                        {
                                if (m_ptr->ml)
@@ -3311,7 +3311,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Slay Demon */
-                       if ((f1 & TR1_SLAY_DEMON) &&
+                       if ((have_flag(flgs, TR_SLAY_DEMON)) &&
                            (r_ptr->flags3 & RF3_DEMON))
                        {
                                if (m_ptr->ml)
@@ -3323,7 +3323,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Slay Orc */
-                       if ((f1 & TR1_SLAY_ORC) &&
+                       if ((have_flag(flgs, TR_SLAY_ORC)) &&
                            (r_ptr->flags3 & RF3_ORC))
                        {
                                if (m_ptr->ml)
@@ -3335,7 +3335,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Slay Troll */
-                       if ((f1 & TR1_SLAY_TROLL) &&
+                       if ((have_flag(flgs, TR_SLAY_TROLL)) &&
                            (r_ptr->flags3 & RF3_TROLL))
                        {
                                if (m_ptr->ml)
@@ -3347,7 +3347,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Slay Giant */
-                       if ((f1 & TR1_SLAY_GIANT) &&
+                       if ((have_flag(flgs, TR_SLAY_GIANT)) &&
                            (r_ptr->flags3 & RF3_GIANT))
                        {
                                if (m_ptr->ml)
@@ -3359,7 +3359,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Slay Dragon  */
-                       if ((f1 & TR1_SLAY_DRAGON) &&
+                       if ((have_flag(flgs, TR_SLAY_DRAGON)) &&
                            (r_ptr->flags3 & RF3_DRAGON))
                        {
                                if (m_ptr->ml)
@@ -3371,7 +3371,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Execute Dragon */
-                       if ((f1 & TR1_KILL_DRAGON) &&
+                       if ((have_flag(flgs, TR_KILL_DRAGON)) &&
                            (r_ptr->flags3 & RF3_DRAGON))
                        {
                                if (m_ptr->ml)
@@ -3388,7 +3388,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Brand (Acid) */
-                       if ((f1 & TR1_BRAND_ACID) || (p_ptr->special_attack & (ATTACK_ACID)))
+                       if ((have_flag(flgs, TR_BRAND_ACID)) || (p_ptr->special_attack & (ATTACK_ACID)))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_ACID)
@@ -3407,7 +3407,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Brand (Elec) */
-                       if ((f1 & TR1_BRAND_ELEC) || (p_ptr->special_attack & (ATTACK_ELEC)))
+                       if ((have_flag(flgs, TR_BRAND_ELEC)) || (p_ptr->special_attack & (ATTACK_ELEC)))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_ELEC)
@@ -3426,7 +3426,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Brand (Fire) */
-                       if ((f1 & TR1_BRAND_FIRE) || (p_ptr->special_attack & (ATTACK_FIRE)))
+                       if ((have_flag(flgs, TR_BRAND_FIRE)) || (p_ptr->special_attack & (ATTACK_FIRE)))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_FIRE)
@@ -3445,7 +3445,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Brand (Cold) */
-                       if ((f1 & TR1_BRAND_COLD) || (p_ptr->special_attack & (ATTACK_COLD)))
+                       if ((have_flag(flgs, TR_BRAND_COLD)) || (p_ptr->special_attack & (ATTACK_COLD)))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_COLD)
@@ -3463,7 +3463,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                        }
 
                        /* Brand (Poison) */
-                       if ((f1 & TR1_BRAND_POIS) || (p_ptr->special_attack & (ATTACK_POIS)))
+                       if ((have_flag(flgs, TR_BRAND_POIS)) || (p_ptr->special_attack & (ATTACK_POIS)))
                        {
                                /* Notice immunity */
                                if (r_ptr->flags3 & RF3_IM_POIS)
@@ -3481,7 +3481,7 @@ static s16b tot_dam_aux_shot(object_type *o_ptr, int tdam, monster_type *m_ptr)
                                }
                        }
 
-                       if ((f1 & TR1_FORCE_WEAPON) && (p_ptr->csp > (p_ptr->msp / 30)))
+                       if ((have_flag(flgs, TR_FORCE_WEAPON)) && (p_ptr->csp > (p_ptr->msp / 30)))
                        {
                                p_ptr->csp -= (1+(p_ptr->msp / 30));
                                p_ptr->redraw |= (PR_MANA);
@@ -4056,7 +4056,7 @@ bool do_cmd_throw_aux(int mult, bool boomerang, int shuriken)
 
        int msec = delay_factor * delay_factor * delay_factor;
 
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        cptr q, s;
        bool come_back = FALSE;
        bool do_drop = TRUE;
@@ -4161,7 +4161,7 @@ bool do_cmd_throw_aux(int mult, bool boomerang, int shuriken)
        object_copy(q_ptr, o_ptr);
 
        /* Extract the thrown object's flags. */
-       object_flags(q_ptr, &f1, &f2, &f3);
+       object_flags(q_ptr, flgs);
 
        /* Distribute the charges of rods/wands between the stacks */
        distribute_charges(o_ptr, q_ptr, 1);
@@ -4180,7 +4180,7 @@ bool do_cmd_throw_aux(int mult, bool boomerang, int shuriken)
 
        /* Enforce a minimum "weight" of one pound */
        div = ((q_ptr->weight > 10) ? q_ptr->weight : 10);
-       if ((f2 & (TR2_THROW)) || boomerang) div /= 2;
+       if ((have_flag(flgs, TR_THROW)) || boomerang) div /= 2;
 
        /* Hack -- Distance -- Reward strength, penalize weight */
        tdis = (adj_str_blow[p_ptr->stat_ind[A_STR]] + 20) * mul / div;
@@ -4254,11 +4254,11 @@ bool do_cmd_throw_aux(int mult, bool boomerang, int shuriken)
        /* Hack -- Handle stuff */
        handle_stuff();
 
-       if ((p_ptr->pclass == CLASS_NINJA) && ((q_ptr->tval == TV_SPIKE) || ((f2 & TR2_THROW) && (q_ptr->tval == TV_SWORD)))) shuriken = TRUE;
+       if ((p_ptr->pclass == CLASS_NINJA) && ((q_ptr->tval == TV_SPIKE) || ((have_flag(flgs, TR_THROW)) && (q_ptr->tval == TV_SWORD)))) shuriken = TRUE;
        else shuriken = FALSE;
 
        /* Chance of hitting */
-       if (f2 & (TR2_THROW)) chance = ((p_ptr->skill_tht) +
+       if (have_flag(flgs, TR_THROW)) chance = ((p_ptr->skill_tht) +
                ((p_ptr->to_h_b + q_ptr->to_h) * BTH_PLUS_ADJ));
        else chance = (p_ptr->skill_tht + (p_ptr->to_h_b * BTH_PLUS_ADJ));
 
@@ -4417,7 +4417,7 @@ note_dies = "
                                        tdam *= (mult+p_ptr->num_blow[item - INVEN_RARM]);
                                        tdam += p_ptr->to_d_m;
                                }
-                               else if (f2 & (TR2_THROW))
+                               else if (have_flag(flgs, TR_THROW))
                                {
                                        tdam *= (3+mult);
                                        tdam += p_ptr->to_d_m;
index 7005e70..837255e 100644 (file)
@@ -1274,292 +1274,317 @@ typedef struct flag_insc_table
        cptr japanese;
 #endif
        cptr english;
-       u32b flag;
-       int num;
+       int flag;
        u32b except_flag;
 } flag_insc_table;
 
 #ifdef JP
 static flag_insc_table flag_insc_plus[] =
 {
-       { "¹¶", "At", TR1_BLOWS, 1, 0 },
-       { "®", "Sp", TR1_SPEED, 1, 0 },
-       { "ÏÓ", "St", TR1_STR, 1, 0 },
-       { "ÃÎ", "In", TR1_INT, 1, 0 },
-       { "¸­", "Wi", TR1_WIS, 1, 0 },
-       { "´ï", "Dx", TR1_DEX, 1, 0 },
-       { "ÂÑ", "Cn", TR1_CON, 1, 0 },
-       { "̥", "Ch", TR1_CHR, 1, 0 },
-       { "±£", "Sl", TR1_STEALTH, 1, 0 },
-       { "õ", "Sr", TR1_SEARCH, 1, 0 },
-       { "ÀÖ", "If", TR1_INFRA, 1, 0 },
-       { "·¡", "Dg", TR1_TUNNEL, 1, 0 },
-       { NULL, NULL, 0, 0, 0 }
+       { "¹¶", "At", TR_BLOWS, -1 },
+       { "®", "Sp", TR_SPEED, -1 },
+       { "ÏÓ", "St", TR_STR, -1 },
+       { "ÃÎ", "In", TR_INT, -1 },
+       { "¸­", "Wi", TR_WIS, -1 },
+       { "´ï", "Dx", TR_DEX, -1 },
+       { "ÂÑ", "Cn", TR_CON, -1 },
+       { "̥", "Ch", TR_CHR, -1 },
+       { "±£", "Sl", TR_STEALTH, -1 },
+       { "õ", "Sr", TR_SEARCH, -1 },
+       { "ÀÖ", "If", TR_INFRA, -1 },
+       { "·¡", "Dg", TR_TUNNEL, -1 },
+       { NULL, NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_immune[] =
 {
-       { "»À", "Ac", TR2_IM_ACID, 2, 0 },
-       { "ÅÅ", "El", TR2_IM_ELEC, 2, 0 },
-       { "²Ð", "Fi", TR2_IM_FIRE, 2, 0 },
-       { "Îä", "Co", TR2_IM_COLD, 2, 0 },
-       { NULL, NULL, 0, 0, 0 }
+       { "»À", "Ac", TR_IM_ACID, -1 },
+       { "ÅÅ", "El", TR_IM_ELEC, -1 },
+       { "²Ð", "Fi", TR_IM_FIRE, -1 },
+       { "Îä", "Co", TR_IM_COLD, -1 },
+       { NULL, NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_resistance[] =
 {
-       { "»À", "Ac", TR2_RES_ACID, 2, TR2_IM_ACID },
-       { "ÅÅ", "El", TR2_RES_ELEC, 2, TR2_IM_ELEC },
-       { "²Ð", "Fi", TR2_RES_FIRE, 2, TR2_IM_FIRE },
-       { "Îä", "Co", TR2_RES_COLD, 2, TR2_IM_COLD },
-       { "ÆÇ", "Po", TR2_RES_POIS, 2, 0 },
-       { "Á®", "Li", TR2_RES_LITE, 2, 0 },
-       { "°Å", "Dk", TR2_RES_DARK, 2, 0 },
-       { "ÇË", "Sh", TR2_RES_SHARDS, 2, 0 },
-       { "ÌÕ", "Bl", TR2_RES_BLIND, 2, 0 },
-       { "Íð", "Cf", TR2_RES_CONF, 2, 0 },
-       { "¹ì", "So", TR2_RES_SOUND, 2, 0 },
-       { "¹ö", "Nt", TR2_RES_NETHER, 2, 0 },
-       { "°ø", "Nx", TR2_RES_NEXUS, 2, 0 },
-       { "ÆÙ", "Ca", TR2_RES_CHAOS, 2, 0 },
-       { "Îô", "Di", TR2_RES_DISEN, 2, 0 },
-       { "¶²", "Fe", TR2_RES_FEAR, 2, 0 },
-       { NULL, NULL, 0, 0, 0 }
+       { "»À", "Ac", TR_RES_ACID, TR_IM_ACID },
+       { "ÅÅ", "El", TR_RES_ELEC, TR_IM_ELEC },
+       { "²Ð", "Fi", TR_RES_FIRE, TR_IM_FIRE },
+       { "Îä", "Co", TR_RES_COLD, TR_IM_COLD },
+       { "ÆÇ", "Po", TR_RES_POIS, -1 },
+       { "Á®", "Li", TR_RES_LITE, -1 },
+       { "°Å", "Dk", TR_RES_DARK, -1 },
+       { "ÇË", "Sh", TR_RES_SHARDS, -1 },
+       { "ÌÕ", "Bl", TR_RES_BLIND, -1 },
+       { "Íð", "Cf", TR_RES_CONF, -1 },
+       { "¹ì", "So", TR_RES_SOUND, -1 },
+       { "¹ö", "Nt", TR_RES_NETHER, -1 },
+       { "°ø", "Nx", TR_RES_NEXUS, -1 },
+       { "ÆÙ", "Ca", TR_RES_CHAOS, -1 },
+       { "Îô", "Di", TR_RES_DISEN, -1 },
+       { "¶²", "Fe", TR_RES_FEAR, -1 },
+       { NULL, NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_misc[] =
 {
-       { "ËâÎÏ", "Ma", TR3_DEC_MANA, 3, 0 },
-       { "Åê", "Th", TR2_THROW, 2, 0 },
-       { "ȿ", "Rf", TR2_REFLECT, 2, 0 },
-       { "Ëã", "Fa", TR2_FREE_ACT, 2, 0 },
-       { "»ë", "Si", TR3_SEE_INVIS, 3, 0 },
-       { "·Ð", "Hl", TR2_HOLD_LIFE, 2, 0 },
-       { "´¶", "Esp", TR3_TELEPATHY, 3, 0 },
-       { "ÃÙ", "Sd", TR3_SLOW_DIGEST, 3, 0 },
-       { "³è", "Rg", TR3_REGEN, 3, 0 },
-       { "Éâ", "Lv", TR3_FEATHER, 3, 0 },
-       { "ÌÀ", "Lu", TR3_LITE, 3, 0 },
-       { "·Ù", "Wr", TR3_WARNING, 3, 0 },
-        { "ÇÜ", "Xm", TR3_XTRA_MIGHT, 3, 0 },
-       { "¼Í", "Xs", TR3_XTRA_SHOTS, 3, 0 },
-       { "ÅÜ", "Ag", TR3_AGGRAVATE, 3, 0 },
-       { "½Ë", "Bs", TR3_BLESSED, 3, 0 },
+       { "ËâÎÏ", "Ma", TR_DEC_MANA, -1 },
+       { "Åê", "Th", TR_THROW, -1 },
+       { "ȿ", "Rf", TR_REFLECT, -1 },
+       { "Ëã", "Fa", TR_FREE_ACT, -1 },
+       { "»ë", "Si", TR_SEE_INVIS, -1 },
+       { "·Ð", "Hl", TR_HOLD_LIFE, -1 },
+       { "´¶", "Esp", TR_TELEPATHY, -1 },
+       { "ÃÙ", "Sd", TR_SLOW_DIGEST, -1 },
+       { "³è", "Rg", TR_REGEN, -1 },
+       { "Éâ", "Lv", TR_FEATHER, -1 },
+       { "ÌÀ", "Lu", TR_LITE, -1 },
+       { "·Ù", "Wr", TR_WARNING, -1 },
+        { "ÇÜ", "Xm", TR_XTRA_MIGHT, -1 },
+       { "¼Í", "Xs", TR_XTRA_SHOTS, -1 },
+       { "ÅÜ", "Ag", TR_AGGRAVATE, -1 },
+       { "½Ë", "Bs", TR_BLESSED, -1 },
 #if 0
-       { "±Ê¼ö", "Pc", TR3_PERMA_CURSE, 3, 0 },
-       { "¼ö", "Cu", TR3_HEAVY_CURSE, 3, TR3_PERMA_CURSE },
-       { "´÷", "Ty", TR3_TY_CURSE, 3, 0 },
+       { "±Ê¼ö", "Pc", TR_PERMA_CURSE, -1 },
+       { "¼ö", "Cu", TR_HEAVY_CURSE, TR_PERMA_CURSE },
+       { "´÷", "Ty", TR_TY_CURSE, -1 },
 #endif
-       { NULL, NULL, 0, 0, 0 }
+       { NULL, NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_aura[] =
 {
-       { "±ê", "F", TR3_SH_FIRE, 3, 0 },
-       { "ÅÅ", "E", TR3_SH_ELEC, 3, 0 },
-       { "Îä", "C", TR3_SH_COLD, 3, 0 },
-       { "Ëâ", "M", TR3_NO_MAGIC, 3, 0 },
-       { "½Ö", "T", TR3_NO_TELE, 3, 0 },
-       { NULL, NULL, 0, 0, 0 }
+       { "±ê", "F", TR_SH_FIRE, -1 },
+       { "ÅÅ", "E", TR_SH_ELEC, -1 },
+       { "Îä", "C", TR_SH_COLD, -1 },
+       { "Ëâ", "M", TR_NO_MAGIC, -1 },
+       { "½Ö", "T", TR_NO_TELE, -1 },
+       { NULL, NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_brand[] =
 {
-       { "»À", "A", TR1_BRAND_ACID, 1, 0 },
-       { "ÅÅ", "E", TR1_BRAND_ELEC, 1, 0 },
-       { "¾Æ", "F", TR1_BRAND_FIRE, 1, 0 },
-       { "Åà", "Co", TR1_BRAND_COLD, 1, 0 },
-       { "ÆÇ", "P", TR1_BRAND_POIS, 1, 0 },
-       { "ÆÙ", "Ca", TR1_CHAOTIC, 1, 0 },
-       { "µÛ", "V", TR1_VAMPIRIC, 1, 0 },
-       { "¿Ì", "Q", TR1_IMPACT, 1, 0 },
-       { "ÀÚ", "S", TR1_VORPAL, 1, 0 },
-       { "Íý", "M", TR1_FORCE_WEAPON, 1, 0 },
-       { NULL, NULL, 0, 0, 0 }
+       { "»À", "A", TR_BRAND_ACID, -1 },
+       { "ÅÅ", "E", TR_BRAND_ELEC, -1 },
+       { "¾Æ", "F", TR_BRAND_FIRE, -1 },
+       { "Åà", "Co", TR_BRAND_COLD, -1 },
+       { "ÆÇ", "P", TR_BRAND_POIS, -1 },
+       { "ÆÙ", "Ca", TR_CHAOTIC, -1 },
+       { "µÛ", "V", TR_VAMPIRIC, -1 },
+       { "¿Ì", "Q", TR_IMPACT, -1 },
+       { "ÀÚ", "S", TR_VORPAL, -1 },
+       { "Íý", "M", TR_FORCE_WEAPON, -1 },
+       { NULL, NULL, 0, -1 }
+};
+
+static flag_insc_table flag_insc_kill[] =
+{
+       { "¼Ù", "*", TR_KILL_EVIL, -1 },
+       { "¿Í", "p", TR_KILL_HUMAN, -1 },
+       { "ζ", "D", TR_KILL_DRAGON, -1 },
+       { "¥ª", "o", TR_KILL_ORC, -1 },
+       { "¥È", "T", TR_KILL_TROLL, -1 },
+       { "µð", "P", TR_KILL_GIANT, -1 },
+       { "¥Ç", "U", TR_KILL_DEMON, -1 },
+       { "»à", "L", TR_KILL_UNDEAD, -1 },
+       { "ư", "Z", TR_KILL_ANIMAL, -1 },
+       { NULL, NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_slay[] =
 {
-       { "¼Ù", "*", TR1_SLAY_EVIL, 1, 0 },
-       { "¿Í", "p", TR3_SLAY_HUMAN, 3, 0 },
-       { "ζ", "D", TR1_KILL_DRAGON, 1, 0 },
-       { "ε", "d", TR1_SLAY_DRAGON, 1, TR1_KILL_DRAGON },
-       { "¥ª", "o", TR1_SLAY_ORC, 1, 0 },
-       { "¥È", "T", TR1_SLAY_TROLL, 1, 0 },
-       { "µð", "P", TR1_SLAY_GIANT, 1, 0 },
-       { "¥Ç", "U", TR1_SLAY_DEMON, 1, 0 },
-       { "»à", "L", TR1_SLAY_UNDEAD, 1, 0 },
-       { "ư", "Z", TR1_SLAY_ANIMAL, 1, 0 },
-       { NULL, NULL, 0, 0, 0 }
+       { "¼Ù", "*", TR_SLAY_EVIL, TR_KILL_EVIL },
+       { "¿Í", "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
+       { "ε", "d", TR_SLAY_DRAGON, TR_KILL_DRAGON },
+       { "¥ª", "o", TR_SLAY_ORC, TR_KILL_ORC },
+       { "¥È", "T", TR_SLAY_TROLL, TR_KILL_TROLL },
+       { "µð", "P", TR_SLAY_GIANT, TR_KILL_GIANT },
+       { "¥Ç", "U", TR_SLAY_DEMON, TR_KILL_DEMON },
+       { "»à", "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
+       { "ư", "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
+       { NULL, NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_sust[] =
 {
-       { "ÏÓ", "St", TR2_SUST_STR, 2, 0 },
-       { "ÃÎ", "In", TR2_SUST_INT, 2, 0 },
-       { "¸­", "Wi", TR2_SUST_WIS, 2, 0 },
-       { "´ï", "Dx", TR2_SUST_DEX, 2, 0 },
-       { "ÂÑ", "Cn", TR2_SUST_CON, 2, 0 },
-       { "̥", "Ch", TR2_SUST_CHR, 2, 0 },
-       { NULL, NULL, 0, 0, 0 }
+       { "ÏÓ", "St", TR_SUST_STR, -1 },
+       { "ÃÎ", "In", TR_SUST_INT, -1 },
+       { "¸­", "Wi", TR_SUST_WIS, -1 },
+       { "´ï", "Dx", TR_SUST_DEX, -1 },
+       { "ÂÑ", "Cn", TR_SUST_CON, -1 },
+       { "̥", "Ch", TR_SUST_CHR, -1 },
+       { NULL, NULL, 0, -1 }
 };
 
 #else
 static flag_insc_table flag_insc_plus[] =
 {
-       { "At", TR1_BLOWS, 1, 0 },
-       { "Sp", TR1_SPEED, 1, 0 },
-       { "St", TR1_STR, 1, 0 },
-       { "In", TR1_INT, 1, 0 },
-       { "Wi", TR1_WIS, 1, 0 },
-       { "Dx", TR1_DEX, 1, 0 },
-       { "Cn", TR1_CON, 1, 0 },
-       { "Ch", TR1_CHR, 1, 0 },
-       { "Sl", TR1_STEALTH, 1, 0 },
-       { "Sr", TR1_SEARCH, 1, 0 },
-       { "If", TR1_INFRA, 1, 0 },
-       { "Dg", TR1_TUNNEL, 1, 0 },
-       { NULL, 0, 0, 0 }
+       { "At", TR_BLOWS, -1 },
+       { "Sp", TR_SPEED, -1 },
+       { "St", TR_STR, -1 },
+       { "In", TR_INT, -1 },
+       { "Wi", TR_WIS, -1 },
+       { "Dx", TR_DEX, -1 },
+       { "Cn", TR_CON, -1 },
+       { "Ch", TR_CHR, -1 },
+       { "Sl", TR_STEALTH, -1 },
+       { "Sr", TR_SEARCH, -1 },
+       { "If", TR_INFRA, -1 },
+       { "Dg", TR_TUNNEL, -1 },
+       { NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_immune[] =
 {
-       { "Ac", TR2_IM_ACID, 2, 0 },
-       { "El", TR2_IM_ELEC, 2, 0 },
-       { "Fi", TR2_IM_FIRE, 2, 0 },
-       { "Co", TR2_IM_COLD, 2, 0 },
-       { NULL, 0, 0, 0 }
+       { "Ac", TR_IM_ACID, -1 },
+       { "El", TR_IM_ELEC, -1 },
+       { "Fi", TR_IM_FIRE, -1 },
+       { "Co", TR_IM_COLD, -1 },
+       { NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_resistance[] =
 {
-       { "Ac", TR2_RES_ACID, 2, TR2_IM_ACID },
-       { "El", TR2_RES_ELEC, 2, TR2_IM_ELEC },
-       { "Fi", TR2_RES_FIRE, 2, TR2_IM_FIRE },
-       { "Co", TR2_RES_COLD, 2, TR2_IM_COLD },
-       { "Po", TR2_RES_POIS, 2, 0 },
-       { "Li", TR2_RES_LITE, 2, 0 },
-       { "Dk", TR2_RES_DARK, 2, 0 },
-       { "Sh", TR2_RES_SHARDS, 2, 0 },
-       { "Bl", TR2_RES_BLIND, 2, 0 },
-       { "Cf", TR2_RES_CONF, 2, 0 },
-       { "So", TR2_RES_SOUND, 2, 0 },
-       { "Nt", TR2_RES_NETHER, 2, 0 },
-       { "Nx", TR2_RES_NEXUS, 2, 0 },
-       { "Ca", TR2_RES_CHAOS, 2, 0 },
-       { "Di", TR2_RES_DISEN, 2, 0 },
-       { "Fe", TR2_RES_FEAR, 2, 0 },
-       { NULL, 0, 0, 0 }
+       { "Ac", TR_RES_ACID, TR_IM_ACID },
+       { "El", TR_RES_ELEC, TR_IM_ELEC },
+       { "Fi", TR_RES_FIRE, TR_IM_FIRE },
+       { "Co", TR_RES_COLD, TR_IM_COLD },
+       { "Po", TR_RES_POIS, -1 },
+       { "Li", TR_RES_LITE, -1 },
+       { "Dk", TR_RES_DARK, -1 },
+       { "Sh", TR_RES_SHARDS, -1 },
+       { "Bl", TR_RES_BLIND, -1 },
+       { "Cf", TR_RES_CONF, -1 },
+       { "So", TR_RES_SOUND, -1 },
+       { "Nt", TR_RES_NETHER, -1 },
+       { "Nx", TR_RES_NEXUS, -1 },
+       { "Ca", TR_RES_CHAOS, -1 },
+       { "Di", TR_RES_DISEN, -1 },
+       { "Fe", TR_RES_FEAR, -1 },
+       { NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_misc[] =
 {
-       { "Ma", TR3_DEC_MANA, 3, 0 },
-       { "Th", TR2_THROW, 2, 0 },
-       { "Rf", TR2_REFLECT, 2, 0 },
-       { "Fa", TR2_FREE_ACT, 2, 0 },
-       { "Si", TR3_SEE_INVIS, 3, 0 },
-       { "Hl", TR2_HOLD_LIFE, 2, 0 },
-       { "Esp", TR3_TELEPATHY, 3, 0 },
-       { "Sd", TR3_SLOW_DIGEST, 3, 0 },
-       { "Rg", TR3_REGEN, 3, 0 },
-       { "Lv", TR3_FEATHER, 3, 0 },
-       { "Lu", TR3_LITE, 3, 0 },
-       { "Wr", TR3_WARNING, 3, 0 },
-       { "Xm", TR3_XTRA_MIGHT, 3, 0 },
-       { "Xs", TR3_XTRA_SHOTS, 3, 0 },
-       { "Ag", TR3_AGGRAVATE, 3, 0 },
-       { "Bs", TR3_BLESSED, 3, 0 },
+       { "Ma", TR_DEC_MANA, -1 },
+       { "Th", TR_THROW, -1 },
+       { "Rf", TR_REFLECT, -1 },
+       { "Fa", TR_FREE_ACT, -1 },
+       { "Si", TR_SEE_INVIS, -1 },
+       { "Hl", TR_HOLD_LIFE, -1 },
+       { "Esp", TR_TELEPATHY, -1 },
+       { "Sd", TR_SLOW_DIGEST, -1 },
+       { "Rg", TR_REGEN, -1 },
+       { "Lv", TR_FEATHER, -1 },
+       { "Lu", TR_LITE, -1 },
+       { "Wr", TR_WARNING, -1 },
+       { "Xm", TR_XTRA_MIGHT, -1 },
+       { "Xs", TR_XTRA_SHOTS, -1 },
+       { "Ag", TR_AGGRAVATE, -1 },
+       { "Bs", TR_BLESSED, -1 },
 #if 0
-       { "Pc", TR3_PERMA_CURSE, 3, 0 },
-       { "Cu", TR3_HEAVY_CURSE, 3, TR3_PERMA_CURSE },
-       { "Ty", TR3_TY_CURSE, 3, 0 },
+       { "Pc", TR_PERMA_CURSE, -1 },
+       { "Cu", TR_HEAVY_CURSE, TR_PERMA_CURSE },
+       { "Ty", TR_TY_CURSE, -1 },
 #endif
 #if 0
-       { "De", TR3_DRAIN_EXP, 3, 0 },
+       { "De", TR_DRAIN_EXP, -1 },
 #endif
-       { NULL, 0, 0, 0 }
+       { NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_aura[] =
 {
-       { "F", TR3_SH_FIRE, 3, 0 },
-       { "E", TR3_SH_ELEC, 3, 0 },
-       { "C", TR3_SH_COLD, 3, 0 },
-       { "M", TR3_NO_MAGIC, 3, 0 },
-       { "T", TR3_NO_TELE, 3, 0 },
-       { NULL, 0, 0, 0 }
+       { "F", TR_SH_FIRE, -1 },
+       { "E", TR_SH_ELEC, -1 },
+       { "C", TR_SH_COLD, -1 },
+       { "M", TR_NO_MAGIC, -1 },
+       { "T", TR_NO_TELE, -1 },
+       { NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_brand[] =
 {
-       { "A", TR1_BRAND_ACID, 1, 0 },
-       { "E", TR1_BRAND_ELEC, 1, 0 },
-       { "F", TR1_BRAND_FIRE, 1, 0 },
-       { "Co", TR1_BRAND_COLD, 1, 0 },
-       { "P", TR1_BRAND_POIS, 1, 0 },
-       { "Ca", TR1_CHAOTIC, 1, 0 },
-       { "V", TR1_VAMPIRIC, 1, 0 },
-       { "Q", TR1_IMPACT, 1, 0 },
-       { "S", TR1_VORPAL, 1, 0 },
-       { "M", TR1_FORCE_WEAPON, 1, 0 },
-       { NULL, 0, 0, 0 }
+       { "A", TR_BRAND_ACID, -1 },
+       { "E", TR_BRAND_ELEC, -1 },
+       { "F", TR_BRAND_FIRE, -1 },
+       { "Co", TR_BRAND_COLD, -1 },
+       { "P", TR_BRAND_POIS, -1 },
+       { "Ca", TR_CHAOTIC, -1 },
+       { "V", TR_VAMPIRIC, -1 },
+       { "Q", TR_IMPACT, -1 },
+       { "S", TR_VORPAL, -1 },
+       { "M", TR_FORCE_WEAPON, -1 },
+       { NULL, 0, -1 }
+};
+
+static flag_insc_table flag_insc_kill[] =
+{
+       { "*", TR_KILL_EVIL, -1 },
+       { "p", TR_KILL_HUMAN, -1 },
+       { "D", TR_KILL_DRAGON, -1 },
+       { "o", TR_KILL_ORC, -1 },
+       { "T", TR_KILL_TROLL, -1 },
+       { "P", TR_KILL_GIANT, -1 },
+       { "U", TR_KILL_DEMON, -1 },
+       { "L", TR_KILL_UNDEAD, -1 },
+       { "Z", TR_KILL_ANIMAL, -1 },
+       { NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_slay[] =
 {
-       { "*", TR1_SLAY_EVIL, 1, 0 },
-       { "p", TR3_SLAY_HUMAN, 3, 0 },
-       { "D", TR1_KILL_DRAGON, 1, 0 },
-       { "d", TR1_SLAY_DRAGON, 1, TR1_KILL_DRAGON },
-       { "o", TR1_SLAY_ORC, 1, 0 },
-       { "T", TR1_SLAY_TROLL, 1, 0 },
-       { "P", TR1_SLAY_GIANT, 1, 0 },
-       { "U", TR1_SLAY_DEMON, 1, 0 },
-       { "L", TR1_SLAY_UNDEAD, 1, 0 },
-       { "Z", TR1_SLAY_ANIMAL, 1, 0 },
-       { NULL, 0, 0, 0 }
+       { "*", TR_SLAY_EVIL, TR_KILL_EVIL },
+       { "p", TR_SLAY_HUMAN, TR_KILL_HUMAN },
+       { "d", TR_SLAY_DRAGON, TR_KILL_DRAGON },
+       { "o", TR_SLAY_ORC, TR_KILL_ORC },
+       { "T", TR_SLAY_TROLL, TR_KILL_TROLL },
+       { "P", TR_SLAY_GIANT, TR_KILL_GIANT },
+       { "U", TR_SLAY_DEMON, TR_KILL_DEMON },
+       { "L", TR_SLAY_UNDEAD, TR_KILL_UNDEAD },
+       { "Z", TR_SLAY_ANIMAL, TR_KILL_ANIMAL },
+       { NULL, 0, -1 }
 };
 
 static flag_insc_table flag_insc_sust[] =
 {
-       { "St", TR2_SUST_STR, 2, 0 },
-       { "In", TR2_SUST_INT, 2, 0 },
-       { "Wi", TR2_SUST_WIS, 2, 0 },
-       { "Dx", TR2_SUST_DEX, 2, 0 },
-       { "Cn", TR2_SUST_CON, 2, 0 },
-       { "Ch", TR2_SUST_CHR, 2, 0 },
-       { NULL, 0, 0, 0 }
+       { "St", TR_SUST_STR, -1 },
+       { "In", TR_SUST_INT, -1 },
+       { "Wi", TR_SUST_WIS, -1 },
+       { "Dx", TR_SUST_DEX, -1 },
+       { "Cn", TR_SUST_CON, -1 },
+       { "Ch", TR_SUST_CHR, -1 },
+       { NULL, 0, -1 }
 };
 #endif
 
 #define ADD_INSC(STR) (void)(strcat(ptr, (STR)), ptr += strlen(STR))
 
-static char *inscribe_flags_aux(flag_insc_table *f_ptr, u32b flag[], bool kanji, char *ptr)
+static char *inscribe_flags_aux(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE], bool kanji, char *ptr)
 {
-       while (f_ptr->num)
+       while (fi_ptr->english)
        {
-               if ((flag[f_ptr->num-1] & f_ptr->flag) &&
-                   !(flag[f_ptr->num-1] & f_ptr->except_flag))
+               if (have_flag(flgs, fi_ptr->flag) &&
+                   (fi_ptr->except_flag == -1 || !have_flag(flgs, fi_ptr->except_flag)))
 #ifdef JP
-                       ADD_INSC(kanji ? f_ptr->japanese : f_ptr->english);
+                       ADD_INSC(kanji ? fi_ptr->japanese : fi_ptr->english);
 #else
-                       ADD_INSC(f_ptr->english);
+                       ADD_INSC(fi_ptr->english);
 #endif
-               f_ptr ++;
+               fi_ptr++;
        }
 
        return ptr;
 }
 
-static bool have_flag_of(flag_insc_table *f_ptr, u32b flag[])
+static bool have_flag_of(flag_insc_table *fi_ptr, u32b flgs[TR_FLAG_SIZE])
 {
-       while (f_ptr->num)
+       while (fi_ptr->english)
        {
-               if ((flag[f_ptr->num-1] & f_ptr->flag) &&
-                   !(flag[f_ptr->num-1] & f_ptr->except_flag))
+               if (have_flag(flgs, fi_ptr->flag) &&
+                  (fi_ptr->except_flag == -1 || !have_flag(flgs, fi_ptr->except_flag)))
                        return (TRUE);
-               f_ptr++;
+               fi_ptr++;
        }
 
        return (FALSE);
@@ -1574,14 +1599,14 @@ s16b inscribe_flags(object_type *o_ptr, cptr out_val)
 
        bool kanji = FALSE;
        bool all = TRUE;
-       u32b flag[3];
+       u32b flgs[TR_FLAG_SIZE];
 
        /* not fully identified */
        if (!(o_ptr->ident & IDENT_MENTAL))
                return quark_add(out_val);
 
        /* Extract the flags */
-       object_flags(o_ptr, &flag[0], &flag[1], &flag[2]);
+       object_flags(o_ptr, flgs);
 
 
        *buff = '\0';
@@ -1618,42 +1643,40 @@ s16b inscribe_flags(object_type *o_ptr, cptr out_val)
                        if (!all)
                        {
                                object_kind *k_ptr = &k_info[o_ptr->k_idx];
+                               int j;
                                
                                /* Base object */
-                               flag[0] &= ~k_ptr->flags1;
-                               flag[1] &= ~k_ptr->flags2;
-                               flag[2] &= ~k_ptr->flags3;
+                               for (j = 0; j < TR_FLAG_SIZE; j++)
+                                       flgs[j] &= ~k_ptr->flags[j];
 
                                if (o_ptr->name1)
                                {
                                        artifact_type *a_ptr = &a_info[o_ptr->name1];
                                        
-                                       flag[0] &= ~a_ptr->flags1;
-                                       flag[1] &= ~a_ptr->flags2;
-                                       flag[2] &= ~(a_ptr->flags3 & ~TR3_TELEPORT);
+                                       for (j = 0; j < TR_FLAG_SIZE; j++)
+                                               flgs[j] &= ~a_ptr->flags[j];
                                }
 
                                if (o_ptr->name2)
                                {
                                        ego_item_type *e_ptr = &e_info[o_ptr->name2];
                                        
-                                       flag[0] &= ~e_ptr->flags1;
-                                       flag[1] &= ~e_ptr->flags2;
-                                       flag[2] &= ~(e_ptr->flags3 & ~TR3_TELEPORT);
+                                       for (j = 0; j < TR_FLAG_SIZE; j++)
+                                               flgs[j] &= ~e_ptr->flags[j];
                                }
                        }
 
 
                        /* Plusses */
-                       if (have_flag_of(flag_insc_plus, flag))
+                       if (have_flag_of(flag_insc_plus, flgs))
                        {
                                if (kanji)
                                        ADD_INSC("+");
                        }
-                       ptr = inscribe_flags_aux(flag_insc_plus, flag, kanji, ptr);
+                       ptr = inscribe_flags_aux(flag_insc_plus, flgs, kanji, ptr);
 
                        /* Immunity */
-                       if (have_flag_of(flag_insc_immune, flag))
+                       if (have_flag_of(flag_insc_immune, flgs))
                        {
                                if (!kanji && ptr != prev_ptr)
                                {
@@ -1662,10 +1685,10 @@ s16b inscribe_flags(object_type *o_ptr, cptr out_val)
                                }
                                ADD_INSC("*");
                        }
-                       ptr = inscribe_flags_aux(flag_insc_immune, flag, kanji, ptr);
+                       ptr = inscribe_flags_aux(flag_insc_immune, flgs, kanji, ptr);
 
                        /* Resistance */
-                       if (have_flag_of(flag_insc_resistance, flag))
+                       if (have_flag_of(flag_insc_resistance, flgs))
                        {
                                if (kanji)
                                        ADD_INSC("r");
@@ -1675,10 +1698,10 @@ s16b inscribe_flags(object_type *o_ptr, cptr out_val)
                                        prev_ptr = ptr;
                                }
                        }
-                       ptr = inscribe_flags_aux(flag_insc_resistance, flag, kanji, ptr);
+                       ptr = inscribe_flags_aux(flag_insc_resistance, flgs, kanji, ptr);
 
                        /* Misc Ability */
-                       if (have_flag_of(flag_insc_misc, flag))
+                       if (have_flag_of(flag_insc_misc, flgs))
                        {
                                if (ptr != prev_ptr)
                                {
@@ -1686,37 +1709,42 @@ s16b inscribe_flags(object_type *o_ptr, cptr out_val)
                                        prev_ptr = ptr;
                                }
                        }
-                       ptr = inscribe_flags_aux(flag_insc_misc, flag, kanji, ptr);
+                       ptr = inscribe_flags_aux(flag_insc_misc, flgs, kanji, ptr);
 
                        /* Aura */
-                       if (have_flag_of(flag_insc_aura, flag))
+                       if (have_flag_of(flag_insc_aura, flgs))
                        {
                                ADD_INSC("[");
                        }
-                       ptr = inscribe_flags_aux(flag_insc_aura, flag, kanji, ptr);
+                       ptr = inscribe_flags_aux(flag_insc_aura, flgs, kanji, ptr);
 
                        /* Brand Weapon */
-                       if (have_flag_of(flag_insc_brand, flag))
+                       if (have_flag_of(flag_insc_brand, flgs))
                                ADD_INSC("|");
-                       ptr = inscribe_flags_aux(flag_insc_brand, flag, kanji, ptr);
+                       ptr = inscribe_flags_aux(flag_insc_brand, flgs, kanji, ptr);
+
+                       /* Kill Weapon */
+                       if (have_flag_of(flag_insc_kill, flgs))
+                               ADD_INSC("/X");
+                       ptr = inscribe_flags_aux(flag_insc_kill, flgs, kanji, ptr);
 
                        /* Slay Weapon */
-                       if (have_flag_of(flag_insc_slay, flag))
+                       if (have_flag_of(flag_insc_slay, flgs))
                                ADD_INSC("/");
-                       ptr = inscribe_flags_aux(flag_insc_slay, flag, kanji, ptr);
+                       ptr = inscribe_flags_aux(flag_insc_slay, flgs, kanji, ptr);
 
                        /* Random Teleport */
-                       if (flag[2] & (TR3_TELEPORT))
+                       if (have_flag(flgs, TR_TELEPORT))
                        {
                                ADD_INSC(".");
                        }
 
                        /* sustain */
-                       if (have_flag_of(flag_insc_sust, flag))
+                       if (have_flag_of(flag_insc_sust, flgs))
                        {
                                ADD_INSC("(");
                        }
-                       ptr = inscribe_flags_aux(flag_insc_sust, flag, kanji, ptr);
+                       ptr = inscribe_flags_aux(flag_insc_sust, flgs, kanji, ptr);
 
                        if (ptr == start_percent)
                                ADD_INSC(" ");
index 65e07a9..2157ecf 100644 (file)
@@ -4867,7 +4867,7 @@ static void do_cmd_knowledge_inven_aux(FILE *fff, object_type *o_ptr,
                                       int *j, byte tval, char *where)
 {
   char o_name[MAX_NLEN];
-  u32b    f[3];
+  u32b flgs[TR_FLAG_SIZE];
 
   if (!o_ptr->k_idx)return;
   if (o_ptr->tval != tval)return;
@@ -4907,159 +4907,159 @@ static void do_cmd_knowledge_inven_aux(FILE *fff, object_type *o_ptr,
 #endif
        }
       else {
-       object_flags_known(o_ptr, &f[0], &f[1], &f[2]);
+       object_flags_known(o_ptr, flgs);
       
 #ifdef JP
-       if (f[1] & TR2_IM_ACID) fprintf(fff,"¡ö");
-       else if (f[1] & TR2_RES_ACID) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_IM_ACID)) fprintf(fff,"¡ö");
+       else if (have_flag(flgs, TR_RES_ACID)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
 
-       if (f[1] & TR2_IM_ELEC) fprintf(fff,"¡ö");
-       else if (f[1] & TR2_RES_ELEC) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_IM_ELEC)) fprintf(fff,"¡ö");
+       else if (have_flag(flgs, TR_RES_ELEC)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
 
-       if (f[1] & TR2_IM_FIRE) fprintf(fff,"¡ö");
-       else if (f[1] & TR2_RES_FIRE) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_IM_FIRE)) fprintf(fff,"¡ö");
+       else if (have_flag(flgs, TR_RES_FIRE)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
 
-       if (f[1] & TR2_IM_COLD) fprintf(fff,"¡ö");
-       else if (f[1] & TR2_RES_COLD) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_IM_COLD)) fprintf(fff,"¡ö");
+       else if (have_flag(flgs, TR_RES_COLD)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_POIS) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_POIS)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_LITE) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_LITE)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_DARK) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_DARK)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_SHARDS) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_SHARDS)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_SOUND) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_SOUND)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_NETHER) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_NETHER)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_NEXUS) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_NEXUS)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_CHAOS) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_CHAOS)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_DISEN) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_DISEN)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
        fprintf(fff," ");
        
-       if (f[1] & TR2_RES_BLIND) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_BLIND)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_FEAR) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_FEAR)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_RES_CONF) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_RES_CONF)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_FREE_ACT) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_FREE_ACT)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[2] & TR3_SEE_INVIS) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_SEE_INVIS)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
        
-       if (f[1] & TR2_HOLD_LIFE) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_HOLD_LIFE)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
 
-       if (f[2] & TR3_TELEPATHY) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_TELEPATHY)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
 
-       if (f[2] & TR3_SLOW_DIGEST) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_SLOW_DIGEST)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
 
 
-       if (f[2] & TR3_REGEN) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_REGEN)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
 
-       if (f[2] & TR3_FEATHER) fprintf(fff,"¡Ü");
+       if (have_flag(flgs, TR_FEATHER)) fprintf(fff,"¡Ü");
        else fprintf(fff,"¡¦");
 #else
-       if (f[1] & TR2_IM_ACID) fprintf(fff,"* ");
-       else if (f[1] & TR2_RES_ACID) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_IM_ACID)) fprintf(fff,"* ");
+       else if (have_flag(flgs, TR_RES_ACID)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
 
-       if (f[1] & TR2_IM_ELEC) fprintf(fff,"* ");
-       else if (f[1] & TR2_RES_ELEC) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_IM_ELEC)) fprintf(fff,"* ");
+       else if (have_flag(flgs, TR_RES_ELEC)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
 
-       if (f[1] & TR2_IM_FIRE) fprintf(fff,"* ");
-       else if (f[1] & TR2_RES_FIRE) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_IM_FIRE)) fprintf(fff,"* ");
+       else if (have_flag(flgs, TR_RES_FIRE)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
 
-       if (f[1] & TR2_IM_COLD) fprintf(fff,"* ");
-       else if (f[1] & TR2_RES_COLD) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_IM_COLD)) fprintf(fff,"* ");
+       else if (have_flag(flgs, TR_RES_COLD)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_POIS) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_POIS)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_LITE) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_LITE)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_DARK) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_DARK)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_SHARDS) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_SHARDS)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_SOUND) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_SOUND)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_NETHER) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_NETHER)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_NEXUS) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_NEXUS)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_CHAOS) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_CHAOS)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_DISEN) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_DISEN)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
        fprintf(fff," ");
        
-       if (f[1] & TR2_RES_BLIND) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_BLIND)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_FEAR) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_FEAR)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_RES_CONF) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_RES_CONF)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_FREE_ACT) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_FREE_ACT)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[2] & TR3_SEE_INVIS) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_SEE_INVIS)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
        
-       if (f[1] & TR2_HOLD_LIFE) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_HOLD_LIFE)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
 
-       if (f[2] & TR3_TELEPATHY) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_TELEPATHY)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
 
-       if (f[2] & TR3_SLOW_DIGEST) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_SLOW_DIGEST)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
 
 
-       if (f[2] & TR3_REGEN) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_REGEN)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
 
-       if (f[2] & TR3_FEATHER) fprintf(fff,"+ ");
+       if (have_flag(flgs, TR_FEATHER)) fprintf(fff,"+ ");
        else fprintf(fff,". ");
 #endif 
        fprintf(fff,"\n");
index 0055aad..7d55064 100644 (file)
@@ -3712,16 +3712,16 @@ void do_cmd_zap_rod(void)
  */
 static bool item_tester_hook_activate(object_type *o_ptr)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        /* Not known */
        if (!object_known_p(o_ptr)) return (FALSE);
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Check activation flag */
-       if (f3 & (TR3_ACTIVATE)) return (TRUE);
+       if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
 
        if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
        {
@@ -5496,14 +5496,15 @@ msg_print("
 #else
                                msg_print("Your scythe glows brightly!");
 #endif
-                               o_ptr->art_flags1 = a_info[ART_BLOOD].flags1;
-                               o_ptr->art_flags2 = a_info[ART_BLOOD].flags2;
+                               for (i = 0; i < TR_FLAG_SIZE; i++)
+                                       o_ptr->art_flags[i] = a_info[ART_BLOOD].flags[i];
+
                                dummy = randint1(2)+randint1(2);
                                for (i = 0; i < dummy; i++)
                                {
                                        int flag = randint0(19);
-                                       if (flag == 18) o_ptr->art_flags3 |= TR3_SLAY_HUMAN;
-                                       else o_ptr->art_flags1 |= (TR1_CHAOTIC << flag);
+                                       if (flag == 18) add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
+                                       else add_flag(o_ptr->art_flags, TR_CHAOTIC + flag);
                                }
                                dummy = randint1(2);
                                for (i = 0; i < dummy; i++)
@@ -5512,8 +5513,8 @@ msg_print("
                                for (i = 0; i < dummy; i++)
                                {
                                        int tmp = randint0(11);
-                                       if (tmp < 6) o_ptr->art_flags1 |= (TR1_STR << tmp);
-                                       else o_ptr->art_flags1 |= (TR1_STEALTH << (tmp - 6));
+                                       if (tmp < 6) add_flag(o_ptr->art_flags, TR_STR + tmp);
+                                       else add_flag(o_ptr->art_flags, TR_STEALTH + tmp - 6);
                                }
                                o_ptr->timeout = 3333;
                                if (p_ptr->prace == RACE_ANDROID) calc_android_exp();
@@ -6403,7 +6404,7 @@ void do_cmd_activate(void)
  */
 static bool item_tester_hook_use(object_type *o_ptr)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        /* Ammo */
        if (o_ptr->tval == p_ptr->tval_ammo)
@@ -6436,10 +6437,10 @@ static bool item_tester_hook_use(object_type *o_ptr)
                                if (&inventory[i] == o_ptr)
                                {
                                        /* Extract the flags */
-                                       object_flags(o_ptr, &f1, &f2, &f3);
+                                       object_flags(o_ptr, flgs);
 
                                        /* Check activation flag */
-                                       if (f3 & TR3_ACTIVATE) return (TRUE);
+                                       if (have_flag(flgs, TR_ACTIVATE)) return (TRUE);
                                }
                        }
                }
index 5678c12..6df4f31 100644 (file)
 
 /* Savefile version for Hengband 1.1.1 and later */
 #define H_VER_MAJOR 1
-#define H_VER_MINOR 1
-#define H_VER_PATCH 1
+#define H_VER_MINOR 3
+#define H_VER_PATCH 0
 #define H_VER_EXTRA 0
 
 /* Added for ZAngband */
 #define FAKE_VERSION   0
 #define FAKE_VER_MAJOR 11
-#define FAKE_VER_MINOR 1
-#define FAKE_VER_PATCH 1
+#define FAKE_VER_MINOR 3
+#define FAKE_VER_PATCH 0
 
 #define ANGBAND_2_8_1
 #define ZANGBAND
  * powerful as actually granting resistance/immunity to the wearer.
  */
 
-#define TR1_STR                 0x00000001L     /* STR += "pval" */
-#define TR1_INT                 0x00000002L     /* INT += "pval" */
-#define TR1_WIS                 0x00000004L     /* WIS += "pval" */
-#define TR1_DEX                 0x00000008L     /* DEX += "pval" */
-#define TR1_CON                 0x00000010L     /* CON += "pval" */
-#define TR1_CHR                 0x00000020L     /* CHR += "pval" */
-#define TR1_MAGIC_MASTERY       0x00000040L     /* Later */
-#define TR1_FORCE_WEAPON        0x00000080L     /* Later */
-#define TR1_STEALTH             0x00000100L     /* Stealth += "pval" */
-#define TR1_SEARCH              0x00000200L     /* Search += "pval" */
-#define TR1_INFRA               0x00000400L     /* Infra += "pval" */
-#define TR1_TUNNEL              0x00000800L     /* Tunnel += "pval" */
-#define TR1_SPEED               0x00001000L     /* Speed += "pval" */
-#define TR1_BLOWS               0x00002000L     /* Blows += "pval" */
-#define TR1_CHAOTIC             0x00004000L
-#define TR1_VAMPIRIC            0x00008000L
-#define TR1_SLAY_ANIMAL         0x00010000L
-#define TR1_SLAY_EVIL           0x00020000L
-#define TR1_SLAY_UNDEAD         0x00040000L
-#define TR1_SLAY_DEMON          0x00080000L
-#define TR1_SLAY_ORC            0x00100000L
-#define TR1_SLAY_TROLL          0x00200000L
-#define TR1_SLAY_GIANT          0x00400000L
-#define TR1_SLAY_DRAGON         0x00800000L
-#define TR1_KILL_DRAGON         0x01000000L     /* Execute Dragon */
-#define TR1_VORPAL              0x02000000L     /* Later */
-#define TR1_IMPACT              0x04000000L     /* Cause Earthquakes */
-#define TR1_BRAND_POIS          0x08000000L
-#define TR1_BRAND_ACID          0x10000000L
-#define TR1_BRAND_ELEC          0x20000000L
-#define TR1_BRAND_FIRE          0x40000000L
-#define TR1_BRAND_COLD          0x80000000L
-
-#define TR2_SUST_STR            0x00000001L
-#define TR2_SUST_INT            0x00000002L
-#define TR2_SUST_WIS            0x00000004L
-#define TR2_SUST_DEX            0x00000008L
-#define TR2_SUST_CON            0x00000010L
-#define TR2_SUST_CHR            0x00000020L
-#define TR2_RIDING              0x00000040L     /* Later */
-#define TR2_XXX2                0x00000080L     /* Later */
-#define TR2_IM_ACID             0x00000100L
-#define TR2_IM_ELEC             0x00000200L
-#define TR2_IM_FIRE             0x00000400L
-#define TR2_IM_COLD             0x00000800L
-#define TR2_THROW               0x00001000L     /* Later */
-#define TR2_REFLECT             0x00002000L     /* Reflect 'bolts' */
-#define TR2_FREE_ACT            0x00004000L     /* Free Action */
-#define TR2_HOLD_LIFE           0x00008000L     /* Hold Life */
-#define TR2_RES_ACID            0x00010000L
-#define TR2_RES_ELEC            0x00020000L
-#define TR2_RES_FIRE            0x00040000L
-#define TR2_RES_COLD            0x00080000L
-#define TR2_RES_POIS            0x00100000L
-#define TR2_RES_FEAR            0x00200000L     /* Added for Zangband */
-#define TR2_RES_LITE            0x00400000L
-#define TR2_RES_DARK            0x00800000L
-#define TR2_RES_BLIND           0x01000000L
-#define TR2_RES_CONF            0x02000000L
-#define TR2_RES_SOUND           0x04000000L
-#define TR2_RES_SHARDS          0x08000000L
-#define TR2_RES_NETHER          0x10000000L
-#define TR2_RES_NEXUS           0x20000000L
-#define TR2_RES_CHAOS           0x40000000L
-#define TR2_RES_DISEN           0x80000000L
-
-
-#define TR3_SH_FIRE             0x00000001L     /* Immolation (Fire) */
-#define TR3_SH_ELEC             0x00000002L     /* Electric Sheath */
-#define TR3_SLAY_HUMAN          0x00000004L     /* Slay human */
-#define TR3_SH_COLD             0x00000008L     /* cold aura */
-#define TR3_NO_TELE             0x00000010L     /* Anti-teleportation */
-#define TR3_NO_MAGIC            0x00000020L     /* Anti-magic */
-#define TR3_DEC_MANA            0x00000040L     /* ??? */
-#define TR3_TY_CURSE            0x00000080L     /* The Ancient Curse */
-#define TR3_WARNING             0x00000100L     /* Warning */
-#define TR3_HIDE_TYPE           0x00000200L     /* Hide "pval" description */
-#define TR3_SHOW_MODS           0x00000400L     /* Always show Tohit/Todam */
-#define TR3_XXX1                0x00000800L     /* XXX1 */
-#define TR3_FEATHER             0x00001000L     /* Feather Falling */
-#define TR3_LITE                0x00002000L     /* Permanent Light */
-#define TR3_SEE_INVIS           0x00004000L     /* See Invisible */
-#define TR3_TELEPATHY           0x00008000L     /* Telepathy */
-#define TR3_SLOW_DIGEST         0x00010000L     /* Item slows down digestion */
-#define TR3_REGEN               0x00020000L     /* Item induces regeneration */
-#define TR3_XTRA_MIGHT          0x00040000L     /* Bows get extra multiplier */
-#define TR3_XTRA_SHOTS          0x00080000L     /* Bows get extra shots */
-#define TR3_IGNORE_ACID         0x00100000L     /* Item ignores Acid Damage */
-#define TR3_IGNORE_ELEC         0x00200000L     /* Item ignores Elec Damage */
-#define TR3_IGNORE_FIRE         0x00400000L     /* Item ignores Fire Damage */
-#define TR3_IGNORE_COLD         0x00800000L     /* Item ignores Cold Damage */
-#define TR3_ACTIVATE            0x01000000L     /* Item can be activated */
-#define TR3_DRAIN_EXP           0x02000000L     /* Item drains Experience */
-#define TR3_TELEPORT            0x04000000L     /* Item teleports player */
-#define TR3_AGGRAVATE           0x08000000L     /* Item aggravates monsters */
-#define TR3_BLESSED             0x10000000L     /* Item is Blessed */
+#define have_flag(ARRAY, INDEX) !!((ARRAY)[(INDEX)/32] & (1L << ((INDEX)%32)))
+#define add_flag(ARRAY, INDEX) ((ARRAY)[(INDEX)/32] |= (1L << ((INDEX)%32)))
+#define remove_flag(ARRAY, INDEX) ((ARRAY)[(INDEX)/32] &= ~(1L << ((INDEX)%32)))
+#define is_pval_flag(INDEX) ((TR_STR <= (INDEX) && (INDEX) <= TR_MAGIC_MASTERY) || (TR_STEALTH <= (INDEX) && (INDEX) <= TR_BLOWS))
+#define have_pval_flags(ARRAY) !!((ARRAY)[0] & (0x00003f7f))
+
+
+#define TR_STR                 0      /* STR += "pval" */
+#define TR_INT                 1      /* INT += "pval" */
+#define TR_WIS                 2      /* WIS += "pval" */
+#define TR_DEX                 3      /* DEX += "pval" */
+#define TR_CON                 4      /* CON += "pval" */
+#define TR_CHR                 5      /* CHR += "pval" */
+#define TR_MAGIC_MASTERY       6      /* Later */
+#define TR_FORCE_WEAPON        7      /* Later */
+#define TR_STEALTH             8      /* Stealth += "pval" */
+#define TR_SEARCH              9      /* Search += "pval" */
+#define TR_INFRA               10     /* Infra += "pval" */
+#define TR_TUNNEL              11     /* Tunnel += "pval" */
+#define TR_SPEED               12     /* Speed += "pval" */
+#define TR_BLOWS               13     /* Blows += "pval" */
+#define TR_CHAOTIC             14
+#define TR_VAMPIRIC            15
+#define TR_SLAY_ANIMAL         16
+#define TR_SLAY_EVIL           17
+#define TR_SLAY_UNDEAD         18
+#define TR_SLAY_DEMON          19
+#define TR_SLAY_ORC            20
+#define TR_SLAY_TROLL          21
+#define TR_SLAY_GIANT          22
+#define TR_SLAY_DRAGON         23
+#define TR_KILL_DRAGON         24     /* Execute Dragon */
+#define TR_VORPAL              25     /* Later */
+#define TR_IMPACT              26     /* Cause Earthquakes */
+#define TR_BRAND_POIS          27
+#define TR_BRAND_ACID          28
+#define TR_BRAND_ELEC          29
+#define TR_BRAND_FIRE          30
+#define TR_BRAND_COLD          31
+
+#define TR_SUST_STR            32
+#define TR_SUST_INT            33
+#define TR_SUST_WIS            34
+#define TR_SUST_DEX            35
+#define TR_SUST_CON            36
+#define TR_SUST_CHR            37
+#define TR_RIDING              38
+#define TR_XXX2                39     /* Later */
+#define TR_IM_ACID             40
+#define TR_IM_ELEC             41
+#define TR_IM_FIRE             42
+#define TR_IM_COLD             43
+#define TR_THROW               44     /* Later */
+#define TR_REFLECT             45     /* Reflect 'bolts' */
+#define TR_FREE_ACT            46     /* Free Action */
+#define TR_HOLD_LIFE           47     /* Hold Life */
+#define TR_RES_ACID            48
+#define TR_RES_ELEC            49
+#define TR_RES_FIRE            50
+#define TR_RES_COLD            51
+#define TR_RES_POIS            52
+#define TR_RES_FEAR            53     /* Added for Zangband */
+#define TR_RES_LITE            54
+#define TR_RES_DARK            55
+#define TR_RES_BLIND           56
+#define TR_RES_CONF            57
+#define TR_RES_SOUND           58
+#define TR_RES_SHARDS          59
+#define TR_RES_NETHER          60
+#define TR_RES_NEXUS           61
+#define TR_RES_CHAOS           62
+#define TR_RES_DISEN           63
+
+#define TR_SH_FIRE             64     /* Immolation (Fire) */
+#define TR_SH_ELEC             65     /* Electric Sheath */
+#define TR_SLAY_HUMAN          66     /* Slay human */
+#define TR_SH_COLD             67     /* cold aura */
+#define TR_NO_TELE             68     /* Anti-teleportation */
+#define TR_NO_MAGIC            69     /* Anti-magic */
+#define TR_DEC_MANA            70     /* ??? */
+#define TR_TY_CURSE            71     /* The Ancient Curse */
+#define TR_WARNING             72     /* Warning */
+#define TR_HIDE_TYPE           73     /* Hide "pval" description */
+#define TR_SHOW_MODS           74     /* Always show Tohit/Todam */
+#define TR_XXX1                75     /* XXX1 */
+#define TR_FEATHER             76     /* Feather Falling */
+#define TR_LITE                77     /* Permanent Light */
+#define TR_SEE_INVIS           78     /* See Invisible */
+#define TR_TELEPATHY           79     /* Telepathy */
+#define TR_SLOW_DIGEST         80     /* Item slows down digestion */
+#define TR_REGEN               81     /* Item induces regeneration */
+#define TR_XTRA_MIGHT          82     /* Bows get extra multiplier */
+#define TR_XTRA_SHOTS          83     /* Bows get extra shots */
+#define TR_IGNORE_ACID         84     /* Item ignores Acid Damage */
+#define TR_IGNORE_ELEC         85     /* Item ignores Elec Damage */
+#define TR_IGNORE_FIRE         86     /* Item ignores Fire Damage */
+#define TR_IGNORE_COLD         87     /* Item ignores Cold Damage */
+#define TR_ACTIVATE            88     /* Item can be activated */
+#define TR_DRAIN_EXP           89     /* Item drains Experience */
+#define TR_TELEPORT            90     /* Item teleports player */
+#define TR_AGGRAVATE           91     /* Item aggravates monsters */
+#define TR_BLESSED             92     /* Item is Blessed */
+#define TR_XXX3                93
+#define TR_XXX4                94
+#define TR_XXX5                95
+
+#define TR_KILL_ANIMAL         96
+#define TR_KILL_EVIL           97
+#define TR_KILL_UNDEAD         98
+#define TR_KILL_DEMON          99
+#define TR_KILL_ORC            100
+#define TR_KILL_TROLL          101
+#define TR_KILL_GIANT          102
+#define TR_KILL_HUMAN          103
+#define TR_ESP_ANIMAL          104
+#define TR_ESP_UNDEAD          105
+#define TR_ESP_DEMON           106
+#define TR_ESP_ORC             107
+#define TR_ESP_TROLL           108
+#define TR_ESP_GIANT           109
+#define TR_ESP_DRAGON          110
+#define TR_ESP_HUMAN           111
+#define TR_ESP_EVIL            112
+#define TR_ESP_GOOD            113
+#define TR_ESP_NONLIVING       114
+#define TR_ESP_UNIQUE          115
+#define TR_FULL_NAME           116
+
+#define TR_FLAG_MAX            117
+#define TR_FLAG_SIZE           4
 
 
 #define TRG_INSTA_ART           0x00000001L     /* Item must be an artifact */
 #define TRG_RANDOM_CURSE2       0x00008000L     /* Item is Random Cursed */
 
 
-/*
- * Hack -- flag set 1 -- mask for "pval-dependant" flags.
- * Note that all "pval" dependant flags must be in "flags1".
- */
-#define TR1_PVAL_MASK   \
-       (TR1_STR | TR1_INT | TR1_WIS | TR1_DEX | \
-     TR1_CON | TR1_CHR | \
-        TR1_MAGIC_MASTERY | TR1_STEALTH | TR1_SEARCH | TR1_INFRA | \
-        TR1_TUNNEL | TR1_SPEED | TR1_BLOWS)
-
-
 #define MAX_CURSE 17
 
 #define TRC_CURSED              0x00000001L
index 663d435..823a9b6 100644 (file)
@@ -829,8 +829,8 @@ extern void monster_drop_carried_objects(monster_type *m_ptr);
 extern s16b m_bonus(int max, int level);
 
 extern void reset_visuals(void);
-extern void object_flags(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3);
-extern void object_flags_known(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3);
+extern void object_flags(object_type *o_ptr, u32b flgs[TR_FLAG_SIZE]);
+extern void object_flags_known(object_type *o_ptr, u32b flgs[TR_FLAG_SIZE]);
 extern void object_desc_store(char *buf, object_type *o_ptr, int pref, int mode);
 extern cptr item_activation(object_type *o_ptr);
 extern bool identify_fully_aux(object_type *o_ptr);
index 801191e..dfde2a3 100644 (file)
@@ -2064,7 +2064,7 @@ static void display_player_various(void)
        int                     xdis, xdev, xsav, xstl;
        cptr            desc;
        int         muta_att = 0;
-       u32b        f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        int             shots, shot_frac;
 
        object_type             *o_ptr;
@@ -2139,20 +2139,20 @@ static void display_player_various(void)
                        o_ptr = &inventory[INVEN_RARM+i];
                        if (object_known_p(o_ptr)) damage[i] += o_ptr->to_d*100;
                        basedam = (o_ptr->dd * (o_ptr->ds + 1))*50;
-                       object_flags(o_ptr, &f1, &f2, &f3);
+                       object_flags(o_ptr, flgs);
                        if ((o_ptr->ident & IDENT_MENTAL) && ((o_ptr->name1 == ART_VORPAL_BLADE) || (o_ptr->name1 == ART_CHAINSWORD)))
                        {
                                /* vorpal blade */
                                basedam *= 5;
                                basedam /= 3;
                        }
-                       else if (object_known_p(o_ptr) && (f1 & TR1_VORPAL))
+                       else if (object_known_p(o_ptr) && (have_flag(flgs, TR_VORPAL)))
                        {
                                /* vorpal flag only */
                                basedam *= 11;
                                basedam /= 9;
                        }
-                       if (object_known_p(o_ptr) && (p_ptr->pclass != CLASS_SAMURAI) && (f1 & TR1_FORCE_WEAPON) && (p_ptr->csp > (o_ptr->dd * o_ptr->ds / 5)))
+                       if (object_known_p(o_ptr) && (p_ptr->pclass != CLASS_SAMURAI) && (have_flag(flgs, TR_FORCE_WEAPON)) && (p_ptr->csp > (o_ptr->dd * o_ptr->ds / 5)))
                                basedam = basedam * 7 / 2;
                        if (p_ptr->riding && (o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE)))
                                basedam = basedam*(o_ptr->dd+2)/o_ptr->dd;
@@ -2221,78 +2221,81 @@ static void display_player_various(void)
 /*
  * Obtain the "flags" for the player as if he was an item
  */
-static void player_flags(u32b *f1, u32b *f2, u32b *f3)
+static void player_flags(u32b flgs[TR_FLAG_SIZE])
 {
+       int i;
+
        /* Clear */
-       (*f1) = (*f2) = (*f3) = 0L;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = 0L;
 
        /* Classes */
        switch (p_ptr->pclass)
        {
        case CLASS_WARRIOR:
                if (p_ptr->lev > 44)
-                       (*f3) |= (TR3_REGEN);
+                       add_flag(flgs, TR_REGEN);
        case CLASS_SAMURAI:
                if (p_ptr->lev > 29)
-                       (*f2) |= (TR2_RES_FEAR);
+                       add_flag(flgs, TR_RES_FEAR);
                break;
        case CLASS_PALADIN:
                if (p_ptr->lev > 39)
-                       (*f2) |= (TR2_RES_FEAR);
+                       add_flag(flgs, TR_RES_FEAR);
                break;
        case CLASS_CHAOS_WARRIOR:
                if (p_ptr->lev > 29)
-                       (*f2) |= (TR2_RES_CHAOS);
+                       add_flag(flgs, TR_RES_CHAOS);
                if (p_ptr->lev > 39)
-                       (*f2) |= (TR2_RES_FEAR);
+                       add_flag(flgs, TR_RES_FEAR);
                break;
        case CLASS_MONK:
        case CLASS_FORCETRAINER:
                if ((p_ptr->lev > 9) && !heavy_armor())
-                       (*f1) |= TR1_SPEED;
+                       add_flag(flgs, TR_SPEED);
                if ((p_ptr->lev>24) && !heavy_armor())
-                       (*f2) |= (TR2_FREE_ACT);
+                       add_flag(flgs, TR_FREE_ACT);
                break;
        case CLASS_NINJA:
                if (heavy_armor())
-                       (*f1) |= TR1_SPEED;
+                       add_flag(flgs, TR_SPEED);
                else
                {
                        if (!inventory[INVEN_LARM].tval || p_ptr->hidarite)
-                               (*f1) |= TR1_SPEED;
+                               add_flag(flgs, TR_SPEED);
                        if (p_ptr->lev>24)
-                               (*f2) |= (TR2_FREE_ACT);
+                               add_flag(flgs, TR_FREE_ACT);
                }
-               (*f3) |= TR3_SLOW_DIGEST;
-               (*f2) |= TR2_RES_FEAR;
-               if (p_ptr->lev > 19) (*f2) |= TR2_RES_POIS;
-               if (p_ptr->lev > 24) (*f2) |= TR2_SUST_DEX;
-               if (p_ptr->lev > 29) (*f3) |= TR3_SEE_INVIS;
+               add_flag(flgs, TR_SLOW_DIGEST);
+               add_flag(flgs, TR_RES_FEAR);
+               if (p_ptr->lev > 19) add_flag(flgs, TR_RES_POIS);
+               if (p_ptr->lev > 24) add_flag(flgs, TR_SUST_DEX);
+               if (p_ptr->lev > 29) add_flag(flgs, TR_SEE_INVIS);
                break;
        case CLASS_MINDCRAFTER:
                if (p_ptr->lev > 9)
-                       (*f2) |= (TR2_RES_FEAR);
+                       add_flag(flgs, TR_RES_FEAR);
                if (p_ptr->lev > 19)
-                       (*f2) |= (TR2_SUST_WIS);
+                       add_flag(flgs, TR_SUST_WIS);
                if (p_ptr->lev > 29)
-                       (*f2) |= (TR2_RES_CONF);
+                       add_flag(flgs, TR_RES_CONF);
                if (p_ptr->lev > 39)
-                       (*f3) |= (TR3_TELEPATHY);
+                       add_flag(flgs, TR_TELEPATHY);
                break;
        case CLASS_BARD:
-               (*f2) |= (TR2_RES_SOUND);
+               add_flag(flgs, TR_RES_SOUND);
                break;
        case CLASS_BERSERKER:
-               (*f2) |= (TR2_SUST_STR);
-               (*f2) |= (TR2_SUST_DEX);
-               (*f2) |= (TR2_SUST_CON);
-               (*f3) |= (TR3_REGEN);
-               (*f2) |= (TR2_FREE_ACT);
-               (*f1) |= (TR1_SPEED);
-               if (p_ptr->lev > 39) (*f2) |= (TR2_REFLECT);
+               add_flag(flgs, TR_SUST_STR);
+               add_flag(flgs, TR_SUST_DEX);
+               add_flag(flgs, TR_SUST_CON);
+               add_flag(flgs, TR_REGEN);
+               add_flag(flgs, TR_FREE_ACT);
+               add_flag(flgs, TR_SPEED);
+               if (p_ptr->lev > 39) add_flag(flgs, TR_REFLECT);
                break;
        case CLASS_MIRROR_MASTER:
-               if(p_ptr->lev > 39)(*f2) |= (TR2_REFLECT);
+               if(p_ptr->lev > 39)add_flag(flgs, TR_REFLECT);
                break;
        default:
                break; /* Do nothing */
@@ -2304,42 +2307,42 @@ static void player_flags(u32b *f1, u32b *f2, u32b *f3)
                switch(p_ptr->mimic_form)
                {
                case MIMIC_DEMON:
-                       (*f2) |= (TR2_HOLD_LIFE);
-                       (*f2) |= (TR2_RES_CHAOS);
-                       (*f2) |= (TR2_RES_NETHER);
-                       (*f2) |= (TR2_RES_FIRE);
-                       (*f3) |= (TR3_SEE_INVIS);
-                       (*f1) |= (TR1_SPEED);
+                       add_flag(flgs, TR_HOLD_LIFE);
+                       add_flag(flgs, TR_RES_CHAOS);
+                       add_flag(flgs, TR_RES_NETHER);
+                       add_flag(flgs, TR_RES_FIRE);
+                       add_flag(flgs, TR_SEE_INVIS);
+                       add_flag(flgs, TR_SPEED);
                        break;
                case MIMIC_DEMON_LORD:
-                       (*f2) |= (TR2_HOLD_LIFE);
-                       (*f2) |= (TR2_RES_CHAOS);
-                       (*f2) |= (TR2_RES_NETHER);
-                       (*f2) |= (TR2_RES_FIRE);
-                       (*f2) |= (TR2_RES_COLD);
-                       (*f2) |= (TR2_RES_ELEC);
-                       (*f2) |= (TR2_RES_ACID);
-                       (*f2) |= (TR2_RES_POIS);
-                       (*f2) |= (TR2_RES_CONF);
-                       (*f2) |= (TR2_RES_DISEN);
-                       (*f2) |= (TR2_RES_NEXUS);
-                       (*f2) |= (TR2_RES_FEAR);
-                       (*f2) |= (TR2_IM_FIRE);
-                       (*f3) |= (TR3_SH_FIRE);
-                       (*f3) |= (TR3_SEE_INVIS);
-                       (*f3) |= (TR3_TELEPATHY);
-                       (*f3) |= (TR3_FEATHER);
-                       (*f1) |= (TR1_SPEED);
+                       add_flag(flgs, TR_HOLD_LIFE);
+                       add_flag(flgs, TR_RES_CHAOS);
+                       add_flag(flgs, TR_RES_NETHER);
+                       add_flag(flgs, TR_RES_FIRE);
+                       add_flag(flgs, TR_RES_COLD);
+                       add_flag(flgs, TR_RES_ELEC);
+                       add_flag(flgs, TR_RES_ACID);
+                       add_flag(flgs, TR_RES_POIS);
+                       add_flag(flgs, TR_RES_CONF);
+                       add_flag(flgs, TR_RES_DISEN);
+                       add_flag(flgs, TR_RES_NEXUS);
+                       add_flag(flgs, TR_RES_FEAR);
+                       add_flag(flgs, TR_IM_FIRE);
+                       add_flag(flgs, TR_SH_FIRE);
+                       add_flag(flgs, TR_SEE_INVIS);
+                       add_flag(flgs, TR_TELEPATHY);
+                       add_flag(flgs, TR_FEATHER);
+                       add_flag(flgs, TR_SPEED);
                        break;
                case MIMIC_VAMPIRE:
-                       (*f2) |= (TR2_HOLD_LIFE);
-                       (*f2) |= (TR2_RES_DARK);
-                       (*f2) |= (TR2_RES_NETHER);
-                       if (p_ptr->pclass != CLASS_NINJA) (*f3) |= (TR3_LITE);
-                       (*f2) |= (TR2_RES_POIS);
-                       (*f2) |= (TR2_RES_COLD);
-                       (*f3) |= (TR3_SEE_INVIS);
-                       (*f1) |= (TR1_SPEED);
+                       add_flag(flgs, TR_HOLD_LIFE);
+                       add_flag(flgs, TR_RES_DARK);
+                       add_flag(flgs, TR_RES_NETHER);
+                       if (p_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE);
+                       add_flag(flgs, TR_RES_POIS);
+                       add_flag(flgs, TR_RES_COLD);
+                       add_flag(flgs, TR_SEE_INVIS);
+                       add_flag(flgs, TR_SPEED);
                        break;
                }
        }
@@ -2348,28 +2351,28 @@ static void player_flags(u32b *f1, u32b *f2, u32b *f3)
        switch (p_ptr->prace)
        {
        case RACE_ELF:
-               (*f2) |= (TR2_RES_LITE);
+               add_flag(flgs, TR_RES_LITE);
                break;
        case RACE_HOBBIT:
-               (*f2) |= (TR2_SUST_DEX);
+               add_flag(flgs, TR_SUST_DEX);
                break;
        case RACE_GNOME:
-               (*f2) |= (TR2_FREE_ACT);
+               add_flag(flgs, TR_FREE_ACT);
                break;
        case RACE_DWARF:
-               (*f2) |= (TR2_RES_BLIND);
+               add_flag(flgs, TR_RES_BLIND);
                break;
        case RACE_HALF_ORC:
-               (*f2) |= (TR2_RES_DARK);
+               add_flag(flgs, TR_RES_DARK);
                break;
        case RACE_HALF_TROLL:
-               (*f2) |= (TR2_SUST_STR);
+               add_flag(flgs, TR_SUST_STR);
                if (p_ptr->lev > 14)
                {
-                       (*f3) |= (TR3_REGEN);
+                       add_flag(flgs, TR_REGEN);
                        if (p_ptr->pclass == CLASS_WARRIOR)
                        {
-                               (*f3) |= (TR3_SLOW_DIGEST);
+                               add_flag(flgs, TR_SLOW_DIGEST);
                                /*
                                 * Let's not make Regeneration a disadvantage
                                 * for the poor warriors who can never learn
@@ -2381,160 +2384,160 @@ static void player_flags(u32b *f1, u32b *f2, u32b *f3)
                }
                break;
        case RACE_AMBERITE:
-               (*f2) |= (TR2_SUST_CON);
-               (*f3) |= (TR3_REGEN); /* Amberites heal fast */
+               add_flag(flgs, TR_SUST_CON);
+               add_flag(flgs, TR_REGEN); /* Amberites heal fast */
                break;
        case RACE_HIGH_ELF:
-               (*f2) |= (TR2_RES_LITE);
-               (*f3) |= (TR3_SEE_INVIS);
+               add_flag(flgs, TR_RES_LITE);
+               add_flag(flgs, TR_SEE_INVIS);
                break;
        case RACE_BARBARIAN:
-               (*f2) |= (TR2_RES_FEAR);
+               add_flag(flgs, TR_RES_FEAR);
                break;
        case RACE_HALF_OGRE:
-               (*f2) |= (TR2_SUST_STR);
-               (*f2) |= (TR2_RES_DARK);
+               add_flag(flgs, TR_SUST_STR);
+               add_flag(flgs, TR_RES_DARK);
                break;
        case RACE_HALF_GIANT:
-               (*f2) |= (TR2_RES_SHARDS);
-               (*f2) |= (TR2_SUST_STR);
+               add_flag(flgs, TR_RES_SHARDS);
+               add_flag(flgs, TR_SUST_STR);
                break;
        case RACE_HALF_TITAN:
-               (*f2) |= (TR2_RES_CHAOS);
+               add_flag(flgs, TR_RES_CHAOS);
                break;
        case RACE_CYCLOPS:
-               (*f2) |= (TR2_RES_SOUND);
+               add_flag(flgs, TR_RES_SOUND);
                break;
        case RACE_YEEK:
-               (*f2) |= (TR2_RES_ACID);
+               add_flag(flgs, TR_RES_ACID);
                if (p_ptr->lev > 19)
-                       (*f2) |= (TR2_IM_ACID);
+                       add_flag(flgs, TR_IM_ACID);
                break;
        case RACE_KLACKON:
-               (*f2) |= (TR2_RES_CONF);
-               (*f2) |= (TR2_RES_ACID);
+               add_flag(flgs, TR_RES_CONF);
+               add_flag(flgs, TR_RES_ACID);
                if (p_ptr->lev > 9)
-                       (*f1) |= TR1_SPEED;
+                       add_flag(flgs, TR_SPEED);
                break;
        case RACE_KOBOLD:
-               (*f2) |= (TR2_RES_POIS);
+               add_flag(flgs, TR_RES_POIS);
                break;
        case RACE_NIBELUNG:
-               (*f2) |= (TR2_RES_DISEN);
-               (*f2) |= (TR2_RES_DARK);
+               add_flag(flgs, TR_RES_DISEN);
+               add_flag(flgs, TR_RES_DARK);
                break;
        case RACE_DARK_ELF:
-               (*f2) |= (TR2_RES_DARK);
+               add_flag(flgs, TR_RES_DARK);
                if (p_ptr->lev > 19)
-                       (*f3) |= (TR3_SEE_INVIS);
+                       add_flag(flgs, TR_SEE_INVIS);
                break;
        case RACE_DRACONIAN:
-               (*f3) |= TR3_FEATHER;
+               add_flag(flgs, TR_FEATHER);
                if (p_ptr->lev > 4)
-                       (*f2) |= (TR2_RES_FIRE);
+                       add_flag(flgs, TR_RES_FIRE);
                if (p_ptr->lev > 9)
-                       (*f2) |= (TR2_RES_COLD);
+                       add_flag(flgs, TR_RES_COLD);
                if (p_ptr->lev > 14)
-                       (*f2) |= (TR2_RES_ACID);
+                       add_flag(flgs, TR_RES_ACID);
                if (p_ptr->lev > 19)
-                       (*f2) |= (TR2_RES_ELEC);
+                       add_flag(flgs, TR_RES_ELEC);
                if (p_ptr->lev > 34)
-                       (*f2) |= (TR2_RES_POIS);
+                       add_flag(flgs, TR_RES_POIS);
                break;
        case RACE_MIND_FLAYER:
-               (*f2) |= (TR2_SUST_INT);
-               (*f2) |= (TR2_SUST_WIS);
+               add_flag(flgs, TR_SUST_INT);
+               add_flag(flgs, TR_SUST_WIS);
                if (p_ptr->lev > 14)
-                       (*f3) |= (TR3_SEE_INVIS);
+                       add_flag(flgs, TR_SEE_INVIS);
                if (p_ptr->lev > 29)
-                       (*f3) |= (TR3_TELEPATHY);
+                       add_flag(flgs, TR_TELEPATHY);
                break;
        case RACE_IMP:
-               (*f2) |= (TR2_RES_FIRE);
+               add_flag(flgs, TR_RES_FIRE);
                if (p_ptr->lev > 9)
-                       (*f3) |= (TR3_SEE_INVIS);
+                       add_flag(flgs, TR_SEE_INVIS);
                break;
        case RACE_GOLEM:
-               (*f3) |= (TR3_SEE_INVIS);
-               (*f2) |= (TR2_FREE_ACT);
-               (*f2) |= (TR2_RES_POIS);
-               (*f3) |= (TR3_SLOW_DIGEST);
+               add_flag(flgs, TR_SEE_INVIS);
+               add_flag(flgs, TR_FREE_ACT);
+               add_flag(flgs, TR_RES_POIS);
+               add_flag(flgs, TR_SLOW_DIGEST);
                if (p_ptr->lev > 34)
-                       (*f2) |= (TR2_HOLD_LIFE);
+                       add_flag(flgs, TR_HOLD_LIFE);
                break;
        case RACE_SKELETON:
-               (*f3) |= (TR3_SEE_INVIS);
-               (*f2) |= (TR2_RES_SHARDS);
-               (*f2) |= (TR2_HOLD_LIFE);
-               (*f2) |= (TR2_RES_POIS);
+               add_flag(flgs, TR_SEE_INVIS);
+               add_flag(flgs, TR_RES_SHARDS);
+               add_flag(flgs, TR_HOLD_LIFE);
+               add_flag(flgs, TR_RES_POIS);
                if (p_ptr->lev > 9)
-                       (*f2) |= (TR2_RES_COLD);
+                       add_flag(flgs, TR_RES_COLD);
                break;
        case RACE_ZOMBIE:
-               (*f3) |= (TR3_SEE_INVIS);
-               (*f2) |= (TR2_HOLD_LIFE);
-               (*f2) |= (TR2_RES_NETHER);
-               (*f2) |= (TR2_RES_POIS);
-               (*f3) |= (TR3_SLOW_DIGEST);
+               add_flag(flgs, TR_SEE_INVIS);
+               add_flag(flgs, TR_HOLD_LIFE);
+               add_flag(flgs, TR_RES_NETHER);
+               add_flag(flgs, TR_RES_POIS);
+               add_flag(flgs, TR_SLOW_DIGEST);
                if (p_ptr->lev > 4)
-                       (*f2) |= (TR2_RES_COLD);
+                       add_flag(flgs, TR_RES_COLD);
                break;
        case RACE_VAMPIRE:
-               (*f2) |= (TR2_HOLD_LIFE);
-               (*f2) |= (TR2_RES_DARK);
-               (*f2) |= (TR2_RES_NETHER);
-               if (p_ptr->pclass != CLASS_NINJA) (*f3) |= (TR3_LITE);
-               (*f2) |= (TR2_RES_POIS);
-               (*f2) |= (TR2_RES_COLD);
+               add_flag(flgs, TR_HOLD_LIFE);
+               add_flag(flgs, TR_RES_DARK);
+               add_flag(flgs, TR_RES_NETHER);
+               if (p_ptr->pclass != CLASS_NINJA) add_flag(flgs, TR_LITE);
+               add_flag(flgs, TR_RES_POIS);
+               add_flag(flgs, TR_RES_COLD);
                break;
        case RACE_SPECTRE:
-               (*f3) |= (TR3_FEATHER);
-               (*f2) |= (TR2_FREE_ACT);
-               (*f2) |= (TR2_RES_COLD);
-               (*f3) |= (TR3_SEE_INVIS);
-               (*f2) |= (TR2_HOLD_LIFE);
-               (*f2) |= (TR2_RES_NETHER);
-               (*f2) |= (TR2_RES_POIS);
-               (*f3) |= (TR3_SLOW_DIGEST);
+               add_flag(flgs, TR_FEATHER);
+               add_flag(flgs, TR_FREE_ACT);
+               add_flag(flgs, TR_RES_COLD);
+               add_flag(flgs, TR_SEE_INVIS);
+               add_flag(flgs, TR_HOLD_LIFE);
+               add_flag(flgs, TR_RES_NETHER);
+               add_flag(flgs, TR_RES_POIS);
+               add_flag(flgs, TR_SLOW_DIGEST);
                /* XXX pass_wall */
                if (p_ptr->lev > 34)
-                       (*f3) |= TR3_TELEPATHY;
+                       add_flag(flgs, TR_TELEPATHY);
                break;
        case RACE_SPRITE:
-               (*f2) |= (TR2_RES_LITE);
-               (*f3) |= (TR3_FEATHER);
+               add_flag(flgs, TR_RES_LITE);
+               add_flag(flgs, TR_FEATHER);
                if (p_ptr->lev > 9)
-                       (*f1) |= (TR1_SPEED);
+                       add_flag(flgs, TR_SPEED);
                break;
        case RACE_BEASTMAN:
-               (*f2) |= (TR2_RES_SOUND);
-               (*f2) |= (TR2_RES_CONF);
+               add_flag(flgs, TR_RES_SOUND);
+               add_flag(flgs, TR_RES_CONF);
                break;
        case RACE_ANGEL:
-               (*f3) |= (TR3_FEATHER);
-               (*f3) |= (TR3_SEE_INVIS);
+               add_flag(flgs, TR_FEATHER);
+               add_flag(flgs, TR_SEE_INVIS);
                break;
        case RACE_DEMON:
-               (*f2) |= (TR2_RES_FIRE);
-               (*f2) |= (TR2_RES_NETHER);
-               (*f2) |= (TR2_HOLD_LIFE);
+               add_flag(flgs, TR_RES_FIRE);
+               add_flag(flgs, TR_RES_NETHER);
+               add_flag(flgs, TR_HOLD_LIFE);
                if (p_ptr->lev > 9)
-                       (*f3) |= (TR3_SEE_INVIS);
+                       add_flag(flgs, TR_SEE_INVIS);
                break;
        case RACE_DUNADAN:
-               (*f2) |= (TR2_SUST_CON);
+               add_flag(flgs, TR_SUST_CON);
                break;
        case RACE_S_FAIRY:
-               (*f3) |= (TR3_FEATHER);
+               add_flag(flgs, TR_FEATHER);
                break;
        case RACE_KUTA:
-               (*f2) |= (TR2_RES_CONF);
+               add_flag(flgs, TR_RES_CONF);
                break;
        case RACE_ANDROID:
-               (*f2) |= (TR2_FREE_ACT);
-               (*f2) |= (TR2_RES_POIS);
-               (*f3) |= (TR3_SLOW_DIGEST);
-               (*f2) |= (TR2_HOLD_LIFE);
+               add_flag(flgs, TR_FREE_ACT);
+               add_flag(flgs, TR_RES_POIS);
+               add_flag(flgs, TR_SLOW_DIGEST);
+               add_flag(flgs, TR_HOLD_LIFE);
                break;
        default:
                ; /* Do nothing */
@@ -2546,236 +2549,239 @@ static void player_flags(u32b *f1, u32b *f2, u32b *f3)
        {
                if (p_ptr->muta3 & MUT3_FLESH_ROT)
                {
-                       (*f3) &= ~(TR3_REGEN);
+                       remove_flag(flgs, TR_REGEN);
                }
 
                if ((p_ptr->muta3 & MUT3_XTRA_FAT) ||
                        (p_ptr->muta3 & MUT3_XTRA_LEGS) ||
                        (p_ptr->muta3 & MUT3_SHORT_LEG))
                {
-                       (*f1) |= TR1_SPEED;
+                       add_flag(flgs, TR_SPEED);
                }
 
                if (p_ptr->muta3  & MUT3_ELEC_TOUC)
                {
-                       (*f3) |= TR3_SH_ELEC;
+                       add_flag(flgs, TR_SH_ELEC);
                }
 
                if (p_ptr->muta3 & MUT3_FIRE_BODY)
                {
-                       (*f3) |= TR3_SH_FIRE;
-                       (*f3) |= TR3_LITE;
+                       add_flag(flgs, TR_SH_FIRE);
+                       add_flag(flgs, TR_LITE);
                }
 
                if (p_ptr->muta3 & MUT3_WINGS)
                {
-                       (*f3) |= TR3_FEATHER;
+                       add_flag(flgs, TR_FEATHER);
                }
 
                if (p_ptr->muta3 & MUT3_FEARLESS)
                {
-                       (*f2) |= (TR2_RES_FEAR);
+                       add_flag(flgs, TR_RES_FEAR);
                }
 
                if (p_ptr->muta3 & MUT3_REGEN)
                {
-                       (*f3) |= TR3_REGEN;
+                       add_flag(flgs, TR_REGEN);
                }
 
                if (p_ptr->muta3 & MUT3_ESP)
                {
-                       (*f3) |= TR3_TELEPATHY;
+                       add_flag(flgs, TR_TELEPATHY);
                }
 
                if (p_ptr->muta3 & MUT3_MOTION)
                {
-                       (*f2) |= TR2_FREE_ACT;
+                       add_flag(flgs, TR_FREE_ACT);
                }
        }
 
        if (p_ptr->pseikaku == SEIKAKU_SEXY)
-               (*f3) |= TR3_AGGRAVATE;
+               add_flag(flgs, TR_AGGRAVATE);
        if (p_ptr->pseikaku == SEIKAKU_MUNCHKIN)
        {
-               (*f2) |= (TR2_RES_BLIND);
-               (*f2) |= (TR2_RES_CONF);
-               (*f2) |= (TR2_HOLD_LIFE);
-               (*f3) |= (TR3_LITE);
+               add_flag(flgs, TR_RES_BLIND);
+               add_flag(flgs, TR_RES_CONF);
+               add_flag(flgs, TR_HOLD_LIFE);
+               add_flag(flgs, TR_LITE);
                if (p_ptr->lev > 9)
-                       (*f1) |= (TR1_SPEED);
+                       add_flag(flgs, TR_SPEED);
        }
        if (p_ptr->special_defense & KATA_FUUJIN)
-               (*f2) |= TR2_REFLECT;
+               add_flag(flgs, TR_REFLECT);
        if (p_ptr->special_defense & KAMAE_GENBU)
-               (*f2) |= TR2_REFLECT;
+               add_flag(flgs, TR_REFLECT);
        if (p_ptr->special_defense & KAMAE_SUZAKU)
-               (*f3) |= TR3_FEATHER;
+               add_flag(flgs, TR_FEATHER);
        if (p_ptr->special_defense & KAMAE_SEIRYU)
        {
-               (*f2) |= (TR2_RES_FIRE);
-               (*f2) |= (TR2_RES_COLD);
-               (*f2) |= (TR2_RES_ACID);
-               (*f2) |= (TR2_RES_ELEC);
-               (*f2) |= (TR2_RES_POIS);
-               (*f3) |= (TR3_FEATHER);
-               (*f3) |= (TR3_SH_FIRE);
-               (*f3) |= (TR3_SH_ELEC);
-               (*f3) |= (TR3_SH_COLD);
+               add_flag(flgs, TR_RES_FIRE);
+               add_flag(flgs, TR_RES_COLD);
+               add_flag(flgs, TR_RES_ACID);
+               add_flag(flgs, TR_RES_ELEC);
+               add_flag(flgs, TR_RES_POIS);
+               add_flag(flgs, TR_FEATHER);
+               add_flag(flgs, TR_SH_FIRE);
+               add_flag(flgs, TR_SH_ELEC);
+               add_flag(flgs, TR_SH_COLD);
        }
        if (p_ptr->special_defense & KATA_MUSOU)
        {
-               (*f2) |= TR2_RES_FEAR;
-               (*f2) |= TR2_RES_LITE;
-               (*f2) |= TR2_RES_DARK;
-               (*f2) |= TR2_RES_BLIND;
-               (*f2) |= TR2_RES_CONF;
-               (*f2) |= TR2_RES_SOUND;
-               (*f2) |= TR2_RES_SHARDS;
-               (*f2) |= TR2_RES_NETHER;
-               (*f2) |= TR2_RES_NEXUS;
-               (*f2) |= TR2_RES_CHAOS;
-               (*f2) |= TR2_RES_DISEN;
-               (*f2) |= TR2_REFLECT;
-               (*f2) |= TR2_HOLD_LIFE;
-               (*f2) |= TR2_FREE_ACT;
-               (*f3) |= TR3_SH_FIRE;
-               (*f3) |= TR3_SH_ELEC;
-               (*f3) |= TR3_SH_COLD;
-               (*f3) |= TR3_FEATHER;
-               (*f3) |= TR3_LITE;
-               (*f3) |= TR3_SEE_INVIS;
-               (*f3) |= TR3_TELEPATHY;
-               (*f3) |= TR3_SLOW_DIGEST;
-               (*f3) |= TR3_REGEN;
-               (*f2) |= (TR2_SUST_STR);
-               (*f2) |= (TR2_SUST_INT);
-               (*f2) |= (TR2_SUST_WIS);
-               (*f2) |= (TR2_SUST_DEX);
-               (*f2) |= (TR2_SUST_CON);
-               (*f2) |= (TR2_SUST_CHR);
+               add_flag(flgs, TR_RES_FEAR);
+               add_flag(flgs, TR_RES_LITE);
+               add_flag(flgs, TR_RES_DARK);
+               add_flag(flgs, TR_RES_BLIND);
+               add_flag(flgs, TR_RES_CONF);
+               add_flag(flgs, TR_RES_SOUND);
+               add_flag(flgs, TR_RES_SHARDS);
+               add_flag(flgs, TR_RES_NETHER);
+               add_flag(flgs, TR_RES_NEXUS);
+               add_flag(flgs, TR_RES_CHAOS);
+               add_flag(flgs, TR_RES_DISEN);
+               add_flag(flgs, TR_REFLECT);
+               add_flag(flgs, TR_HOLD_LIFE);
+               add_flag(flgs, TR_FREE_ACT);
+               add_flag(flgs, TR_SH_FIRE);
+               add_flag(flgs, TR_SH_ELEC);
+               add_flag(flgs, TR_SH_COLD);
+               add_flag(flgs, TR_FEATHER);
+               add_flag(flgs, TR_LITE);
+               add_flag(flgs, TR_SEE_INVIS);
+               add_flag(flgs, TR_TELEPATHY);
+               add_flag(flgs, TR_SLOW_DIGEST);
+               add_flag(flgs, TR_REGEN);
+               add_flag(flgs, TR_SUST_STR);
+               add_flag(flgs, TR_SUST_INT);
+               add_flag(flgs, TR_SUST_WIS);
+               add_flag(flgs, TR_SUST_DEX);
+               add_flag(flgs, TR_SUST_CON);
+               add_flag(flgs, TR_SUST_CHR);
        }
 }
 
 
-static void tim_player_flags(u32b *f1, u32b *f2, u32b *f3, bool im_and_res)
+static void tim_player_flags(u32b flgs[TR_FLAG_SIZE], bool im_and_res)
 {
+       int i;
+
        /* Clear */
-       (*f1) = (*f2) = (*f3) = 0L;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = 0L;
 
        if (p_ptr->hero || p_ptr->shero || music_singing(MUSIC_HERO) || music_singing(MUSIC_SHERO))
-               (*f2) |= TR2_RES_FEAR;
+               add_flag(flgs, TR_RES_FEAR);
        if (p_ptr->tim_invis)
-               (*f3) |= TR3_SEE_INVIS;
+               add_flag(flgs, TR_SEE_INVIS);
        if (p_ptr->tim_regen)
-               (*f3) |= TR3_REGEN;
+               add_flag(flgs, TR_REGEN);
        if (p_ptr->tim_esp || music_singing(MUSIC_MIND))
-               (*f3) |= TR3_TELEPATHY;
+               add_flag(flgs, TR_TELEPATHY);
        if (p_ptr->fast || p_ptr->slow || music_singing(MUSIC_SPEED) || music_singing(MUSIC_SHERO))
-               (*f1) |= TR1_SPEED;
+               add_flag(flgs, TR_SPEED);
        if  ((p_ptr->special_defense & KATA_MUSOU) || music_singing(MUSIC_RESIST))
        {
-               (*f2) |= (TR2_RES_FIRE);
-               (*f2) |= (TR2_RES_COLD);
-               (*f2) |= (TR2_RES_ACID);
-               (*f2) |= (TR2_RES_ELEC);
-               (*f2) |= (TR2_RES_POIS);
+               add_flag(flgs, TR_RES_FIRE);
+               add_flag(flgs, TR_RES_COLD);
+               add_flag(flgs, TR_RES_ACID);
+               add_flag(flgs, TR_RES_ELEC);
+               add_flag(flgs, TR_RES_POIS);
        }
        if (im_and_res)
        {
                if (p_ptr->oppose_acid && !(p_ptr->special_defense & DEFENSE_ACID) && !((prace_is_(RACE_YEEK)) && (p_ptr->lev > 19)))
-                       (*f2) |= TR2_RES_ACID;
+                       add_flag(flgs, TR_RES_ACID);
                if (p_ptr->oppose_elec && !(p_ptr->special_defense & DEFENSE_ELEC))
-                       (*f2) |= TR2_RES_ELEC;
+                       add_flag(flgs, TR_RES_ELEC);
                if (p_ptr->oppose_fire && !(p_ptr->special_defense & DEFENSE_FIRE))
-                       (*f2) |= TR2_RES_FIRE;
+                       add_flag(flgs, TR_RES_FIRE);
                if (p_ptr->oppose_cold && !(p_ptr->special_defense & DEFENSE_COLD))
-                       (*f2) |= TR2_RES_COLD;
+                       add_flag(flgs, TR_RES_COLD);
        }
        else
        {
                if (p_ptr->oppose_acid)
-                       (*f2) |= TR2_RES_ACID;
+                       add_flag(flgs, TR_RES_ACID);
                if (p_ptr->oppose_elec)
-                       (*f2) |= TR2_RES_ELEC;
+                       add_flag(flgs, TR_RES_ELEC);
                if (p_ptr->oppose_fire)
-                       (*f2) |= TR2_RES_FIRE;
+                       add_flag(flgs, TR_RES_FIRE);
                if (p_ptr->oppose_cold)
-                       (*f2) |= TR2_RES_COLD;
+                       add_flag(flgs, TR_RES_COLD);
        }
        if (p_ptr->oppose_pois)
-               (*f2) |= TR2_RES_POIS;
+               add_flag(flgs, TR_RES_POIS);
        if (p_ptr->special_attack & ATTACK_ACID)
-               (*f1) |= TR1_BRAND_ACID;
+               add_flag(flgs, TR_BRAND_ACID);
        if (p_ptr->special_attack & ATTACK_ELEC)
-               (*f1) |= TR1_BRAND_ELEC;
+               add_flag(flgs, TR_BRAND_ELEC);
        if (p_ptr->special_attack & ATTACK_FIRE)
-               (*f1) |= TR1_BRAND_FIRE;
+               add_flag(flgs, TR_BRAND_FIRE);
        if (p_ptr->special_attack & ATTACK_COLD)
-               (*f1) |= TR1_BRAND_COLD;
+               add_flag(flgs, TR_BRAND_COLD);
        if (p_ptr->special_attack & ATTACK_POIS)
-               (*f1) |= TR1_BRAND_POIS;
+               add_flag(flgs, TR_BRAND_POIS);
        if (p_ptr->special_defense & DEFENSE_ACID)
-               (*f2) |= TR2_IM_ACID;
+               add_flag(flgs, TR_IM_ACID);
        if (p_ptr->special_defense & DEFENSE_ELEC)
-               (*f2) |= TR2_IM_ELEC;
+               add_flag(flgs, TR_IM_ELEC);
        if (p_ptr->special_defense & DEFENSE_FIRE)
-               (*f2) |= TR2_IM_FIRE;
+               add_flag(flgs, TR_IM_FIRE);
        if (p_ptr->special_defense & DEFENSE_COLD)
-               (*f2) |= TR2_IM_COLD;
+               add_flag(flgs, TR_IM_COLD);
        if (p_ptr->wraith_form)
-               (*f2) |= TR2_REFLECT;
+               add_flag(flgs, TR_REFLECT);
        /* by henkma */
        if (p_ptr->tim_reflect){
-               (*f2) |= TR2_REFLECT;
+               add_flag(flgs, TR_REFLECT);
        }
 
        if (p_ptr->magicdef)
        {
-               (*f2) |= TR2_RES_BLIND;
-               (*f2) |= TR2_RES_CONF;
-               (*f2) |= TR2_REFLECT;
-               (*f2) |= TR2_FREE_ACT;
-               (*f3) |= TR3_FEATHER;
+               add_flag(flgs, TR_RES_BLIND);
+               add_flag(flgs, TR_RES_CONF);
+               add_flag(flgs, TR_REFLECT);
+               add_flag(flgs, TR_FREE_ACT);
+               add_flag(flgs, TR_FEATHER);
        }
        if (p_ptr->tim_res_nether)
        {
-               (*f2) |= TR2_RES_NETHER;
+               add_flag(flgs, TR_RES_NETHER);
        }
        if (p_ptr->tim_sh_fire)
        {
-               (*f3) |= TR3_SH_FIRE;
+               add_flag(flgs, TR_SH_FIRE);
        }
        if (p_ptr->ult_res)
        {
-               (*f2) |= TR2_RES_FEAR;
-               (*f2) |= TR2_RES_LITE;
-               (*f2) |= TR2_RES_DARK;
-               (*f2) |= TR2_RES_BLIND;
-               (*f2) |= TR2_RES_CONF;
-               (*f2) |= TR2_RES_SOUND;
-               (*f2) |= TR2_RES_SHARDS;
-               (*f2) |= TR2_RES_NETHER;
-               (*f2) |= TR2_RES_NEXUS;
-               (*f2) |= TR2_RES_CHAOS;
-               (*f2) |= TR2_RES_DISEN;
-               (*f2) |= TR2_REFLECT;
-               (*f2) |= TR2_HOLD_LIFE;
-               (*f2) |= TR2_FREE_ACT;
-               (*f3) |= TR3_SH_FIRE;
-               (*f3) |= TR3_SH_ELEC;
-               (*f3) |= TR3_SH_COLD;
-               (*f3) |= TR3_FEATHER;
-               (*f3) |= TR3_LITE;
-               (*f3) |= TR3_SEE_INVIS;
-               (*f3) |= TR3_TELEPATHY;
-               (*f3) |= TR3_SLOW_DIGEST;
-               (*f3) |= TR3_REGEN;
-               (*f2) |= (TR2_SUST_STR);
-               (*f2) |= (TR2_SUST_INT);
-               (*f2) |= (TR2_SUST_WIS);
-               (*f2) |= (TR2_SUST_DEX);
-               (*f2) |= (TR2_SUST_CON);
-               (*f2) |= (TR2_SUST_CHR);
+               add_flag(flgs, TR_RES_FEAR);
+               add_flag(flgs, TR_RES_LITE);
+               add_flag(flgs, TR_RES_DARK);
+               add_flag(flgs, TR_RES_BLIND);
+               add_flag(flgs, TR_RES_CONF);
+               add_flag(flgs, TR_RES_SOUND);
+               add_flag(flgs, TR_RES_SHARDS);
+               add_flag(flgs, TR_RES_NETHER);
+               add_flag(flgs, TR_RES_NEXUS);
+               add_flag(flgs, TR_RES_CHAOS);
+               add_flag(flgs, TR_RES_DISEN);
+               add_flag(flgs, TR_REFLECT);
+               add_flag(flgs, TR_HOLD_LIFE);
+               add_flag(flgs, TR_FREE_ACT);
+               add_flag(flgs, TR_SH_FIRE);
+               add_flag(flgs, TR_SH_ELEC);
+               add_flag(flgs, TR_SH_COLD);
+               add_flag(flgs, TR_FEATHER);
+               add_flag(flgs, TR_LITE);
+               add_flag(flgs, TR_SEE_INVIS);
+               add_flag(flgs, TR_TELEPATHY);
+               add_flag(flgs, TR_SLOW_DIGEST);
+               add_flag(flgs, TR_REGEN);
+               add_flag(flgs, TR_SUST_STR);
+               add_flag(flgs, TR_SUST_INT);
+               add_flag(flgs, TR_SUST_WIS);
+               add_flag(flgs, TR_SUST_DEX);
+               add_flag(flgs, TR_SUST_CON);
+               add_flag(flgs, TR_SUST_CHR);
        }
 }
 
@@ -2824,17 +2830,18 @@ void print_equippy(void)
  *
  */
 
-static void known_obj_immunity(u32b *f1, u32b *f2, u32b *f3)
+static void known_obj_immunity(u32b flgs[TR_FLAG_SIZE])
 {
        int i;
 
        /* Clear */
-       (*f1) = (*f2) = (*f3) = 0L;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = 0L;
 
        /* Check equipment */
        for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
        {
-               u32b    o_f1, o_f2, o_f3;
+               u32b o_flgs[TR_FLAG_SIZE];
 
                object_type *o_ptr;
 
@@ -2844,80 +2851,90 @@ static void known_obj_immunity(u32b *f1, u32b *f2, u32b *f3)
                if (!o_ptr->k_idx) continue;
 
                /* Known flags */
-               object_flags_known(o_ptr, &o_f1, &o_f2, &o_f3);
+               object_flags_known(o_ptr, o_flgs);
 
-               if (o_f2 & TR2_IM_ACID) (*f2) |= TR2_RES_ACID;
-               if (o_f2 & TR2_IM_ELEC) (*f2) |= TR2_RES_ELEC;
-               if (o_f2 & TR2_IM_FIRE) (*f2) |= TR2_RES_FIRE;
-               if (o_f2 & TR2_IM_COLD) (*f2) |= TR2_RES_COLD;
+               if (have_flag(flgs, TR_IM_ACID)) add_flag(flgs, TR_RES_ACID);
+               if (have_flag(flgs, TR_IM_ELEC)) add_flag(flgs, TR_RES_ELEC);
+               if (have_flag(flgs, TR_IM_FIRE)) add_flag(flgs, TR_RES_FIRE);
+               if (have_flag(flgs, TR_IM_COLD)) add_flag(flgs, TR_RES_COLD);
        }
 }
 
-static void player_immunity(u32b *f1, u32b *f2, u32b *f3)
+static void player_immunity(u32b flgs[TR_FLAG_SIZE])
 {
+       int i;
+
        /* Clear */
-       (*f1) = (*f2) = (*f3) = 0L;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = 0L;
 
        if (prace_is_(RACE_SPECTRE))
-               (*f2) |= TR2_RES_NETHER;
+               add_flag(flgs, TR_RES_NETHER);
        if (p_ptr->mimic_form == MIMIC_VAMPIRE || prace_is_(RACE_VAMPIRE))
-               (*f2) |= TR2_RES_DARK;
+               add_flag(flgs, TR_RES_DARK);
        if (p_ptr->mimic_form == MIMIC_DEMON_LORD)
-               (*f2) |= TR2_RES_FIRE;
+               add_flag(flgs, TR_RES_FIRE);
        else if (prace_is_(RACE_YEEK) && p_ptr->lev > 19)
-               (*f2) |= TR2_RES_ACID;
+               add_flag(flgs, TR_RES_ACID);
 }
 
-static void tim_player_immunity(u32b *f1, u32b *f2, u32b *f3)
+static void tim_player_immunity(u32b flgs[TR_FLAG_SIZE])
 {
+       int i;
+
        /* Clear */
-       (*f1) = (*f2) = (*f3) = 0L;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = 0L;
 
        if (p_ptr->special_defense & DEFENSE_ACID)
-               (*f2) |= TR2_RES_ACID;
+               add_flag(flgs, TR_RES_ACID);
        if (p_ptr->special_defense & DEFENSE_ELEC)
-               (*f2) |= TR2_RES_ELEC;
+               add_flag(flgs, TR_RES_ELEC);
        if (p_ptr->special_defense & DEFENSE_FIRE)
-               (*f2) |= TR2_RES_FIRE;
+               add_flag(flgs, TR_RES_FIRE);
        if (p_ptr->special_defense & DEFENSE_COLD)
-               (*f2) |= TR2_RES_COLD;
+               add_flag(flgs, TR_RES_COLD);
        if (p_ptr->wraith_form)
-               (*f2) |= TR2_RES_DARK;
+               add_flag(flgs, TR_RES_DARK);
 }
 
-static void player_vuln_flags(u32b *f1, u32b *f2, u32b *f3)
+static void player_vuln_flags(u32b flgs[TR_FLAG_SIZE])
 {
+       int i;
+
        /* Clear */
-       (*f1) = (*f2) = (*f3) = 0L;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = 0L;
 
        if ((p_ptr->muta3 & MUT3_VULN_ELEM) || (p_ptr->special_defense & KATA_KOUKIJIN))
        {
-               (*f2) |= TR2_RES_ACID;
-               (*f2) |= TR2_RES_ELEC;
-               (*f2) |= TR2_RES_FIRE;
-               (*f2) |= TR2_RES_COLD;
+               add_flag(flgs, TR_RES_ACID);
+               add_flag(flgs, TR_RES_ELEC);
+               add_flag(flgs, TR_RES_FIRE);
+               add_flag(flgs, TR_RES_COLD);
        }
        if (prace_is_(RACE_ANDROID))
-               (*f2) |= TR2_RES_ELEC;
+               add_flag(flgs, TR_RES_ELEC);
        if (prace_is_(RACE_ENT))
-               (*f2) |= TR2_RES_FIRE;
+               add_flag(flgs, TR_RES_FIRE);
        if (prace_is_(RACE_VAMPIRE) || prace_is_(RACE_S_FAIRY) ||
            (p_ptr->mimic_form == MIMIC_VAMPIRE))
-               (*f2) |= TR2_RES_LITE;
+               add_flag(flgs, TR_RES_LITE);
 }
 
 /*
  * Helper function, see below
  */
 static void display_player_flag_aux(int row, int col, cptr header,
-                                   int n, u32b flag1, u32b flag2,
-                                   u32b im_f[], u32b vul_f)
+                                   int flag1, int flag2,
+                                   u32b im_f[3][TR_FLAG_SIZE], 
+                                   u32b vul_f[TR_FLAG_SIZE])
 {
        int     i;
-       u32b    f[4];
+       u32b    flgs[TR_FLAG_SIZE], cflgs;
        bool    vuln = FALSE;
 
-       if ((vul_f & flag1) && !((im_f[0] | im_f[1] | im_f[2]) & flag1))
+       if (have_flag(vul_f, flag1) && !(have_flag(im_f[0], flag1) || have_flag(im_f[1], flag1) || have_flag(im_f[2], flag1)))
                vuln = TRUE;
 
        /* Header */
@@ -2930,46 +2947,47 @@ static void display_player_flag_aux(int row, int col, cptr header,
        for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
        {
                object_type *o_ptr;
-               f[0] = f[1] = f[2] = f[3] = 0L;
 
                /* Object */
                o_ptr = &inventory[i];
 
                /* Known flags */
-               object_flags_known(o_ptr, &f[0], &f[1], &f[2]);
-               f[3] = o_ptr->curse_flags;
+               object_flags_known(o_ptr, flgs);
+               cflgs = o_ptr->curse_flags;
 
                /* Default */
                c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, col);
 
                /* Check flags */
-               if (f[n - 1] & flag1) c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE), "+", row, col);
-               if (f[n - 1] & flag2) c_put_str(TERM_WHITE, "*", row, col);
+               if (((flag1 != -1) && have_flag(flgs, flag1)) ||
+                   ((flag1 == -1) && (cflgs & (TRC_CURSED | TRC_HEAVY_CURSE))))
+                       c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE), "+", row, col);
+               if (((flag2 != -1) && have_flag(flgs, flag2)) ||
+                   ((flag2 == -1) && (cflgs & TRC_PERMA_CURSE)))
+                       c_put_str(TERM_WHITE, "*", row, col);
 
                /* Advance */
                col++;
        }
 
        /* Player flags */
-       player_flags(&f[0], &f[1], &f[2]);
-       f[3] = 0L;
+       player_flags(flgs);
 
        /* Default */
        c_put_str((byte)(vuln ? TERM_RED : TERM_SLATE), ".", row, col);
 
        /* Check flags */
-       if (f[n-1] & flag1) c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE), "+", row, col);
+       if (have_flag(flgs, flag1)) c_put_str((byte)(vuln ? TERM_L_RED : TERM_WHITE), "+", row, col);
 
        /* Timed player flags */
-       tim_player_flags(&f[0], &f[1], &f[2], TRUE);
-       f[3] = 0L;
+       tim_player_flags(flgs, TRUE);
 
        /* Check flags */
-       if (f[n-1] & flag1) c_put_str((byte)(vuln ? TERM_ORANGE : TERM_YELLOW), "#", row, col);
+       if (have_flag(flgs, flag1)) c_put_str((byte)(vuln ? TERM_ORANGE : TERM_YELLOW), "#", row, col);
 
        /* Immunity */
-       if (im_f[2] & flag1) c_put_str(TERM_YELLOW, "*", row, col);
-       if (im_f[1] & flag1) c_put_str(TERM_WHITE, "*", row, col);
+       if (have_flag(im_f[2], flag1)) c_put_str(TERM_YELLOW, "*", row, col);
+       if (have_flag(im_f[1], flag1)) c_put_str(TERM_WHITE, "*", row, col);
 
        /* Vulnerability */
        if (vuln) c_put_str(TERM_RED, "v", row, col + 1);
@@ -2984,13 +3002,13 @@ static void display_player_flag_info(void)
        int row;
        int col;
 
-       u32b im_f[3][3], vul_f[3];
+       u32b im_f[3][TR_FLAG_SIZE], vul_f[TR_FLAG_SIZE];
 
-       known_obj_immunity(&im_f[0][0], &im_f[1][0], &im_f[2][0]);
-       player_immunity(&im_f[0][1], &im_f[1][1], &im_f[2][1]);
-       tim_player_immunity(&im_f[0][2], &im_f[1][2], &im_f[2][2]);
+       known_obj_immunity(im_f[0]);
+       player_immunity(im_f[1]);
+       tim_player_immunity(im_f[2]);
 
-       player_vuln_flags(&vul_f[0], &vul_f[1], &vul_f[2]);
+       player_vuln_flags(vul_f);
 
        /*** Set 1 ***/
 
@@ -3001,27 +3019,27 @@ static void display_player_flag_info(void)
        c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col+8);
 
 #ifdef JP
-display_player_flag_aux(row+0, col, "ÂÑ»À  :", 2, TR2_RES_ACID, TR2_IM_ACID, im_f[1], vul_f[1]);
-display_player_flag_aux(row+1, col, "ÂÑÅÅ·â:", 2, TR2_RES_ELEC, TR2_IM_ELEC, im_f[1], vul_f[1]);
-display_player_flag_aux(row+2, col, "ÂѲбê:", 2, TR2_RES_FIRE, TR2_IM_FIRE, im_f[1], vul_f[1]);
-display_player_flag_aux(row+3, col, "ÂÑÎ䵤:", 2, TR2_RES_COLD, TR2_IM_COLD, im_f[1], vul_f[1]);
-display_player_flag_aux(row+4, col, "ÂÑÆÇ  :", 2, TR2_RES_POIS, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+5, col, "ÂÑÁ®¸÷:", 2, TR2_RES_LITE, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+6, col, "ÂѰŹõ:", 2, TR2_RES_DARK, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+7, col, "ÂÑÇËÊÒ:", 2, TR2_RES_SHARDS, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+8, col, "ÂÑÌÕÌÜ:", 2, TR2_RES_BLIND, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+9, col, "ÂѺ®Íð:", 2, TR2_RES_CONF, 0, im_f[1], vul_f[1]);
+display_player_flag_aux(row+0, col, "ÂÑ»À  :", TR_RES_ACID, TR_IM_ACID, im_f, vul_f);
+display_player_flag_aux(row+1, col, "ÂÑÅÅ·â:", TR_RES_ELEC, TR_IM_ELEC, im_f, vul_f);
+display_player_flag_aux(row+2, col, "ÂѲбê:", TR_RES_FIRE, TR_IM_FIRE, im_f, vul_f);
+display_player_flag_aux(row+3, col, "ÂÑÎ䵤:", TR_RES_COLD, TR_IM_COLD, im_f, vul_f);
+display_player_flag_aux(row+4, col, "ÂÑÆÇ  :", TR_RES_POIS, 0, im_f, vul_f);
+display_player_flag_aux(row+5, col, "ÂÑÁ®¸÷:", TR_RES_LITE, 0, im_f, vul_f);
+display_player_flag_aux(row+6, col, "ÂѰŹõ:", TR_RES_DARK, 0, im_f, vul_f);
+display_player_flag_aux(row+7, col, "ÂÑÇËÊÒ:", TR_RES_SHARDS, 0, im_f, vul_f);
+display_player_flag_aux(row+8, col, "ÂÑÌÕÌÜ:", TR_RES_BLIND, 0, im_f, vul_f);
+display_player_flag_aux(row+9, col, "ÂѺ®Íð:", TR_RES_CONF, 0, im_f, vul_f);
 #else
-       display_player_flag_aux(row+0, col, "Acid  :", 2, TR2_RES_ACID, TR2_IM_ACID, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+1, col, "Elec  :", 2, TR2_RES_ELEC, TR2_IM_ELEC, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+2, col, "Fire  :", 2, TR2_RES_FIRE, TR2_IM_FIRE, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+3, col, "Cold  :", 2, TR2_RES_COLD, TR2_IM_COLD, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+4, col, "Poison:", 2, TR2_RES_POIS, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+5, col, "Light :", 2, TR2_RES_LITE, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+6, col, "Dark  :", 2, TR2_RES_DARK, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+7, col, "Shard :", 2, TR2_RES_SHARDS, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+8, col, "Blind :", 2, TR2_RES_BLIND, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+9, col, "Conf  :", 2, TR2_RES_CONF, 0, im_f[1], vul_f[1]);
+       display_player_flag_aux(row+0, col, "Acid  :", TR_RES_ACID, TR_IM_ACID, im_f, vul_f);
+       display_player_flag_aux(row+1, col, "Elec  :", TR_RES_ELEC, TR_IM_ELEC, im_f, vul_f);
+       display_player_flag_aux(row+2, col, "Fire  :", TR_RES_FIRE, TR_IM_FIRE, im_f, vul_f);
+       display_player_flag_aux(row+3, col, "Cold  :", TR_RES_COLD, TR_IM_COLD, im_f, vul_f);
+       display_player_flag_aux(row+4, col, "Poison:", TR_RES_POIS, 0, im_f, vul_f);
+       display_player_flag_aux(row+5, col, "Light :", TR_RES_LITE, 0, im_f, vul_f);
+       display_player_flag_aux(row+6, col, "Dark  :", TR_RES_DARK, 0, im_f, vul_f);
+       display_player_flag_aux(row+7, col, "Shard :", TR_RES_SHARDS, 0, im_f, vul_f);
+       display_player_flag_aux(row+8, col, "Blind :", TR_RES_BLIND, 0, im_f, vul_f);
+       display_player_flag_aux(row+9, col, "Conf  :", TR_RES_CONF, 0, im_f, vul_f);
 #endif
 
 
@@ -3035,27 +3053,27 @@ display_player_flag_aux(row+9, col, "
        c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col+8);
 
 #ifdef JP
-display_player_flag_aux(row+0, col, "Âѹ첻:", 2, TR2_RES_SOUND, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+1, col, "ÂÑÃϹö:", 2, TR2_RES_NETHER, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+2, col, "ÂÑ°øº®:", 2, TR2_RES_NEXUS, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+3, col, "ÂÑ¥«¥ª:", 2, TR2_RES_CHAOS, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+4, col, "ÂÑÎô²½:", 2, TR2_RES_DISEN, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+5, col, "ÂѶ²ÉÝ:", 2, TR2_RES_FEAR, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+6, col, "È¿¼Í  :", 2, TR2_REFLECT, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+7, col, "²Ð±ê¥ª:", 3, TR3_SH_FIRE, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+8, col, "Åŵ¤¥ª:", 3, TR3_SH_ELEC, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+9, col, "Î䵤¥ª:", 3, TR3_SH_COLD, 0, im_f[2], vul_f[2]);
+display_player_flag_aux(row+0, col, "Âѹ첻:", TR_RES_SOUND, 0, im_f, vul_f);
+display_player_flag_aux(row+1, col, "ÂÑÃϹö:", TR_RES_NETHER, 0, im_f, vul_f);
+display_player_flag_aux(row+2, col, "ÂÑ°øº®:", TR_RES_NEXUS, 0, im_f, vul_f);
+display_player_flag_aux(row+3, col, "ÂÑ¥«¥ª:", TR_RES_CHAOS, 0, im_f, vul_f);
+display_player_flag_aux(row+4, col, "ÂÑÎô²½:", TR_RES_DISEN, 0, im_f, vul_f);
+display_player_flag_aux(row+5, col, "ÂѶ²ÉÝ:", TR_RES_FEAR, 0, im_f, vul_f);
+display_player_flag_aux(row+6, col, "È¿¼Í  :", TR_REFLECT, 0, im_f, vul_f);
+display_player_flag_aux(row+7, col, "²Ð±ê¥ª:", TR_SH_FIRE, 0, im_f, vul_f);
+display_player_flag_aux(row+8, col, "Åŵ¤¥ª:", TR_SH_ELEC, 0, im_f, vul_f);
+display_player_flag_aux(row+9, col, "Î䵤¥ª:", TR_SH_COLD, 0, im_f, vul_f);
 #else
-       display_player_flag_aux(row+0, col, "Sound :", 2, TR2_RES_SOUND, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+1, col, "Nether:", 2, TR2_RES_NETHER, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+2, col, "Nexus :", 2, TR2_RES_NEXUS, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+3, col, "Chaos :", 2, TR2_RES_CHAOS, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+4, col, "Disnch:", 2, TR2_RES_DISEN, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+5, col, "Fear  :", 2, TR2_RES_FEAR, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+6, col, "Reflct:", 2, TR2_REFLECT, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+7, col, "AuFire:", 3, TR3_SH_FIRE, 0, im_f[2], vul_f[2]);
-       display_player_flag_aux(row+8, col, "AuElec:", 3, TR3_SH_ELEC, 0, im_f[2], vul_f[2]);
-       display_player_flag_aux(row+9, col, "AuCold:", 3, TR3_SH_COLD, 0, im_f[2], vul_f[2]);
+       display_player_flag_aux(row+0, col, "Sound :", TR_RES_SOUND, 0, im_f, vul_f);
+       display_player_flag_aux(row+1, col, "Nether:", TR_RES_NETHER, 0, im_f, vul_f);
+       display_player_flag_aux(row+2, col, "Nexus :", TR_RES_NEXUS, 0, im_f, vul_f);
+       display_player_flag_aux(row+3, col, "Chaos :", TR_RES_CHAOS, 0, im_f, vul_f);
+       display_player_flag_aux(row+4, col, "Disnch:", TR_RES_DISEN, 0, im_f, vul_f);
+       display_player_flag_aux(row+5, col, "Fear  :", TR_RES_FEAR, 0, im_f, vul_f);
+       display_player_flag_aux(row+6, col, "Reflct:", TR_REFLECT, 0, im_f, vul_f);
+       display_player_flag_aux(row+7, col, "AuFire:", TR_SH_FIRE, 0, im_f, vul_f);
+       display_player_flag_aux(row+8, col, "AuElec:", TR_SH_ELEC, 0, im_f, vul_f);
+       display_player_flag_aux(row+9, col, "AuCold:", TR_SH_COLD, 0, im_f, vul_f);
 #endif
 
 
@@ -3069,27 +3087,27 @@ display_player_flag_aux(row+9, col, "
        c_put_str(TERM_WHITE, "abcdefghijkl@", row-1, col+12);
 
 #ifdef JP
-display_player_flag_aux(row+0, col, "²Ã®      :", 1, TR1_SPEED, 0, im_f[0], vul_f[0]);
-display_player_flag_aux(row+1, col, "ÂÑËãáã    :", 2, TR2_FREE_ACT, 0, im_f[1], vul_f[1]);
-display_player_flag_aux(row+2, col, "Æ©ÌÀÂλëǧ:", 3, TR3_SEE_INVIS, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+3, col, "·Ð¸³ÃÍÊÝ»ý:", 2, TR2_HOLD_LIFE, 0, im_f[2], vul_f[1]);
-display_player_flag_aux(row+4, col, "¥Æ¥ì¥Ñ¥·¡¼:", 3, TR3_TELEPATHY, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+5, col, "Ãپò½    :", 3, TR3_SLOW_DIGEST, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+6, col, "µÞ²óÉü    :", 3, TR3_REGEN, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+7, col, "ÉâÍ·      :", 3, TR3_FEATHER, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+8, col, "±Ê±ó¸÷¸»  :", 3, TR3_LITE, 0, im_f[2], vul_f[2]);
-display_player_flag_aux(row+9, col, "¼ö¤¤      :", 4, (TRC_CURSED | TRC_HEAVY_CURSE), TRC_PERMA_CURSE, im_f[2], vul_f[2]);
-#else
-       display_player_flag_aux(row+0, col, "Speed     :", 1, TR1_SPEED, 0, im_f[0], vul_f[0]);
-       display_player_flag_aux(row+1, col, "FreeAction:", 2, TR2_FREE_ACT, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+2, col, "SeeInvisi.:", 3, TR3_SEE_INVIS, 0, im_f[2], vul_f[2]);
-       display_player_flag_aux(row+3, col, "Hold Life :", 2, TR2_HOLD_LIFE, 0, im_f[1], vul_f[1]);
-       display_player_flag_aux(row+4, col, "Telepathy :", 3, TR3_TELEPATHY, 0, im_f[2], vul_f[2]);
-       display_player_flag_aux(row+5, col, "SlowDigest:", 3, TR3_SLOW_DIGEST, 0, im_f[2], vul_f[2]);
-       display_player_flag_aux(row+6, col, "Regene.   :", 3, TR3_REGEN, 0, im_f[2], vul_f[2]);
-       display_player_flag_aux(row+7, col, "Levitation:", 3, TR3_FEATHER, 0, im_f[2], vul_f[2]);
-       display_player_flag_aux(row+8, col, "Perm Lite :", 3, TR3_LITE, 0, im_f[2], vul_f[2]);
-       display_player_flag_aux(row+9, col, "Cursed    :", 4, (TRC_CURSED | TRC_HEAVY_CURSE), TRC_PERMA_CURSE, im_f[2], vul_f[2]);
+display_player_flag_aux(row+0, col, "²Ã®      :", TR_SPEED, 0, im_f, vul_f);
+display_player_flag_aux(row+1, col, "ÂÑËãáã    :", TR_FREE_ACT, 0, im_f, vul_f);
+display_player_flag_aux(row+2, col, "Æ©ÌÀÂλëǧ:", TR_SEE_INVIS, 0, im_f, vul_f);
+display_player_flag_aux(row+3, col, "·Ð¸³ÃÍÊÝ»ý:", TR_HOLD_LIFE, 0, im_f, vul_f);
+display_player_flag_aux(row+4, col, "¥Æ¥ì¥Ñ¥·¡¼:", TR_TELEPATHY, 0, im_f, vul_f);
+display_player_flag_aux(row+5, col, "Ãپò½    :", TR_SLOW_DIGEST, 0, im_f, vul_f);
+display_player_flag_aux(row+6, col, "µÞ²óÉü    :", TR_REGEN, 0, im_f, vul_f);
+display_player_flag_aux(row+7, col, "ÉâÍ·      :", TR_FEATHER, 0, im_f, vul_f);
+display_player_flag_aux(row+8, col, "±Ê±ó¸÷¸»  :", TR_LITE, 0, im_f, vul_f);
+display_player_flag_aux(row+9, col, "¼ö¤¤      :", -1, -1, im_f, vul_f);
+#else
+       display_player_flag_aux(row+0, col, "Speed     :", TR_SPEED, 0, im_f, vul_f);
+       display_player_flag_aux(row+1, col, "FreeAction:", TR_FREE_ACT, 0, im_f, vul_f);
+       display_player_flag_aux(row+2, col, "SeeInvisi.:", TR_SEE_INVIS, 0, im_f, vul_f);
+       display_player_flag_aux(row+3, col, "Hold Life :", TR_HOLD_LIFE, 0, im_f, vul_f);
+       display_player_flag_aux(row+4, col, "Telepathy :", TR_TELEPATHY, 0, im_f, vul_f);
+       display_player_flag_aux(row+5, col, "SlowDigest:", TR_SLOW_DIGEST, 0, im_f, vul_f);
+       display_player_flag_aux(row+6, col, "Regene.   :", TR_REGEN, 0, im_f, vul_f);
+       display_player_flag_aux(row+7, col, "Levitation:", TR_FEATHER, 0, im_f, vul_f);
+       display_player_flag_aux(row+8, col, "Perm Lite :", TR_LITE, 0, im_f, vul_f);
+       display_player_flag_aux(row+9, col, "Cursed    :", -1, -1, im_f, vul_f);
 #endif
 
 }
@@ -3169,7 +3187,7 @@ static void display_player_stat_info(void)
        int row, col;
 
        object_type *o_ptr;
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        s16b k_idx;
 
        byte a;
@@ -3308,7 +3326,7 @@ c_put_str(TERM_L_GREEN, "ǽ
                k_idx = o_ptr->k_idx;
 
                /* Acquire "known" flags */
-               object_flags_known(o_ptr, &f1, &f2, &f3);
+               object_flags_known(o_ptr, flgs);
 
                /* Initialize color based of sign of pval. */
                for (stat = 0; stat < 6; stat++)
@@ -3318,7 +3336,7 @@ c_put_str(TERM_L_GREEN, "ǽ
                        c = '.';
 
                        /* Boost */
-                       if (f1 & 1 << stat)
+                       if (have_flag(flgs, stat))
                        {
                                /* Default */
                                c = '*';
@@ -3333,7 +3351,7 @@ c_put_str(TERM_L_GREEN, "ǽ
                                        if (o_ptr->pval < 10) c = '0' + o_ptr->pval;
                                }
 
-                               if (f2 & 1 << stat)
+                               if (have_flag(flgs, stat + TR_SUST_STR))
                                {
                                        /* Dark green for sustained stats */
                                        a = TERM_GREEN;
@@ -3351,7 +3369,7 @@ c_put_str(TERM_L_GREEN, "ǽ
                        }
 
                        /* Sustain */
-                       else if (f2 & 1 << stat)
+                       else if (have_flag(flgs, stat + TR_SUST_STR))
                        {
                                /* Dark green "s" */
                                a = TERM_GREEN;
@@ -3367,7 +3385,7 @@ c_put_str(TERM_L_GREEN, "ǽ
        }
 
        /* Player flags */
-       player_flags(&f1, &f2, &f3);
+       player_flags(flgs);
 
        /* Check stats */
        for (stat = 0; stat < 6; stat++)
@@ -3446,7 +3464,7 @@ c_put_str(TERM_L_GREEN, "ǽ
 
 
                /* Sustain */
-               if (f2 & 1<<stat)
+               if (have_flag(flgs, stat + TR_SUST_STR))
                {
                        /* Dark green "s" */
                        a = TERM_GREEN;
@@ -3712,7 +3730,7 @@ static void display_player_ben(void)
 
        object_type *o_ptr;
 
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        u16b b[6];
        u16b color[6];
@@ -3729,52 +3747,52 @@ static void display_player_ben(void)
                o_ptr = &inventory[i];
 
                /* Known object flags */
-               object_flags_known(o_ptr, &f1, &f2, &f3);
+               object_flags_known(o_ptr, flgs);
 
 
-               if ((prace_is_(RACE_S_FAIRY)) && (f3 & TR3_AGGRAVATE))
+               if ((prace_is_(RACE_S_FAIRY)) && (have_flag(flgs, TR_AGGRAVATE)))
                {
-                       f3 &= ~(TR3_AGGRAVATE);
-                       f1 |= TR1_STEALTH;
+                       remove_flag(flgs, TR_AGGRAVATE);
+                       add_flag(flgs, TR_STEALTH);
                }
 
                /* Incorporate */
-               b[0] |= (f1 & 0xFFFF);
-               b[1] |= (f1 >> 16);
-               b[2] |= (f2 & 0xFFFF);
-               b[3] |= (f2 >> 16);
-               b[4] |= (f3 & 0xFFFF);
-               b[5] |= (f3 >> 16);
+               b[0] |= (flgs[0] & 0xFFFF);
+               b[1] |= (flgs[0] >> 16);
+               b[2] |= (flgs[1] & 0xFFFF);
+               b[3] |= (flgs[1] >> 16);
+               b[4] |= (flgs[2] & 0xFFFF);
+               b[5] |= (flgs[2] >> 16);
        }
 
 
        /* Player flags */
-       player_flags(&f1, &f2, &f3);
+       player_flags(flgs);
 
        /* Incorporate */
-       b[0] |= (f1 & 0xFFFF);
-       b[1] |= (f1 >> 16);
-       b[2] |= (f2 & 0xFFFF);
-       b[3] |= (f2 >> 16);
-       b[4] |= (f3 & 0xFFFF);
-       b[5] |= (f3 >> 16);
+       b[0] |= (flgs[0] & 0xFFFF);
+       b[1] |= (flgs[0] >> 16);
+       b[2] |= (flgs[1] & 0xFFFF);
+       b[3] |= (flgs[1] >> 16);
+       b[4] |= (flgs[2] & 0xFFFF);
+       b[5] |= (flgs[2] >> 16);
 
        /* Player flags */
-       tim_player_flags(&f1, &f2, &f3, FALSE);
+       tim_player_flags(flgs, FALSE);
 
        /* Incorporate */
-       b[0] |= (f1 & 0xFFFF);
-       b[1] |= (f1 >> 16);
-       b[2] |= (f2 & 0xFFFF);
-       b[3] |= (f2 >> 16);
-       b[4] |= (f3 & 0xFFFF);
-       b[5] |= (f3 >> 16);
-       color[0] = (u16b)(f1 & 0xFFFF);
-       color[1] = (u16b)(f1 >> 16);
-       color[2] = (u16b)(f2 & 0xFFFF);
-       color[3] = (u16b)(f2 >> 16);
-       color[4] = (u16b)(f3 & 0xFFFF);
-       color[5] = (u16b)(f3 >> 16);
+       b[0] |= (flgs[0] & 0xFFFF);
+       b[1] |= (flgs[0] >> 16);
+       b[2] |= (flgs[1] & 0xFFFF);
+       b[3] |= (flgs[1] >> 16);
+       b[4] |= (flgs[2] & 0xFFFF);
+       b[5] |= (flgs[2] >> 16);
+       color[0] = (u16b)(flgs[0] & 0xFFFF);
+       color[1] = (u16b)(flgs[0] >> 16);
+       color[2] = (u16b)(flgs[1] & 0xFFFF);
+       color[3] = (u16b)(flgs[1] >> 16);
+       color[4] = (u16b)(flgs[2] & 0xFFFF);
+       color[5] = (u16b)(flgs[2] >> 16);
 
        /* Scan cols */
        for (x = 0; x < 6; x++)
@@ -3827,7 +3845,7 @@ static void display_player_ben_one(int mode)
 
        object_type *o_ptr;
 
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        u16b b[13][6];
        u16b color[6];
@@ -3842,21 +3860,21 @@ static void display_player_ben_one(int mode)
                /* Object */
                o_ptr = &inventory[i];
 
-               object_flags_known(o_ptr, &f1, &f2, &f3);
+               object_flags_known(o_ptr, flgs);
 
-               if ((prace_is_(RACE_S_FAIRY)) && (f3 & TR3_AGGRAVATE))
+               if ((prace_is_(RACE_S_FAIRY)) && (have_flag(flgs, TR_AGGRAVATE)))
                {
-                       f3 &= ~(TR3_AGGRAVATE);
-                       f1 |= TR1_STEALTH;
+                       remove_flag(flgs, TR_AGGRAVATE);
+                       add_flag(flgs, TR_STEALTH);
                }
 
                /* Incorporate */
-               b[n][0] = (u16b)(f1 & 0xFFFF);
-               b[n][1] = (u16b)(f1 >> 16);
-               b[n][2] = (u16b)(f2 & 0xFFFF);
-               b[n][3] = (u16b)(f2 >> 16);
-               b[n][4] = (u16b)(f3 & 0xFFFF);
-               b[n][5] = (u16b)(f3 >> 16);
+               b[n][0] = (u16b)(flgs[0] & 0xFFFF);
+               b[n][1] = (u16b)(flgs[0] >> 16);
+               b[n][2] = (u16b)(flgs[1] & 0xFFFF);
+               b[n][3] = (u16b)(flgs[1] >> 16);
+               b[n][4] = (u16b)(flgs[2] & 0xFFFF);
+               b[n][5] = (u16b)(flgs[2] >> 16);
        }
 
 
@@ -3864,32 +3882,32 @@ static void display_player_ben_one(int mode)
        n = 12;
 
        /* Player flags */
-       player_flags(&f1, &f2, &f3);
+       player_flags(flgs);
 
        /* Incorporate */
-       b[n][0] = (u16b)(f1 & 0xFFFF);
-       b[n][1] = (u16b)(f1 >> 16);
-       b[n][2] = (u16b)(f2 & 0xFFFF);
-       b[n][3] = (u16b)(f2 >> 16);
-       b[n][4] = (u16b)(f3 & 0xFFFF);
-       b[n][5] = (u16b)(f3 >> 16);
+       b[n][0] = (u16b)(flgs[0] & 0xFFFF);
+       b[n][1] = (u16b)(flgs[0] >> 16);
+       b[n][2] = (u16b)(flgs[1] & 0xFFFF);
+       b[n][3] = (u16b)(flgs[1] >> 16);
+       b[n][4] = (u16b)(flgs[2] & 0xFFFF);
+       b[n][5] = (u16b)(flgs[2] >> 16);
 
        /* Player flags */
-       tim_player_flags(&f1, &f2, &f3, FALSE);
+       tim_player_flags(flgs, FALSE);
 
        /* Incorporate */
-       b[n][0] |= (f1 & 0xFFFF);
-       b[n][1] |= (f1 >> 16);
-       b[n][2] |= (f2 & 0xFFFF);
-       b[n][3] |= (f2 >> 16);
-       b[n][4] |= (f3 & 0xFFFF);
-       b[n][5] |= (f3 >> 16);
-       color[0] = (u16b)(f1 & 0xFFFF);
-       color[1] = (u16b)(f1 >> 16);
-       color[2] = (u16b)(f2 & 0xFFFF);
-       color[3] = (u16b)(f2 >> 16);
-       color[4] = (u16b)(f3 & 0xFFFF);
-       color[5] = (u16b)(f3 >> 16);
+       b[n][0] |= (flgs[0] & 0xFFFF);
+       b[n][1] |= (flgs[0] >> 16);
+       b[n][2] |= (flgs[1] & 0xFFFF);
+       b[n][3] |= (flgs[1] >> 16);
+       b[n][4] |= (flgs[2] & 0xFFFF);
+       b[n][5] |= (flgs[3] >> 16);
+       color[0] = (u16b)(flgs[0] & 0xFFFF);
+       color[1] = (u16b)(flgs[0] >> 16);
+       color[2] = (u16b)(flgs[1] & 0xFFFF);
+       color[3] = (u16b)(flgs[1] >> 16);
+       color[4] = (u16b)(flgs[2] & 0xFFFF);
+       color[5] = (u16b)(flgs[2] >> 16);
 
 
        /* Scan cols */
index d4f5086..30bfc83 100644 (file)
@@ -1085,7 +1085,7 @@ void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
        char            tmp_val[MAX_NLEN+160];
        char            tmp_val2[MAX_NLEN+10];
 
-       u32b            f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        object_type     *bow_ptr;
 
@@ -1095,7 +1095,7 @@ void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
        monster_race *r_ptr = &r_info[o_ptr->pval];
 
        /* Extract some flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* See if the object is "aware" */
        if (object_aware_p(o_ptr) || (o_ptr->ident & IDENT_MENTAL)) aware = TRUE;
@@ -1638,6 +1638,12 @@ void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
                }
        }
 
+       /* Use full name from k_info or a_info */
+       if (aware && have_flag(flgs, TR_FULL_NAME))
+       {
+               if (known && o_ptr->name1) basenm = a_name + a_info[o_ptr->name1].name;
+               else basenm = get_object_name(o_ptr);
+       }
 
        /* Start dumping the result */
        t = tmp_val;
@@ -1927,7 +1933,7 @@ void object_desc(char *buf, object_type *o_ptr, int pref, int mode)
        }
 
        /* Hack -- Append "Artifact" or "Special" names */
-       if (known)
+       if (known && !have_flag(flgs, TR_FULL_NAME))
        {
                /* Is it a new random artifact ? */
                if (o_ptr->art_name)
@@ -2133,7 +2139,7 @@ t = object_desc_str(t, "(
 
 
        /* Display the item like a weapon */
-       if (f3 & (TR3_SHOW_MODS)) show_weapon = TRUE;
+       if (have_flag(flgs, TR_SHOW_MODS)) show_weapon = TRUE;
 
        /* Display the item like a weapon */
        if (o_ptr->to_h && o_ptr->to_d) show_weapon = TRUE;
@@ -2173,7 +2179,7 @@ t = object_desc_str(t, "(
                power = (o_ptr->sval % 10);
 
                /* Apply the "Extra Might" flag */
-               if (f3 & (TR3_XTRA_MIGHT)) power++;
+               if (have_flag(flgs, TR_XTRA_MIGHT)) power++;
 
                /* Append a special "damage" string */
                t = object_desc_chr(t, ' ');
@@ -2427,7 +2433,7 @@ t = object_desc_str(t, "(
        }
 
        /* Dump "pval" flags for wearable items */
-       if (known && (f1 & (TR1_PVAL_MASK)))
+       if (known && (have_pval_flags(flgs)))
        {
                /* Start the display */
                t = object_desc_chr(t, ' ');
@@ -2437,13 +2443,13 @@ t = object_desc_str(t, "(
                t = object_desc_int(t, o_ptr->pval);
 
                /* Do not display the "pval" flags */
-               if (f3 & (TR3_HIDE_TYPE))
+               if (have_flag(flgs, TR_HIDE_TYPE))
                {
                        /* Nothing */
                }
 
                /* Speed */
-               else if (f1 & (TR1_SPEED))
+               else if (have_flag(flgs, TR_SPEED))
                {
                        /* Dump " to speed" */
 #ifdef JP
@@ -2455,7 +2461,7 @@ t = object_desc_str(t, "
                }
 
                /* Attack speed */
-               else if (f1 & (TR1_BLOWS))
+               else if (have_flag(flgs, TR_BLOWS))
                {
                        /* Add " attack" */
 #ifdef JP
@@ -2470,7 +2476,7 @@ t = object_desc_str(t, "
                }
 
                /* Stealth */
-               else if (f1 & (TR1_STEALTH))
+               else if (have_flag(flgs, TR_STEALTH))
                {
                        /* Dump " to stealth" */
 #ifdef JP
@@ -2482,7 +2488,7 @@ t = object_desc_str(t, "
                }
 
                /* Search */
-               else if (f1 & (TR1_SEARCH))
+               else if (have_flag(flgs, TR_SEARCH))
                {
                        /* Dump " to searching" */
 #ifdef JP
@@ -2494,7 +2500,7 @@ t = object_desc_str(t, "õ
                }
 
                /* Infravision */
-               else if (f1 & (TR1_INFRA))
+               else if (have_flag(flgs, TR_INFRA))
                {
                        /* Dump " to infravision" */
 #ifdef JP
@@ -2506,7 +2512,7 @@ t = object_desc_str(t, "
                }
 
                /* Tunneling */
-               else if (f1 & (TR1_TUNNEL))
+               else if (have_flag(flgs, TR_TUNNEL))
                {
                        /* Nothing */
                }
index 1958d33..c54d48b 100644 (file)
@@ -841,7 +841,7 @@ static bool cast_hissatsu_spell(int spell)
        case 21:
        {
                int total_damage = 0, basedam, i;
-               u32b f1, f2, f3;
+               u32b flgs[TR_FLAG_SIZE];
                object_type *o_ptr;
                if (!get_aim_dir(&dir)) return FALSE;
 #ifdef JP
@@ -857,14 +857,14 @@ static bool cast_hissatsu_spell(int spell)
                        o_ptr = &inventory[INVEN_RARM+i];
                        basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
                        damage = o_ptr->to_d * 100;
-                       object_flags(o_ptr, &f1, &f2, &f3);
+                       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 (object_known_p(o_ptr) && (f1 & TR1_VORPAL))
+                       else if (object_known_p(o_ptr) && (have_flag(flgs, TR_VORPAL)))
                        {
                                /* vorpal flag only */
                                basedam *= 11;
@@ -1100,7 +1100,7 @@ msg_print("
        {
                int total_damage = 0, basedam, i;
                int y, x;
-               u32b f1, f2, f3;
+               u32b flgs[TR_FLAG_SIZE];
                object_type *o_ptr;
 
                if (!get_rep_dir2(&dir)) return FALSE;
@@ -1128,14 +1128,14 @@ msg_print("
                        o_ptr = &inventory[INVEN_RARM+i];
                        basedam = (o_ptr->dd * (o_ptr->ds + 1)) * 50;
                        damage = o_ptr->to_d * 100;
-                       object_flags(o_ptr, &f1, &f2, &f3);
+                       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 (object_known_p(o_ptr) && (f1 & TR1_VORPAL))
+                       else if (object_known_p(o_ptr) && (have_flag(flgs, TR_VORPAL)))
                        {
                                /* vorpal flag only */
                                basedam *= 11;
index 6e5696c..2be2ce0 100644 (file)
@@ -491,7 +491,7 @@ static cptr r_info_flags9[] =
 /*
  * Object flags
  */
-static cptr k_info_flags1[] =
+static cptr k_info_flags[] =
 {
        "STR",
        "INT",
@@ -524,14 +524,8 @@ static cptr k_info_flags1[] =
        "BRAND_ACID",
        "BRAND_ELEC",
        "BRAND_FIRE",
-       "BRAND_COLD"
-};
+       "BRAND_COLD",
 
-/*
- * Object flags
- */
-static cptr k_info_flags2[] =
-{
        "SUST_STR",
        "SUST_INT",
        "SUST_WIS",
@@ -563,14 +557,8 @@ static cptr k_info_flags2[] =
        "RES_NETHER",
        "RES_NEXUS",
        "RES_CHAOS",
-       "RES_DISEN"
-};
+       "RES_DISEN",
 
-/*
- * Object flags
- */
-static cptr k_info_flags3[] =
-{
        "SH_FIRE",
        "SH_ELEC",
        "SLAY_HUMAN",
@@ -600,9 +588,31 @@ static cptr k_info_flags3[] =
        "TELEPORT",
        "AGGRAVATE",
        "BLESSED",
-       "XXX1",
-       "XXX2",
        "XXX3",
+       "XXX4",
+       "XXX5",
+
+       "KILL_ANIMAL",
+       "KILL_EVIL",
+       "KILL_UNDEAD",
+       "KILL_DEMON",
+       "KILL_ORC",
+       "KILL_TROLL",
+       "KILL_GIANT",
+       "KILL_HUMAN",
+       "ESP_ANIMAL",
+       "ESP_UNDEAD",
+       "ESP_DEMON",
+       "ESP_ORC",
+       "ESP_TROLL",
+       "ESP_GIANT",
+       "ESP_DRAGON",
+       "ESP_HUMAN",
+       "ESP_EVIL",
+       "ESP_GOOD",
+       "ESP_NONLIVING",
+       "ESP_UNIQUE",
+       "FULL_NAME",
 };
 
 
@@ -1259,32 +1269,12 @@ static errr grab_one_kind_flag(object_kind *k_ptr, cptr what)
 {
        int i;
 
-       /* Check flags1 */
-       for (i = 0; i < 32; i++)
+       /* Check flags */
+       for (i = 0; i < TR_FLAG_MAX; i++)
        {
-               if (streq(what, k_info_flags1[i]))
+               if (streq(what, k_info_flags[i]))
                {
-                       k_ptr->flags1 |= (1L << i);
-                       return (0);
-               }
-       }
-
-       /* Check flags2 */
-       for (i = 0; i < 32; i++)
-       {
-               if (streq(what, k_info_flags2[i]))
-               {
-                       k_ptr->flags2 |= (1L << i);
-                       return (0);
-               }
-       }
-
-       /* Check flags3 */
-       for (i = 0; i < 32; i++)
-       {
-               if (streq(what, k_info_flags3[i]))
-               {
-                       k_ptr->flags3 |= (1L << i);
+                       add_flag(k_ptr->flags, i);
                        return (0);
                }
        }
@@ -1547,32 +1537,12 @@ static errr grab_one_artifact_flag(artifact_type *a_ptr, cptr what)
 {
        int i;
 
-       /* Check flags1 */
-       for (i = 0; i < 32; i++)
-       {
-               if (streq(what, k_info_flags1[i]))
-               {
-                       a_ptr->flags1 |= (1L << i);
-                       return (0);
-               }
-       }
-
-       /* Check flags2 */
-       for (i = 0; i < 32; i++)
+       /* Check flags */
+       for (i = 0; i < TR_FLAG_MAX; i++)
        {
-               if (streq(what, k_info_flags2[i]))
+               if (streq(what, k_info_flags[i]))
                {
-                       a_ptr->flags2 |= (1L << i);
-                       return (0);
-               }
-       }
-
-       /* Check flags3 */
-       for (i = 0; i < 32; i++)
-       {
-               if (streq(what, k_info_flags3[i]))
-               {
-                       a_ptr->flags3 |= (1L << i);
+                       add_flag(a_ptr->flags, i);
                        return (0);
                }
        }
@@ -1646,10 +1616,10 @@ errr parse_a_info(char *buf, header *head)
                a_ptr = &a_info[i];
 
                /* Ignore everything */
-               a_ptr->flags3 |= (TR3_IGNORE_ACID);
-               a_ptr->flags3 |= (TR3_IGNORE_ELEC);
-               a_ptr->flags3 |= (TR3_IGNORE_FIRE);
-               a_ptr->flags3 |= (TR3_IGNORE_COLD);
+               add_flag(a_ptr->flags, TR_IGNORE_ACID);
+               add_flag(a_ptr->flags, TR_IGNORE_ELEC);
+               add_flag(a_ptr->flags, TR_IGNORE_FIRE);
+               add_flag(a_ptr->flags, TR_IGNORE_COLD);
 #ifdef JP
                /* Store the name */
                if (!add_name(&a_ptr->name, head, s)) return (7);
@@ -1788,32 +1758,12 @@ static bool grab_one_ego_item_flag(ego_item_type *e_ptr, cptr what)
 {
        int i;
 
-       /* Check flags1 */
-       for (i = 0; i < 32; i++)
-       {
-               if (streq(what, k_info_flags1[i]))
-               {
-                       e_ptr->flags1 |= (1L << i);
-                       return (0);
-               }
-       }
-
-       /* Check flags2 */
-       for (i = 0; i < 32; i++)
-       {
-               if (streq(what, k_info_flags2[i]))
-               {
-                       e_ptr->flags2 |= (1L << i);
-                       return (0);
-               }
-       }
-
-       /* Check flags3 */
-       for (i = 0; i < 32; i++)
+       /* Check flags */
+       for (i = 0; i < TR_FLAG_MAX; i++)
        {
-               if (streq(what, k_info_flags3[i]))
+               if (streq(what, k_info_flags[i]))
                {
-                       e_ptr->flags3 |= (1L << i);
+                       add_flag(e_ptr->flags, i);
                        return (0);
                }
        }
index 294bccd..629508e 100644 (file)
@@ -295,10 +295,12 @@ static void rd_item(object_type *o_ptr)
 
        rd_byte(&o_ptr->marked);
 
-       /* Old flags */
-       rd_u32b(&o_ptr->art_flags1);
-       rd_u32b(&o_ptr->art_flags2);
-       rd_u32b(&o_ptr->art_flags3);
+       /* Object flags */
+       rd_u32b(&o_ptr->art_flags[0]);
+       rd_u32b(&o_ptr->art_flags[1]);
+       rd_u32b(&o_ptr->art_flags[2]);
+       if (h_older_than(1, 3, 0, 0)) o_ptr->art_flags[3] = 0L;
+        else rd_u32b(&o_ptr->art_flags[3]);
 
        if (z_older_than(11, 0, 11))
        {
@@ -306,8 +308,8 @@ static void rd_item(object_type *o_ptr)
                if (o_ptr->ident & 0x40)
                {
                        o_ptr->curse_flags |= TRC_CURSED;
-                       if (o_ptr->art_flags3 & 0x40000000L) o_ptr->curse_flags |= TRC_HEAVY_CURSE;
-                       if (o_ptr->art_flags3 & 0x80000000L) o_ptr->curse_flags |= TRC_PERMA_CURSE;
+                       if (o_ptr->art_flags[2] & 0x40000000L) o_ptr->curse_flags |= TRC_HEAVY_CURSE;
+                       if (o_ptr->art_flags[2] & 0x80000000L) o_ptr->curse_flags |= TRC_PERMA_CURSE;
                        if (o_ptr->name1)
                        {
                                artifact_type *a_ptr = &a_info[o_ptr->name1];
@@ -321,7 +323,7 @@ static void rd_item(object_type *o_ptr)
                                if (e_ptr->gen_flags & (TRG_PERMA_CURSE)) o_ptr->curse_flags |= TRC_PERMA_CURSE;
                        }
                }
-               o_ptr->art_flags3 &= (0x1FFFFFFFL);
+               o_ptr->art_flags[2] &= (0x1FFFFFFFL);
        }
        else
        {
@@ -341,12 +343,12 @@ static void rd_item(object_type *o_ptr)
                {
                        switch (o_ptr->xtra2 % 6)
                        {
-                       case 0: o_ptr->art_flags2 |= (TR2_SUST_STR); break;
-                       case 1: o_ptr->art_flags2 |= (TR2_SUST_INT); break;
-                       case 2: o_ptr->art_flags2 |= (TR2_SUST_WIS); break;
-                       case 3: o_ptr->art_flags2 |= (TR2_SUST_DEX); break;
-                       case 4: o_ptr->art_flags2 |= (TR2_SUST_CON); break;
-                       case 5: o_ptr->art_flags2 |= (TR2_SUST_CHR); break;
+                       case 0: add_flag(o_ptr->art_flags, TR_SUST_STR); break;
+                       case 1: add_flag(o_ptr->art_flags, TR_SUST_INT); break;
+                       case 2: add_flag(o_ptr->art_flags, TR_SUST_WIS); break;
+                       case 3: add_flag(o_ptr->art_flags, TR_SUST_DEX); break;
+                       case 4: add_flag(o_ptr->art_flags, TR_SUST_CON); break;
+                       case 5: add_flag(o_ptr->art_flags, TR_SUST_CHR); break;
                        }
                        o_ptr->xtra2 = 0;
                }
@@ -354,17 +356,17 @@ static void rd_item(object_type *o_ptr)
                {
                        switch (o_ptr->xtra2 % 11)
                        {
-                       case  0: o_ptr->art_flags2 |= (TR2_RES_BLIND);  break;
-                       case  1: o_ptr->art_flags2 |= (TR2_RES_CONF);   break;
-                       case  2: o_ptr->art_flags2 |= (TR2_RES_SOUND);  break;
-                       case  3: o_ptr->art_flags2 |= (TR2_RES_SHARDS); break;
-                       case  4: o_ptr->art_flags2 |= (TR2_RES_NETHER); break;
-                       case  5: o_ptr->art_flags2 |= (TR2_RES_NEXUS);  break;
-                       case  6: o_ptr->art_flags2 |= (TR2_RES_CHAOS);  break;
-                       case  7: o_ptr->art_flags2 |= (TR2_RES_DISEN);  break;
-                       case  8: o_ptr->art_flags2 |= (TR2_RES_POIS);   break;
-                       case  9: o_ptr->art_flags2 |= (TR2_RES_DARK);   break;
-                       case 10: o_ptr->art_flags2 |= (TR2_RES_LITE);   break;
+                       case  0: add_flag(o_ptr->art_flags, TR_RES_BLIND);  break;
+                       case  1: add_flag(o_ptr->art_flags, TR_RES_CONF);   break;
+                       case  2: add_flag(o_ptr->art_flags, TR_RES_SOUND);  break;
+                       case  3: add_flag(o_ptr->art_flags, TR_RES_SHARDS); break;
+                       case  4: add_flag(o_ptr->art_flags, TR_RES_NETHER); break;
+                       case  5: add_flag(o_ptr->art_flags, TR_RES_NEXUS);  break;
+                       case  6: add_flag(o_ptr->art_flags, TR_RES_CHAOS);  break;
+                       case  7: add_flag(o_ptr->art_flags, TR_RES_DISEN);  break;
+                       case  8: add_flag(o_ptr->art_flags, TR_RES_POIS);   break;
+                       case  9: add_flag(o_ptr->art_flags, TR_RES_DARK);   break;
+                       case 10: add_flag(o_ptr->art_flags, TR_RES_LITE);   break;
                        }
                        o_ptr->xtra2 = 0;
                }               
@@ -372,14 +374,14 @@ static void rd_item(object_type *o_ptr)
                {
                        switch (o_ptr->xtra2 % 8)
                        {
-                       case 0: o_ptr->art_flags3 |= (TR3_FEATHER);     break;
-                       case 1: o_ptr->art_flags3 |= (TR3_LITE);        break;
-                       case 2: o_ptr->art_flags3 |= (TR3_SEE_INVIS);   break;
-                       case 3: o_ptr->art_flags3 |= (TR3_WARNING);     break;
-                       case 4: o_ptr->art_flags3 |= (TR3_SLOW_DIGEST); break;
-                       case 5: o_ptr->art_flags3 |= (TR3_REGEN);       break;
-                       case 6: o_ptr->art_flags2 |= (TR2_FREE_ACT);    break;
-                       case 7: o_ptr->art_flags2 |= (TR2_HOLD_LIFE);   break;
+                       case 0: add_flag(o_ptr->art_flags, TR_FEATHER);     break;
+                       case 1: add_flag(o_ptr->art_flags, TR_LITE);        break;
+                       case 2: add_flag(o_ptr->art_flags, TR_SEE_INVIS);   break;
+                       case 3: add_flag(o_ptr->art_flags, TR_WARNING);     break;
+                       case 4: add_flag(o_ptr->art_flags, TR_SLOW_DIGEST); break;
+                       case 5: add_flag(o_ptr->art_flags, TR_REGEN);       break;
+                       case 6: add_flag(o_ptr->art_flags, TR_FREE_ACT);    break;
+                       case 7: add_flag(o_ptr->art_flags, TR_HOLD_LIFE);   break;
                        }
                        o_ptr->xtra2 = 0;
                }
@@ -448,10 +450,10 @@ static void rd_item(object_type *o_ptr)
 
        if (z_older_than(10, 4, 9))
        {
-               if (o_ptr->art_flags1 & TR1_MAGIC_MASTERY)
+               if (have_flag(o_ptr->art_flags, TR_MAGIC_MASTERY))
                {
-                       o_ptr->art_flags1 &= ~(TR1_MAGIC_MASTERY);
-                       o_ptr->art_flags3 |= (TR3_DEC_MANA);
+                       remove_flag(o_ptr->art_flags, TR_MAGIC_MASTERY);
+                       add_flag(o_ptr->art_flags, TR_DEC_MANA);
                }
        }
 
index 73f80f7..526fa21 100644 (file)
@@ -3572,7 +3572,7 @@ msg_print("
                                if ((r_ptr->flags2 & (RF2_TAKE_ITEM | RF2_KILL_ITEM)) &&
                                         (!is_pet(m_ptr) || (p_ptr->pet_extra_flags & PF_PICKUP_ITEMS)))
                                {
-                                       u32b f1, f2, f3;
+                                       u32b flgs[TR_FLAG_SIZE];
 
                                        u32b flg2 = 0L;
                                        u32b flg3 = 0L;
@@ -3581,7 +3581,7 @@ msg_print("
                                        char o_name[MAX_NLEN];
 
                                        /* Extract some flags */
-                                       object_flags(o_ptr, &f1, &f2, &f3);
+                                       object_flags(o_ptr, flgs);
 
                                        /* Acquire the object name */
                                        object_desc(o_name, o_ptr, TRUE, 3);
@@ -3590,16 +3590,24 @@ msg_print("
                                        monster_desc(m_name, m_ptr, 0x04);
 
                                        /* React to objects that hurt the monster */
-                                       if (f1 & TR1_KILL_DRAGON) flg3 |= (RF3_DRAGON);
-                                       if (f1 & TR1_SLAY_DRAGON) flg3 |= (RF3_DRAGON);
-                                       if (f1 & TR1_SLAY_TROLL)  flg3 |= (RF3_TROLL);
-                                       if (f1 & TR1_SLAY_GIANT)  flg3 |= (RF3_GIANT);
-                                       if (f1 & TR1_SLAY_ORC)    flg3 |= (RF3_ORC);
-                                       if (f1 & TR1_SLAY_DEMON)  flg3 |= (RF3_DEMON);
-                                       if (f1 & TR1_SLAY_UNDEAD) flg3 |= (RF3_UNDEAD);
-                                       if (f1 & TR1_SLAY_ANIMAL) flg3 |= (RF3_ANIMAL);
-                                       if (f1 & TR1_SLAY_EVIL)   flg3 |= (RF3_EVIL);
-                                       if (f3 & TR3_SLAY_HUMAN)  flg2 |= (RF2_HUMAN);
+                                       if (have_flag(flgs, TR_KILL_DRAGON)) flg3 |= (RF3_DRAGON);
+                                       if (have_flag(flgs, TR_SLAY_DRAGON)) flg3 |= (RF3_DRAGON);
+                                       if (have_flag(flgs, TR_SLAY_TROLL))  flg3 |= (RF3_TROLL);
+                                       if (have_flag(flgs, TR_KILL_TROLL))  flg3 |= (RF3_TROLL);
+                                       if (have_flag(flgs, TR_KILL_GIANT))  flg3 |= (RF3_GIANT);
+                                       if (have_flag(flgs, TR_SLAY_GIANT))  flg3 |= (RF3_GIANT);
+                                       if (have_flag(flgs, TR_SLAY_ORC))    flg3 |= (RF3_ORC);
+                                       if (have_flag(flgs, TR_KILL_ORC))    flg3 |= (RF3_ORC);
+                                       if (have_flag(flgs, TR_SLAY_DEMON))  flg3 |= (RF3_DEMON);
+                                       if (have_flag(flgs, TR_KILL_DEMON))  flg3 |= (RF3_DEMON);
+                                       if (have_flag(flgs, TR_SLAY_UNDEAD)) flg3 |= (RF3_UNDEAD);
+                                       if (have_flag(flgs, TR_KILL_UNDEAD)) flg3 |= (RF3_UNDEAD);
+                                       if (have_flag(flgs, TR_SLAY_ANIMAL)) flg3 |= (RF3_ANIMAL);
+                                       if (have_flag(flgs, TR_KILL_ANIMAL)) flg3 |= (RF3_ANIMAL);
+                                       if (have_flag(flgs, TR_SLAY_EVIL))   flg3 |= (RF3_EVIL);
+                                       if (have_flag(flgs, TR_KILL_EVIL))   flg3 |= (RF3_EVIL);
+                                       if (have_flag(flgs, TR_SLAY_HUMAN))  flg2 |= (RF2_HUMAN);
+                                       if (have_flag(flgs, TR_KILL_HUMAN))  flg2 |= (RF2_HUMAN);
 
                                        /* The object cannot be picked up by the monster */
                                        if (artifact_p(o_ptr) || (r_ptr->flags3 & flg3) || (r_ptr->flags2 & flg2) ||
index b8ce8ac..9722571 100644 (file)
@@ -2308,6 +2308,105 @@ void update_mon(int m_idx, bool full)
                                        if (r_ptr->flags2 & (RF2_STUPID)) r_ptr->r_flags2 |= (RF2_STUPID);
                                }
                        }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_animal) && (r_ptr->flags3 & (RF3_ANIMAL)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_ANIMAL);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_undead) && (r_ptr->flags3 & (RF3_UNDEAD)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_UNDEAD);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_demon) && (r_ptr->flags3 & (RF3_DEMON)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_DEMON);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_orc) && (r_ptr->flags3 & (RF3_ORC)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_ORC);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_troll) && (r_ptr->flags3 & (RF3_TROLL)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_TROLL);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_giant) && (r_ptr->flags3 & (RF3_GIANT)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_GIANT);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_dragon) && (r_ptr->flags3 & (RF3_DRAGON)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_DRAGON);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_human) && (r_ptr->flags2 & (RF2_HUMAN)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags2 |= (RF2_HUMAN);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_evil) && (r_ptr->flags3 & (RF3_EVIL)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_EVIL);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_good) && (r_ptr->flags3 & (RF3_GOOD)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_GOOD);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_nonliving) && 
+                           (r_ptr->flags3 & (RF3_NONLIVING)) &&
+                           !(r_ptr->flags3 & (RF3_DEMON)) &&
+                           !(r_ptr->flags3 & (RF3_UNDEAD)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags3 |= (RF3_NONLIVING);
+
+                       }
+
+                       /* Magical sensing */
+                       if ((p_ptr->esp_unique) && (r_ptr->flags1 & (RF1_UNIQUE)))
+                       {
+                               flag = TRUE;
+                               r_ptr->r_flags1 |= (RF1_UNIQUE);
+
+                       }
                }
 
                /* Normal line of sight, and not blind */
index 471b6cb..81df737 100644 (file)
@@ -560,7 +560,7 @@ void curse_equipment(int chance, int heavy_chance)
        bool        changed = FALSE;
        int         curse_power = 0;
        u32b        new_curse;
-       u32b        o1, o2, o3;
+       u32b oflgs[TR_FLAG_SIZE];
        object_type *o_ptr = &inventory[INVEN_RARM + randint0(12)];
        char o_name[MAX_NLEN];
 
@@ -568,12 +568,12 @@ void curse_equipment(int chance, int heavy_chance)
 
        if (!o_ptr->k_idx) return;
 
-       object_flags(o_ptr, &o1, &o2, &o3);
+       object_flags(o_ptr, oflgs);
 
        object_desc(o_name, o_ptr, FALSE, 0);
 
        /* Extra, biased saving throw for blessed items */
-       if ((o3 & TR3_BLESSED) && (randint1(888) > chance))
+       if (have_flag(oflgs, TR_BLESSED) && (randint1(888) > chance))
        {
 #ifdef JP
 msg_format("%s¤Ï¼ö¤¤¤òÄ·¤ÍÊÖ¤·¤¿¡ª", o_name,
@@ -3583,7 +3583,7 @@ msg_format("%^s
                case 160+5:
                {
                        int i, oldfy, oldfx;
-                       u32b f1 = 0 , f2 = 0 , f3 = 0;
+                       u32b flgs[TR_FLAG_SIZE];
                        object_type *o_ptr;
 
                        oldfy = m_ptr->fy;
@@ -3605,9 +3605,9 @@ msg_format("%^s
                                        o_ptr = &inventory[i];
                                        if(!cursed_p(o_ptr))
                                        {
-                                               object_flags(o_ptr, &f1, &f2, &f3);
+                                               object_flags(o_ptr, flgs);
 
-                                               if((f3 & TR3_TELEPORT) || (p_ptr->muta1 & MUT1_VTELEPORT) || (p_ptr->pclass == CLASS_IMITATOR))
+                                               if((have_flag(flgs, TR_TELEPORT)) || (p_ptr->muta1 & MUT1_VTELEPORT) || (p_ptr->pclass == CLASS_IMITATOR))
                                                {
 #ifdef JP
                                                        if(get_check_strict("¤Ä¤¤¤Æ¤¤¤­¤Þ¤¹¤«¡©", CHECK_OKAY_CANCEL))
index 833c69f..c57426a 100644 (file)
@@ -3244,7 +3244,7 @@ msg_format("%^s
                        case 160+5:
                        {
                                int i, oldfy, oldfx;
-                               u32b f1 = 0 , f2 = 0 , f3 = 0;
+                               u32b flgs[TR_FLAG_SIZE];
                                object_type *o_ptr;
 
                                oldfy = m_ptr->fy;
@@ -3269,9 +3269,9 @@ msg_format("%^s
                                                o_ptr = &inventory[i];
                                                if(!cursed_p(o_ptr))
                                                {
-                                                       object_flags(o_ptr, &f1, &f2, &f3);
+                                                       object_flags(o_ptr, flgs);
 
-                                                       if((f3 & TR3_TELEPORT) || (p_ptr->muta1 & MUT1_VTELEPORT) || (p_ptr->pclass == CLASS_IMITATOR))
+                                                       if((have_flag(flgs, TR_TELEPORT)) || (p_ptr->muta1 & MUT1_VTELEPORT) || (p_ptr->pclass == CLASS_IMITATOR))
                                                        {
 #ifdef JP
                                                                if(get_check_strict("¤Ä¤¤¤Æ¤¤¤­¤Þ¤¹¤«¡©", CHECK_OKAY_CANCEL))
index 4b44a8f..fcd2d57 100644 (file)
@@ -99,23 +99,22 @@ void reset_visuals(void)
 /*
  * Obtain the "flags" for an item
  */
-void object_flags(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3)
+void object_flags(object_type *o_ptr, u32b flgs[TR_FLAG_SIZE])
 {
        object_kind *k_ptr = &k_info[o_ptr->k_idx];
+       int i;
 
        /* Base object */
-       (*f1) = k_ptr->flags1;
-       (*f2) = k_ptr->flags2;
-       (*f3) = k_ptr->flags3;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = k_ptr->flags[i];
 
        /* Artifact */
        if (o_ptr->name1)
        {
                artifact_type *a_ptr = &a_info[o_ptr->name1];
 
-               (*f1) = a_ptr->flags1;
-               (*f2) = a_ptr->flags2;
-               (*f3) = a_ptr->flags3;
+               for (i = 0; i < TR_FLAG_SIZE; i++)
+                       flgs[i] = a_ptr->flags[i];
        }
 
        /* Ego-item */
@@ -123,81 +122,71 @@ void object_flags(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3)
        {
                ego_item_type *e_ptr = &e_info[o_ptr->name2];
 
-               (*f1) |= e_ptr->flags1;
-               (*f2) |= e_ptr->flags2;
-               (*f3) |= e_ptr->flags3;
+               for (i = 0; i < TR_FLAG_SIZE; i++)
+                       flgs[i] |= e_ptr->flags[i];
 
                if ((o_ptr->name2 == EGO_LITE_AURA_FIRE) && !o_ptr->xtra4 && (o_ptr->sval <= SV_LITE_LANTERN))
                {
-                       (*f3) &= ~(TR3_SH_FIRE);
+                       remove_flag(flgs, TR_SH_FIRE);
                }
                else if ((o_ptr->name2 == EGO_LITE_INFRA) && !o_ptr->xtra4 && (o_ptr->sval <= SV_LITE_LANTERN))
                {
-                       (*f1) &= ~(TR1_INFRA);
+                       remove_flag(flgs, TR_INFRA);
                }
                else if ((o_ptr->name2 == EGO_LITE_EYE) && !o_ptr->xtra4 && (o_ptr->sval <= SV_LITE_LANTERN))
                {
-                       (*f2) &= ~(TR2_RES_BLIND);
-                       (*f3) &= ~(TR3_SEE_INVIS);
+                       remove_flag(flgs, TR_RES_BLIND);
+                       remove_flag(flgs, TR_SEE_INVIS);
                }
        }
 
        /* Random artifact ! */
-       if (o_ptr->art_flags1 || o_ptr->art_flags2 || o_ptr->art_flags3)
-       {
-               (*f1) |= o_ptr->art_flags1;
-               (*f2) |= o_ptr->art_flags2;
-               (*f3) |= o_ptr->art_flags3;
-       }
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] |= o_ptr->art_flags[i];
 
        if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
        {
-               if (o_ptr->xtra3 < 33)
-               {
-                       (*f1) |= (0x00000001 << (o_ptr->xtra3-1));
-               }
-               else if (o_ptr->xtra3 < 65)
+               if (o_ptr->xtra3 <= 96)
                {
-                       (*f2) |= (0x00000001 << (o_ptr->xtra3-33));
-               }
-               else if (o_ptr->xtra3 < 97)
-               {
-                       (*f3) |= (0x00000001 << (o_ptr->xtra3-65));
+                       add_flag(flgs, o_ptr->xtra3 - 1);
                }
                else if (o_ptr->xtra3 == ESSENCE_TMP_RES_ACID)
                {
-                       (*f2) |= TR2_RES_ACID;
+                       add_flag(flgs, TR_RES_ACID);
                }
                else if (o_ptr->xtra3 == ESSENCE_TMP_RES_ELEC)
                {
-                       (*f2) |= TR2_RES_ELEC;
+                       add_flag(flgs, TR_RES_ELEC);
                }
                else if (o_ptr->xtra3 == ESSENCE_TMP_RES_FIRE)
                {
-                       (*f2) |= TR2_RES_FIRE;
+                       add_flag(flgs, TR_RES_FIRE);
                }
                else if (o_ptr->xtra3 == ESSENCE_TMP_RES_COLD)
                {
-                       (*f2) |= TR2_RES_COLD;
+                       add_flag(flgs, TR_RES_COLD);
                }
                else if (o_ptr->xtra3 == ESSENCE_SH_FIRE)
                {
-                       (*f2) |= TR2_RES_FIRE;
-                       (*f3) |= TR3_SH_FIRE;
+                       add_flag(flgs, TR_RES_FIRE);
+                       add_flag(flgs, TR_SH_FIRE);
                }
                else if (o_ptr->xtra3 == ESSENCE_SH_ELEC)
                {
-                       (*f2) |= TR2_RES_ELEC;
-                       (*f3) |= TR3_SH_ELEC;
+                       add_flag(flgs, TR_RES_ELEC);
+                       add_flag(flgs, TR_SH_ELEC);
                }
                else if (o_ptr->xtra3 == ESSENCE_SH_COLD)
                {
-                       (*f2) |= TR2_RES_COLD;
-                       (*f3) |= TR3_SH_COLD;
+                       add_flag(flgs, TR_RES_COLD);
+                       add_flag(flgs, TR_SH_COLD);
                }
                else if (o_ptr->xtra3 == ESSENCE_RESISTANCE)
                {
-                       (*f2) |= (TR2_RES_ACID | TR2_RES_ELEC | TR2_RES_FIRE | TR2_RES_COLD);;
+                       add_flag(flgs, TR_RES_ACID);
+                       add_flag(flgs, TR_RES_ELEC);
+                       add_flag(flgs, TR_RES_FIRE);
+                       add_flag(flgs, TR_RES_COLD);
                }
        }
 }
@@ -207,21 +196,22 @@ void object_flags(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3)
 /*
  * Obtain the "flags" for an item which are known to the player
  */
-void object_flags_known(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3)
+void object_flags_known(object_type *o_ptr, u32b flgs[TR_FLAG_SIZE])
 {
        bool spoil = FALSE;
+       int i;
 
        object_kind *k_ptr = &k_info[o_ptr->k_idx];
 
        /* Clear */
-       (*f1) = (*f2) = (*f3) = 0L;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = 0;
 
        if (!object_aware_p(o_ptr)) return;
 
        /* Base object */
-       (*f1) = k_ptr->flags1;
-       (*f2) = k_ptr->flags2;
-       (*f3) = k_ptr->flags3;
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               flgs[i] = k_ptr->flags[i];
 
        /* Must be identified */
        if (!object_known_p(o_ptr)) return;
@@ -231,22 +221,21 @@ void object_flags_known(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3)
        {
                ego_item_type *e_ptr = &e_info[o_ptr->name2];
 
-               (*f1) |= e_ptr->flags1;
-               (*f2) |= e_ptr->flags2;
-               (*f3) |= e_ptr->flags3;
+               for (i = 0; i < TR_FLAG_SIZE; i++)
+                       flgs[i] |= e_ptr->flags[i];
 
                if ((o_ptr->name2 == EGO_LITE_AURA_FIRE) && !o_ptr->xtra4 && (o_ptr->sval <= SV_LITE_LANTERN))
                {
-                       (*f3) &= ~(TR3_SH_FIRE);
+                       remove_flag(flgs, TR_SH_FIRE);
                }
                else if ((o_ptr->name2 == EGO_LITE_INFRA) && !o_ptr->xtra4 && (o_ptr->sval <= SV_LITE_LANTERN))
                {
-                       (*f1) &= ~(TR1_INFRA);
+                       remove_flag(flgs, TR_INFRA);
                }
                else if ((o_ptr->name2 == EGO_LITE_EYE) && !o_ptr->xtra4 && (o_ptr->sval <= SV_LITE_LANTERN))
                {
-                       (*f2) &= ~(TR2_RES_BLIND);
-                       (*f3) &= ~(TR3_SEE_INVIS);
+                       remove_flag(flgs, TR_RES_BLIND);
+                       remove_flag(flgs, TR_SEE_INVIS);
                }
        }
 
@@ -269,68 +258,58 @@ void object_flags_known(object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3)
                {
                        artifact_type *a_ptr = &a_info[o_ptr->name1];
 
-                       (*f1) = a_ptr->flags1;
-                       (*f2) = a_ptr->flags2;
-                       (*f3) = a_ptr->flags3;
+                       for (i = 0; i < TR_FLAG_SIZE; i++)
+                               flgs[i] = a_ptr->flags[i];
                }
 
                /* Random artifact ! */
-               if (o_ptr->art_flags1 || o_ptr->art_flags2 || o_ptr->art_flags3)
-               {
-                       (*f1) |= o_ptr->art_flags1;
-                       (*f2) |= o_ptr->art_flags2;
-                       (*f3) |= o_ptr->art_flags3;
-               }
+               for (i = 0; i < TR_FLAG_SIZE; i++)
+                       flgs[i] |= o_ptr->art_flags[i];
        }
 
        if ((o_ptr->tval > TV_CAPTURE) && o_ptr->xtra3)
        {
-               if (o_ptr->xtra3 < 33)
-               {
-                       (*f1) |= (0x00000001 << (o_ptr->xtra3-1));
-               }
-               else if (o_ptr->xtra3 < 65)
-               {
-                       (*f2) |= (0x00000001 << (o_ptr->xtra3-33));
-               }
-               else if (o_ptr->xtra3 < 97)
+               if (o_ptr->xtra3 <= 96)
                {
-                       (*f3) |= (0x00000001 << (o_ptr->xtra3-65));
+                       add_flag(flgs, o_ptr->xtra3 - 1);
                }
                else if (o_ptr->xtra3 == ESSENCE_TMP_RES_ACID)
                {
-                       (*f2) |= TR2_RES_ACID;
+                       add_flag(flgs, TR_RES_ACID);
                }
                else if (o_ptr->xtra3 == ESSENCE_TMP_RES_ELEC)
                {
-                       (*f2) |= TR2_RES_ELEC;
+                       add_flag(flgs, TR_RES_ELEC);
                }
                else if (o_ptr->xtra3 == ESSENCE_TMP_RES_FIRE)
                {
-                       (*f2) |= TR2_RES_FIRE;
+                       add_flag(flgs, TR_RES_FIRE);
                }
                else if (o_ptr->xtra3 == ESSENCE_TMP_RES_COLD)
                {
-                       (*f2) |= TR2_RES_COLD;
+                       add_flag(flgs, TR_RES_COLD);
                }
                else if (o_ptr->xtra3 == ESSENCE_SH_FIRE)
                {
-                       (*f2) |= TR2_RES_FIRE;
-                       (*f3) |= TR3_SH_FIRE;
+                       add_flag(flgs, TR_RES_FIRE);
+                       add_flag(flgs, TR_SH_FIRE);
                }
                else if (o_ptr->xtra3 == ESSENCE_SH_ELEC)
                {
-                       (*f2) |= TR2_RES_ELEC;
-                       (*f3) |= TR3_SH_ELEC;
+                       add_flag(flgs, TR_RES_ELEC);
+                       add_flag(flgs, TR_SH_ELEC);
                }
                else if (o_ptr->xtra3 == ESSENCE_SH_COLD)
                {
-                       (*f2) |= TR2_RES_COLD;
-                       (*f3) |= TR3_SH_COLD;
+                       add_flag(flgs, TR_RES_COLD);
+                       add_flag(flgs, TR_SH_COLD);
                }
                else if (o_ptr->xtra3 == ESSENCE_RESISTANCE)
                {
-                       (*f2) |= (TR2_RES_ACID | TR2_RES_ELEC | TR2_RES_FIRE | TR2_RES_COLD);;
+                       add_flag(flgs, TR_RES_ACID);
+                       add_flag(flgs, TR_RES_ELEC);
+                       add_flag(flgs, TR_RES_FIRE);
+                       add_flag(flgs, TR_RES_COLD);
                }
        }
 }
@@ -376,16 +355,16 @@ void object_desc_store(char *buf, object_type *o_ptr, int pref, int mode)
  */
 cptr item_activation(object_type *o_ptr)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Require activation ability */
 #ifdef JP
-if (!(f3 & (TR3_ACTIVATE))) return ("¤Ê¤·");
+if (!(have_flag(flgs, TR_ACTIVATE))) return ("¤Ê¤·");
 #else
-       if (!(f3 & (TR3_ACTIVATE))) return ("nothing");
+       if (!(have_flag(flgs, TR_ACTIVATE))) return ("nothing");
 #endif
 
 
@@ -2386,15 +2365,14 @@ bool identify_fully_aux(object_type *o_ptr)
 {
        int                     i = 0, j, k;
 
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        cptr            info[128];
-       u32b flag;
        char o_name[MAX_NLEN];
        int wid, hgt;
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Extract the description */
        {
@@ -2408,7 +2386,7 @@ bool identify_fully_aux(object_type *o_ptr)
        }
 
        /* Mega-Hack -- describe activation */
-       if (f3 & (TR3_ACTIVATE))
+       if (have_flag(flgs, TR_ACTIVATE))
        {
 #ifdef JP
 info[i++] = "»ÏÆ°¤·¤¿¤È¤­¤Î¸ú²Ì...";
@@ -2635,7 +2613,7 @@ info[i++] = "
 
        /* And then describe it fully */
 
-       if (f2 & (TR2_RIDING))
+       if (have_flag(flgs, TR_RIDING))
        {
                if ((o_ptr->tval == TV_POLEARM) && ((o_ptr->sval == SV_LANCE) || (o_ptr->sval == SV_HEAVY_LANCE)))
 #ifdef JP
@@ -2651,7 +2629,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_STR))
+       if (have_flag(flgs, TR_STR))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÏÓÎϤ˱ƶÁ¤òµÚ¤Ü¤¹";
@@ -2660,7 +2638,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_INT))
+       if (have_flag(flgs, TR_INT))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÃÎǽ¤Ë±Æ¶Á¤òµÚ¤Ü¤¹";
@@ -2669,7 +2647,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_WIS))
+       if (have_flag(flgs, TR_WIS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¸­¤µ¤Ë±Æ¶Á¤òµÚ¤Ü¤¹";
@@ -2678,7 +2656,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_DEX))
+       if (have_flag(flgs, TR_DEX))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï´ïÍѤµ¤Ë±Æ¶Á¤òµÚ¤Ü¤¹";
@@ -2687,7 +2665,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_CON))
+       if (have_flag(flgs, TR_CON))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÂѵ×ÎϤ˱ƶÁ¤òµÚ¤Ü¤¹";
@@ -2696,7 +2674,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_CHR))
+       if (have_flag(flgs, TR_CHR))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÌ¥ÎϤ˱ƶÁ¤òµÚ¤Ü¤¹";
@@ -2706,7 +2684,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_MAGIC_MASTERY))
+       if (have_flag(flgs, TR_MAGIC_MASTERY))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏËâË¡Æ»¶ñ»ÈÍÑǽÎϤ˱ƶÁ¤òµÚ¤Ü¤¹";
@@ -2715,7 +2693,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_STEALTH))
+       if (have_flag(flgs, TR_STEALTH))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï±£Ì©¹ÔưǽÎϤ˱ƶÁ¤òµÚ¤Ü¤¹";
@@ -2724,7 +2702,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SEARCH))
+       if (have_flag(flgs, TR_SEARCH))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ïõº÷ǽÎϤ˱ƶÁ¤òµÚ¤Ü¤¹";
@@ -2733,7 +2711,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_INFRA))
+       if (have_flag(flgs, TR_INFRA))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÀÖ³°Àþ»ëÎϤ˱ƶÁ¤òµÚ¤Ü¤¹";
@@ -2742,7 +2720,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_TUNNEL))
+       if (have_flag(flgs, TR_TUNNEL))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏºÎ·¡Ç½ÎϤ˱ƶÁ¤òµÚ¤Ü¤¹";
@@ -2751,7 +2729,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SPEED))
+       if (have_flag(flgs, TR_SPEED))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥¹¥Ô¡¼¥É¤Ë±Æ¶Á¤òµÚ¤Ü¤¹";
@@ -2760,7 +2738,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_BLOWS))
+       if (have_flag(flgs, TR_BLOWS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÂÇ·â²ó¿ô¤Ë±Æ¶Á¤òµÚ¤Ü¤¹";
@@ -2770,7 +2748,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_BRAND_ACID))
+       if (have_flag(flgs, TR_BRAND_ACID))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï»À¤Ë¤è¤Ã¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë";
@@ -2779,7 +2757,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_BRAND_ELEC))
+       if (have_flag(flgs, TR_BRAND_ELEC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÅÅ·â¤Ë¤è¤Ã¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë";
@@ -2788,7 +2766,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_BRAND_FIRE))
+       if (have_flag(flgs, TR_BRAND_FIRE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï²Ð±ê¤Ë¤è¤Ã¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë";
@@ -2797,7 +2775,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_BRAND_COLD))
+       if (have_flag(flgs, TR_BRAND_COLD))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÎ䵤¤Ë¤è¤Ã¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë";
@@ -2807,7 +2785,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_BRAND_POIS))
+       if (have_flag(flgs, TR_BRAND_POIS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏŨ¤òÆǤ¹¤ë¡£";
@@ -2817,7 +2795,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_CHAOTIC))
+       if (have_flag(flgs, TR_CHAOTIC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥«¥ª¥¹Åª¤Ê¸ú²Ì¤òµÚ¤Ü¤¹¡£";
@@ -2827,7 +2805,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_VAMPIRIC))
+       if (have_flag(flgs, TR_VAMPIRIC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏŨ¤«¤é¥Ò¥Ã¥È¥Ý¥¤¥ó¥È¤òµÛ¼ý¤¹¤ë¡£";
@@ -2837,7 +2815,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_IMPACT))
+       if (have_flag(flgs, TR_IMPACT))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÃϿ̤òµ¯¤³¤¹¤³¤È¤¬¤Ç¤­¤ë¡£";
@@ -2847,7 +2825,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_VORPAL))
+       if (have_flag(flgs, TR_VORPAL))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÈó¾ï¤ËÀÚ¤ìÌ£¤¬±Ô¤¯Å¨¤òÀÚÃǤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
@@ -2857,7 +2835,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_KILL_DRAGON))
+       if (have_flag(flgs, TR_KILL_DRAGON))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥É¥é¥´¥ó¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
@@ -2866,7 +2844,7 @@ info[i++] = "
 #endif
 
        }
-       else if (f1 & (TR1_SLAY_DRAGON))
+       else if (have_flag(flgs, TR_SLAY_DRAGON))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥É¥é¥´¥ó¤ËÂФ·¤ÆÆä˶²¤ë¤Ù¤­ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2875,7 +2853,17 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SLAY_ORC))
+
+       if (have_flag(flgs, TR_KILL_ORC))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥ª¡¼¥¯¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+               info[i++] = "It is a great bane of orcs.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_SLAY_ORC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥ª¡¼¥¯¤ËÂФ·¤ÆÆä˶²¤ë¤Ù¤­ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2884,7 +2872,17 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SLAY_TROLL))
+
+       if (have_flag(flgs, TR_KILL_TROLL))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥È¥í¥ë¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+               info[i++] = "It is a great bane of trolls.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_SLAY_TROLL))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥È¥í¥ë¤ËÂФ·¤ÆÆä˶²¤ë¤Ù¤­ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2893,15 +2891,17 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SLAY_GIANT))
+
+       if (have_flag(flgs, TR_KILL_GIANT))
        {
-               if (o_ptr->name1 == ART_HRUNTING)
 #ifdef JP
 info[i++] = "¤½¤ì¤Ïµð¿Í¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
 #else
                info[i++] = "It is a great bane of giants.";
 #endif
-               else
+       }
+       else if (have_flag(flgs, TR_SLAY_GIANT))
+       {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ËÂФ·¤ÆÆä˶²¤ë¤Ù¤­ÎϤòȯ´ø¤¹¤ë¡£";
 #else
@@ -2909,7 +2909,17 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SLAY_DEMON))
+
+       if (have_flag(flgs, TR_KILL_DEMON))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥Ç¡¼¥â¥ó¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+               info[i++] = "It is a great bane of demons.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_SLAY_DEMON))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥Ç¡¼¥â¥ó¤ËÂФ·¤ÆÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
@@ -2918,7 +2928,17 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SLAY_UNDEAD))
+
+       if (have_flag(flgs, TR_KILL_UNDEAD))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥¢¥ó¥Ç¥Ã¥É¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+               info[i++] = "It is a great bane of undead.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_SLAY_UNDEAD))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥¢¥ó¥Ç¥Ã¥É¤ËÂФ·¤ÆÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
@@ -2927,7 +2947,17 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SLAY_EVIL))
+
+       if (have_flag(flgs, TR_KILL_EVIL))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¼Ù°­¤Ê¤ë¸ºß¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+               info[i++] = "It is a great bane of evil monsters.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_SLAY_EVIL))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¼Ù°­¤Ê¤ë¸ºß¤ËÂФ·¤ÆÀ»¤Ê¤ëÎϤǹ¶·â¤¹¤ë¡£";
@@ -2936,7 +2966,17 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SLAY_ANIMAL))
+
+       if (have_flag(flgs, TR_KILL_ANIMAL))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¼«Á³³¦¤Îưʪ¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+               info[i++] = "It is a great bane of natural creatures.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_SLAY_ANIMAL))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¼«Á³³¦¤Îưʪ¤ËÂФ·¤ÆÆä˶²¤ë¤Ù¤­ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2945,7 +2985,17 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_SLAY_HUMAN))
+
+       if (have_flag(flgs, TR_KILL_HUMAN))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¿Í´Ö¤Ë¤È¤Ã¤Æ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+               info[i++] = "It is a great bane of humans.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_SLAY_HUMAN))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¿Í´Ö¤ËÂФ·¤ÆÆä˶²¤ë¤Ù¤­ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2955,7 +3005,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_FORCE_WEAPON))
+       if (have_flag(flgs, TR_FORCE_WEAPON))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï»ÈÍѼԤÎËâÎϤò»È¤Ã¤Æ¹¶·â¤¹¤ë¡£";
@@ -2964,7 +3014,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_DEC_MANA))
+       if (have_flag(flgs, TR_DEC_MANA))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏËâÎϤξÃÈñ¤ò²¡¤µ¤¨¤ë¡£";
@@ -2973,7 +3023,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_SUST_STR))
+       if (have_flag(flgs, TR_SUST_STR))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤ÎÏÓÎϤò°Ý»ý¤¹¤ë¡£";
@@ -2982,7 +3032,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_SUST_INT))
+       if (have_flag(flgs, TR_SUST_INT))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤ÎÃÎǽ¤ò°Ý»ý¤¹¤ë¡£";
@@ -2991,7 +3041,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_SUST_WIS))
+       if (have_flag(flgs, TR_SUST_WIS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤Î¸­¤µ¤ò°Ý»ý¤¹¤ë¡£";
@@ -3000,7 +3050,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_SUST_DEX))
+       if (have_flag(flgs, TR_SUST_DEX))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤Î´ïÍѤµ¤ò°Ý»ý¤¹¤ë¡£";
@@ -3009,7 +3059,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_SUST_CON))
+       if (have_flag(flgs, TR_SUST_CON))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤ÎÂѵ×ÎϤò°Ý»ý¤¹¤ë¡£";
@@ -3018,7 +3068,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_SUST_CHR))
+       if (have_flag(flgs, TR_SUST_CHR))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤ÎÌ¥ÎϤò°Ý»ý¤¹¤ë¡£";
@@ -3028,7 +3078,7 @@ info[i++] = "
 
        }
 
-       if (f2 & (TR2_IM_ACID))
+       if (have_flag(flgs, TR_IM_ACID))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï»À¤ËÂФ¹¤ë´°Á´¤ÊÌȱ֤ò¼ø¤±¤ë¡£";
@@ -3037,7 +3087,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_IM_ELEC))
+       if (have_flag(flgs, TR_IM_ELEC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÅÅ·â¤ËÂФ¹¤ë´°Á´¤ÊÌȱ֤ò¼ø¤±¤ë¡£";
@@ -3046,7 +3096,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_IM_FIRE))
+       if (have_flag(flgs, TR_IM_FIRE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï²Ð¤ËÂФ¹¤ë´°Á´¤ÊÌȱ֤ò¼ø¤±¤ë¡£";
@@ -3055,7 +3105,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_IM_COLD))
+       if (have_flag(flgs, TR_IM_COLD))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï´¨¤µ¤ËÂФ¹¤ë´°Á´¤ÊÌȱ֤ò¼ø¤±¤ë¡£";
@@ -3065,7 +3115,7 @@ info[i++] = "
 
        }
 
-       if (f2 & (TR2_THROW))
+       if (have_flag(flgs, TR_THROW))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏŨ¤ËÅꤲ¤ÆÂ礭¤Ê¥À¥á¡¼¥¸¤òÍ¿¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
@@ -3074,7 +3124,7 @@ info[i++] = "
 #endif
        }
 
-       if (f2 & (TR2_FREE_ACT))
+       if (have_flag(flgs, TR_FREE_ACT))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏËãáã¤ËÂФ¹¤ë´°Á´¤ÊÌȱ֤ò¼ø¤±¤ë¡£";
@@ -3083,7 +3133,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_HOLD_LIFE))
+       if (have_flag(flgs, TR_HOLD_LIFE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÀ¸Ì¿Îϵۼý¤ËÂФ¹¤ëÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3092,7 +3142,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_FEAR))
+       if (have_flag(flgs, TR_RES_FEAR))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¶²Éݤؤδ°Á´¤ÊÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3101,7 +3151,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_ACID))
+       if (have_flag(flgs, TR_RES_ACID))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï»À¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3110,7 +3160,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_ELEC))
+       if (have_flag(flgs, TR_RES_ELEC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÅÅ·â¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3119,7 +3169,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_FIRE))
+       if (have_flag(flgs, TR_RES_FIRE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï²Ð¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3128,7 +3178,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_COLD))
+       if (have_flag(flgs, TR_RES_COLD))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï´¨¤µ¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3137,7 +3187,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_POIS))
+       if (have_flag(flgs, TR_RES_POIS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÆǤؤÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3147,7 +3197,7 @@ info[i++] = "
 
        }
 
-       if (f2 & (TR2_RES_LITE))
+       if (have_flag(flgs, TR_RES_LITE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÁ®¸÷¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3156,7 +3206,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_DARK))
+       if (have_flag(flgs, TR_RES_DARK))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï°Å¹õ¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3166,7 +3216,7 @@ info[i++] = "
 
        }
 
-       if (f2 & (TR2_RES_BLIND))
+       if (have_flag(flgs, TR_RES_BLIND))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÌÕÌܤؤÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3175,7 +3225,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_CONF))
+       if (have_flag(flgs, TR_RES_CONF))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ïº®Íð¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3184,7 +3234,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_SOUND))
+       if (have_flag(flgs, TR_RES_SOUND))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¹ì²»¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3193,7 +3243,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_SHARDS))
+       if (have_flag(flgs, TR_RES_SHARDS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÇËÊҤؤÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3203,7 +3253,7 @@ info[i++] = "
 
        }
 
-       if (f2 & (TR2_RES_NETHER))
+       if (have_flag(flgs, TR_RES_NETHER))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÃϹö¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3212,7 +3262,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_NEXUS))
+       if (have_flag(flgs, TR_RES_NEXUS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï°ø²Ìº®Íð¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3221,7 +3271,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_CHAOS))
+       if (have_flag(flgs, TR_RES_CHAOS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥«¥ª¥¹¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3230,7 +3280,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_RES_DISEN))
+       if (have_flag(flgs, TR_RES_DISEN))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÎô²½¤Ø¤ÎÂÑÀ­¤ò¼ø¤±¤ë¡£";
@@ -3240,7 +3290,7 @@ info[i++] = "
 
        }
 
-       if (f3 & (TR3_FEATHER))
+       if (have_flag(flgs, TR_FEATHER))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÃè¤ËÉ⤯¤³¤È¤ò²Äǽ¤Ë¤¹¤ë¡£";
@@ -3249,7 +3299,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_LITE))
+       if (have_flag(flgs, TR_LITE))
        {
                if ((o_ptr->name2 == EGO_DARK) || (o_ptr->name1 == ART_NIGHT))
 #ifdef JP
@@ -3265,7 +3315,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_SEE_INVIS))
+       if (have_flag(flgs, TR_SEE_INVIS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÆ©ÌÀ¤Ê¥â¥ó¥¹¥¿¡¼¤ò¸«¤ë¤³¤È¤ò²Äǽ¤Ë¤¹¤ë¡£";
@@ -3274,7 +3324,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_TELEPATHY))
+       if (have_flag(flgs, TR_TELEPATHY))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥Æ¥ì¥Ñ¥·¡¼Ç½ÎϤò¼ø¤±¤ë¡£";
@@ -3283,7 +3333,115 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_SLOW_DIGEST))
+       if (have_flag(flgs, TR_ESP_ANIMAL))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¼«Á³³¦¤ÎÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses natural creatures.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_UNDEAD))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses undead.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_DEMON))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï°­Ëâ¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses demons.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_ORC))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥ª¡¼¥¯¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses orcs.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_TROLL))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥È¥í¥ë¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses trolls.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_GIANT))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ïµð¿Í¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses giants.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_DRAGON))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¥É¥é¥´¥ó¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses dragons.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_HUMAN))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¿Í´Ö¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses humans.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_EVIL))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï¼Ù°­¤ÊÀ¸¤­Êª¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses evil creatures.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_GOOD))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤ÏÁ±ÎɤÊÀ¸¤­Êª¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses good creatures.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_NONLIVING))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤Ï³èÆ°¤¹¤ë̵À¸ÊªÂΤθºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses non-living creatures.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_ESP_UNIQUE))
+       {
+#ifdef JP
+info[i++] = "¤½¤ì¤ÏÆÃÊ̤ʶ¯Å¨¤Î¸ºß¤ò´¶¤¸¤È¤ë¡£";
+#else
+               info[i++] = "It senses unique monsters.";
+#endif
+
+       }
+       if (have_flag(flgs, TR_SLOW_DIGEST))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¤¢¤Ê¤¿¤Î¿·ÄÄÂå¼Õ¤òÃÙ¤¯¤¹¤ë¡£";
@@ -3292,7 +3450,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_REGEN))
+       if (have_flag(flgs, TR_REGEN))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÂÎÎϲóÉüÎϤò¶¯²½¤¹¤ë¡£";
@@ -3301,7 +3459,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_WARNING))
+       if (have_flag(flgs, TR_WARNING))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï´í¸±¤ËÂФ·¤Æ·Ù¹ð¤òȯ¤¹¤ë¡£";
@@ -3310,7 +3468,7 @@ info[i++] = "
 #endif
 
        }
-       if (f2 & (TR2_REFLECT))
+       if (have_flag(flgs, TR_REFLECT))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÌð¤ä¥Ü¥ë¥È¤òÈ¿¼Í¤¹¤ë¡£";
@@ -3319,7 +3477,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_SH_FIRE))
+       if (have_flag(flgs, TR_SH_FIRE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï±ê¤Î¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
@@ -3328,7 +3486,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_SH_ELEC))
+       if (have_flag(flgs, TR_SH_ELEC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÅŵ¤¤Î¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
@@ -3337,7 +3495,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_SH_COLD))
+       if (have_flag(flgs, TR_SH_COLD))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÎ䵤¤Î¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
@@ -3346,7 +3504,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_NO_MAGIC))
+       if (have_flag(flgs, TR_NO_MAGIC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÈ¿ËâË¡¥Ð¥ê¥¢¤òÄ¥¤ë¡£";
@@ -3355,7 +3513,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_NO_TELE))
+       if (have_flag(flgs, TR_NO_TELE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥Æ¥ì¥Ý¡¼¥È¤ò¼ÙË⤹¤ë¡£";
@@ -3364,7 +3522,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_XTRA_MIGHT))
+       if (have_flag(flgs, TR_XTRA_MIGHT))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÌ𡿥ܥë¥È¡¿ÃƤò¤è¤ê¶¯ÎϤËȯ¼Í¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
@@ -3373,7 +3531,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_XTRA_SHOTS))
+       if (have_flag(flgs, TR_XTRA_SHOTS))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÌ𡿥ܥë¥È¡¿ÃƤòÈó¾ï¤ËÁ᤯ȯ¼Í¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
@@ -3383,7 +3541,7 @@ info[i++] = "
 
        }
 
-       if (f3 & TR3_BLESSED)
+       if (have_flag(flgs, TR_BLESSED))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¿À¤Ë½ËÊ¡¤µ¤ì¤Æ¤¤¤ë¡£";
@@ -3424,7 +3582,7 @@ info[i++] = "
                }
        }
 
-       if ((f3 & TR3_TY_CURSE) || (o_ptr->curse_flags & TRC_TY_CURSE))
+       if ((have_flag(flgs, TR_TY_CURSE)) || (o_ptr->curse_flags & TRC_TY_CURSE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÂÀ¸Å¤Î²Ò¡¹¤·¤¤±åÇ°¤¬½É¤Ã¤Æ¤¤¤ë¡£";
@@ -3433,7 +3591,7 @@ info[i++] = "
 #endif
 
        }
-       if ((f3 & TR3_AGGRAVATE) || (o_ptr->curse_flags & TRC_AGGRAVATE))
+       if ((have_flag(flgs, TR_AGGRAVATE)) || (o_ptr->curse_flags & TRC_AGGRAVATE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÉÕ¶á¤Î¥â¥ó¥¹¥¿¡¼¤òÅܤ餻¤ë¡£";
@@ -3442,7 +3600,7 @@ info[i++] = "
 #endif
 
        }
-       if ((f3 & (TR3_DRAIN_EXP)) || (o_ptr->curse_flags & TRC_DRAIN_EXP))
+       if ((have_flag(flgs, TR_DRAIN_EXP)) || (o_ptr->curse_flags & TRC_DRAIN_EXP))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï·Ð¸³ÃͤòµÛ¤¤¼è¤ë¡£";
@@ -3514,7 +3672,7 @@ info[i++] = "
 #endif
 
        }
-       if ((f3 & (TR3_TELEPORT)) || (o_ptr->curse_flags & TRC_TELEPORT))
+       if ((have_flag(flgs, TR_TELEPORT)) || (o_ptr->curse_flags & TRC_TELEPORT))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï¥é¥ó¥À¥à¤Ê¥Æ¥ì¥Ý¡¼¥È¤ò°ú¤­µ¯¤³¤¹¡£";
@@ -3579,8 +3737,10 @@ info[i++] = "
        }
 
        /* XTRA HACK ARTDESC */
-       flag = TR3_IGNORE_ACID | TR3_IGNORE_ELEC | TR3_IGNORE_FIRE | TR3_IGNORE_COLD ;
-       if ((f3 & flag) == flag)
+       if (have_flag(flgs, TR_IGNORE_ACID) &&
+           have_flag(flgs, TR_IGNORE_ELEC) &&
+           have_flag(flgs, TR_IGNORE_FIRE) &&
+           have_flag(flgs, TR_IGNORE_COLD))
        {
 #ifdef JP
          info[i++] = "¤½¤ì¤Ï»À¡¦Åŷ⡦²Ð±ê¡¦Î䵤¤Ç¤Ï½ý¤Ä¤«¤Ê¤¤¡£";
@@ -3588,7 +3748,7 @@ info[i++] = "
          info[i++] = "It cannot be harmed by the elements.";
 #endif
        } else {
-       if (f3 & (TR3_IGNORE_ACID))
+       if (have_flag(flgs, TR_IGNORE_ACID))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï»À¤Ç¤Ï½ý¤Ä¤«¤Ê¤¤¡£";
@@ -3597,7 +3757,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_IGNORE_ELEC))
+       if (have_flag(flgs, TR_IGNORE_ELEC))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÅÅ·â¤Ç¤Ï½ý¤Ä¤«¤Ê¤¤¡£";
@@ -3606,7 +3766,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_IGNORE_FIRE))
+       if (have_flag(flgs, TR_IGNORE_FIRE))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤Ï²Ð±ê¤Ç¤Ï½ý¤Ä¤«¤Ê¤¤¡£";
@@ -3615,7 +3775,7 @@ info[i++] = "
 #endif
 
        }
-       if (f3 & (TR3_IGNORE_COLD))
+       if (have_flag(flgs, TR_IGNORE_COLD))
        {
 #ifdef JP
 info[i++] = "¤½¤ì¤ÏÎ䵤¤Ç¤Ï½ý¤Ä¤«¤Ê¤¤¡£";
index afcb410..60c7c8e 100644 (file)
@@ -869,19 +869,19 @@ static s32b object_value_base(object_type *o_ptr)
 s32b flag_cost(object_type * o_ptr, int plusses)
 {
        s32b total = 0;
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        s32b tmp_cost;
        int count;
+       int i;
 
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        if (o_ptr->name1)
        {
                artifact_type *a_ptr = &a_info[o_ptr->name1];
 
-               f1 &= ~(a_ptr->flags1);
-               f2 &= ~(a_ptr->flags2);
-               f3 &= ~(a_ptr->flags3);
+               for (i = 0; i < TR_FLAG_SIZE; i++)
+                       flgs[i] &= ~(a_ptr->flags[i]);
        }
        else
        {
@@ -889,16 +889,15 @@ s32b flag_cost(object_type * o_ptr, int plusses)
                {
                        ego_item_type *e_ptr = &e_info[o_ptr->name2];
 
-                       f1 &= ~(e_ptr->flags1);
-                       f2 &= ~(e_ptr->flags2);
-                       f3 &= ~(e_ptr->flags3);
+                       for (i = 0; i < TR_FLAG_SIZE; i++)
+                               flgs[i] &= ~(e_ptr->flags[i]);
+
                        if ((o_ptr->tval == TV_RING) || (o_ptr->tval == TV_AMULET))
                        {
                                object_kind *k_ptr = &k_info[o_ptr->k_idx];
 
-                               f1 &= ~(k_ptr->flags1);
-                               f2 &= ~(k_ptr->flags2);
-                               f3 &= ~(k_ptr->flags3);
+                               for (i = 0; i < TR_FLAG_SIZE; i++)
+                                       flgs[i] &= ~(k_ptr->flags[i]);
                        }
                }
                else if (o_ptr->art_name)
@@ -907,123 +906,143 @@ s32b flag_cost(object_type * o_ptr, int plusses)
                }
        }
 
-       if (f1 & TR1_STR) total += (1500 * plusses);
-       if (f1 & TR1_INT) total += (1500 * plusses);
-       if (f1 & TR1_WIS) total += (1500 * plusses);
-       if (f1 & TR1_DEX) total += (1500 * plusses);
-       if (f1 & TR1_CON) total += (1500 * plusses);
-       if (f1 & TR1_CHR) total += (750 * plusses);
-       if (f1 & TR1_MAGIC_MASTERY) total += (600 * plusses);
-       if (f1 & TR1_STEALTH) total += (250 * plusses);
-       if (f1 & TR1_SEARCH) total += (100 * plusses);
-       if (f1 & TR1_INFRA) total += (150 * plusses);
-       if (f1 & TR1_TUNNEL) total += (175 * plusses);
-       if ((f1 & TR1_SPEED) && (plusses > 0))
+       if (have_flag(flgs, TR_STR)) total += (1500 * plusses);
+       if (have_flag(flgs, TR_INT)) total += (1500 * plusses);
+       if (have_flag(flgs, TR_WIS)) total += (1500 * plusses);
+       if (have_flag(flgs, TR_DEX)) total += (1500 * plusses);
+       if (have_flag(flgs, TR_CON)) total += (1500 * plusses);
+       if (have_flag(flgs, TR_CHR)) total += (750 * plusses);
+       if (have_flag(flgs, TR_MAGIC_MASTERY)) total += (600 * plusses);
+       if (have_flag(flgs, TR_STEALTH)) total += (250 * plusses);
+       if (have_flag(flgs, TR_SEARCH)) total += (100 * plusses);
+       if (have_flag(flgs, TR_INFRA)) total += (150 * plusses);
+       if (have_flag(flgs, TR_TUNNEL)) total += (175 * plusses);
+       if ((have_flag(flgs, TR_SPEED)) && (plusses > 0))
                total += (10000 + (2500 * plusses));
-       if ((f1 & TR1_BLOWS) && (plusses > 0))
+       if ((have_flag(flgs, TR_BLOWS)) && (plusses > 0))
                total += (10000 + (2500 * plusses));
-       if (f3 & TR3_DEC_MANA) total += 10000;
+       if (have_flag(flgs, TR_DEC_MANA)) total += 10000;
 
        tmp_cost = 0;
        count = 0;
-       if (f1 & TR1_CHAOTIC) {total += 5000;count++;}
-       if (f1 & TR1_VAMPIRIC) {total += 6500;count++;}
-       if (f1 & TR1_FORCE_WEAPON) {tmp_cost += 2500;count++;}
-       if (f1 & TR1_SLAY_ANIMAL) {tmp_cost += 1800;count++;}
-       if (f1 & TR1_SLAY_EVIL) {tmp_cost += 2300;count++;}
-       if (f3 & TR3_SLAY_HUMAN) {tmp_cost += 1800;count++;}
-       if (f1 & TR1_SLAY_UNDEAD) {tmp_cost += 1800;count++;}
-       if (f1 & TR1_SLAY_DEMON) {tmp_cost += 1800;count++;}
-       if (f1 & TR1_SLAY_ORC) {tmp_cost += 1500;count++;}
-       if (f1 & TR1_SLAY_TROLL) {tmp_cost += 1800;count++;}
-       if (f1 & TR1_SLAY_GIANT) {tmp_cost += 1800;count++;}
-       if (f1 & TR1_KILL_DRAGON) {tmp_cost += 2800;count++;}
-       else if (f1 & TR1_SLAY_DRAGON) {tmp_cost += 1800;count++;}
-
-       if (f1 & TR1_VORPAL) {tmp_cost += 2500;count++;}
-       if (f1 & TR1_IMPACT) {tmp_cost += 2500;count++;}
-       if (f1 & TR1_BRAND_POIS) {tmp_cost += 3800;count++;}
-       if (f1 & TR1_BRAND_ACID) {tmp_cost += 3800;count++;}
-       if (f1 & TR1_BRAND_ELEC) {tmp_cost += 3800;count++;}
-       if (f1 & TR1_BRAND_FIRE) {tmp_cost += 2500;count++;}
-       if (f1 & TR1_BRAND_COLD) {tmp_cost += 2500;count++;}
+       if (have_flag(flgs, TR_CHAOTIC)) {total += 5000;count++;}
+       if (have_flag(flgs, TR_VAMPIRIC)) {total += 6500;count++;}
+       if (have_flag(flgs, TR_FORCE_WEAPON)) {tmp_cost += 2500;count++;}
+       if (have_flag(flgs, TR_KILL_ANIMAL)) {tmp_cost += 2800;count++;}
+       else if (have_flag(flgs, TR_SLAY_ANIMAL)) {tmp_cost += 1800;count++;}
+       if (have_flag(flgs, TR_KILL_EVIL)) {tmp_cost += 3300;count++;}
+       else if (have_flag(flgs, TR_SLAY_EVIL)) {tmp_cost += 2300;count++;}
+       if (have_flag(flgs, TR_KILL_HUMAN)) {tmp_cost += 2800;count++;}
+       else if (have_flag(flgs, TR_SLAY_HUMAN)) {tmp_cost += 1800;count++;}
+       if (have_flag(flgs, TR_KILL_UNDEAD)) {tmp_cost += 2800;count++;}
+       else if (have_flag(flgs, TR_SLAY_UNDEAD)) {tmp_cost += 1800;count++;}
+       if (have_flag(flgs, TR_KILL_DEMON)) {tmp_cost += 2800;count++;}
+       else if (have_flag(flgs, TR_SLAY_DEMON)) {tmp_cost += 1800;count++;}
+       if (have_flag(flgs, TR_KILL_ORC)) {tmp_cost += 2500;count++;}
+       else if (have_flag(flgs, TR_SLAY_ORC)) {tmp_cost += 1500;count++;}
+       if (have_flag(flgs, TR_KILL_TROLL)) {tmp_cost += 2800;count++;}
+       else if (have_flag(flgs, TR_SLAY_TROLL)) {tmp_cost += 1800;count++;}
+       if (have_flag(flgs, TR_KILL_GIANT)) {tmp_cost += 2800;count++;}
+       else if (have_flag(flgs, TR_SLAY_GIANT)) {tmp_cost += 1800;count++;}
+       if (have_flag(flgs, TR_KILL_DRAGON)) {tmp_cost += 2800;count++;}
+       else if (have_flag(flgs, TR_SLAY_DRAGON)) {tmp_cost += 1800;count++;}
+
+       if (have_flag(flgs, TR_VORPAL)) {tmp_cost += 2500;count++;}
+       if (have_flag(flgs, TR_IMPACT)) {tmp_cost += 2500;count++;}
+       if (have_flag(flgs, TR_BRAND_POIS)) {tmp_cost += 3800;count++;}
+       if (have_flag(flgs, TR_BRAND_ACID)) {tmp_cost += 3800;count++;}
+       if (have_flag(flgs, TR_BRAND_ELEC)) {tmp_cost += 3800;count++;}
+       if (have_flag(flgs, TR_BRAND_FIRE)) {tmp_cost += 2500;count++;}
+       if (have_flag(flgs, TR_BRAND_COLD)) {tmp_cost += 2500;count++;}
        total += (tmp_cost * count);
 
-       if (f2 & TR2_SUST_STR) total += 850;
-       if (f2 & TR2_SUST_INT) total += 850;
-       if (f2 & TR2_SUST_WIS) total += 850;
-       if (f2 & TR2_SUST_DEX) total += 850;
-       if (f2 & TR2_SUST_CON) total += 850;
-       if (f2 & TR2_SUST_CHR) total += 250;
-       if (f2 & TR2_RIDING) total += 0;
-       if (f2 & TR2_XXX2) total += 0;
-       if (f2 & TR2_THROW) total += 5000;
-       if (f2 & TR2_FREE_ACT) total += 4500;
-       if (f2 & TR2_HOLD_LIFE) total += 8500;
+       if (have_flag(flgs, TR_SUST_STR)) total += 850;
+       if (have_flag(flgs, TR_SUST_INT)) total += 850;
+       if (have_flag(flgs, TR_SUST_WIS)) total += 850;
+       if (have_flag(flgs, TR_SUST_DEX)) total += 850;
+       if (have_flag(flgs, TR_SUST_CON)) total += 850;
+       if (have_flag(flgs, TR_SUST_CHR)) total += 250;
+       if (have_flag(flgs, TR_RIDING)) total += 0;
+       if (have_flag(flgs, TR_XXX2)) total += 0;
+       if (have_flag(flgs, TR_THROW)) total += 5000;
+       if (have_flag(flgs, TR_FREE_ACT)) total += 4500;
+       if (have_flag(flgs, TR_HOLD_LIFE)) total += 8500;
 
        tmp_cost = 0;
        count = 0;
-       if (f2 & TR2_IM_ACID) {tmp_cost += 15000;count += 2;}
-       if (f2 & TR2_IM_ELEC) {tmp_cost += 15000;count += 2;}
-       if (f2 & TR2_IM_FIRE) {tmp_cost += 15000;count += 2;}
-       if (f2 & TR2_IM_COLD) {tmp_cost += 15000;count += 2;}
-       if (f2 & TR2_REFLECT) {tmp_cost += 5000;count += 2;}
-       if (f2 & TR2_RES_ACID) {tmp_cost += 500;count++;}
-       if (f2 & TR2_RES_ELEC) {tmp_cost += 500;count++;}
-       if (f2 & TR2_RES_FIRE) {tmp_cost += 500;count++;}
-       if (f2 & TR2_RES_COLD) {tmp_cost += 500;count++;}
-       if (f2 & TR2_RES_POIS) {tmp_cost += 1000;count += 2;}
-       if (f2 & TR2_RES_FEAR) {tmp_cost += 1000;count += 2;}
-       if (f2 & TR2_RES_LITE) {tmp_cost += 800;count += 2;}
-       if (f2 & TR2_RES_DARK) {tmp_cost += 800;count += 2;}
-       if (f2 & TR2_RES_BLIND) {tmp_cost += 900;count += 2;}
-       if (f2 & TR2_RES_CONF) {tmp_cost += 900;count += 2;}
-       if (f2 & TR2_RES_SOUND) {tmp_cost += 900;count += 2;}
-       if (f2 & TR2_RES_SHARDS) {tmp_cost += 900;count += 2;}
-       if (f2 & TR2_RES_NETHER) {tmp_cost += 900;count += 2;}
-       if (f2 & TR2_RES_NEXUS) {tmp_cost += 900;count += 2;}
-       if (f2 & TR2_RES_CHAOS) {tmp_cost += 1000;count += 2;}
-       if (f2 & TR2_RES_DISEN) {tmp_cost += 2000;count += 2;}
+       if (have_flag(flgs, TR_IM_ACID)) {tmp_cost += 15000;count += 2;}
+       if (have_flag(flgs, TR_IM_ELEC)) {tmp_cost += 15000;count += 2;}
+       if (have_flag(flgs, TR_IM_FIRE)) {tmp_cost += 15000;count += 2;}
+       if (have_flag(flgs, TR_IM_COLD)) {tmp_cost += 15000;count += 2;}
+       if (have_flag(flgs, TR_REFLECT)) {tmp_cost += 5000;count += 2;}
+       if (have_flag(flgs, TR_RES_ACID)) {tmp_cost += 500;count++;}
+       if (have_flag(flgs, TR_RES_ELEC)) {tmp_cost += 500;count++;}
+       if (have_flag(flgs, TR_RES_FIRE)) {tmp_cost += 500;count++;}
+       if (have_flag(flgs, TR_RES_COLD)) {tmp_cost += 500;count++;}
+       if (have_flag(flgs, TR_RES_POIS)) {tmp_cost += 1000;count += 2;}
+       if (have_flag(flgs, TR_RES_FEAR)) {tmp_cost += 1000;count += 2;}
+       if (have_flag(flgs, TR_RES_LITE)) {tmp_cost += 800;count += 2;}
+       if (have_flag(flgs, TR_RES_DARK)) {tmp_cost += 800;count += 2;}
+       if (have_flag(flgs, TR_RES_BLIND)) {tmp_cost += 900;count += 2;}
+       if (have_flag(flgs, TR_RES_CONF)) {tmp_cost += 900;count += 2;}
+       if (have_flag(flgs, TR_RES_SOUND)) {tmp_cost += 900;count += 2;}
+       if (have_flag(flgs, TR_RES_SHARDS)) {tmp_cost += 900;count += 2;}
+       if (have_flag(flgs, TR_RES_NETHER)) {tmp_cost += 900;count += 2;}
+       if (have_flag(flgs, TR_RES_NEXUS)) {tmp_cost += 900;count += 2;}
+       if (have_flag(flgs, TR_RES_CHAOS)) {tmp_cost += 1000;count += 2;}
+       if (have_flag(flgs, TR_RES_DISEN)) {tmp_cost += 2000;count += 2;}
        total += (tmp_cost * count);
 
-       if (f3 & TR3_SH_FIRE) total += 5000;
-       if (f3 & TR3_SH_ELEC) total += 5000;
-       if (f3 & TR3_SH_COLD) total += 5000;
-       if (f3 & TR3_NO_TELE) total -= 10000;
-       if (f3 & TR3_NO_MAGIC) total += 2500;
-       if (f3 & TR3_TY_CURSE) total -= 15000;
-       if (f3 & TR3_HIDE_TYPE) total += 0;
-       if (f3 & TR3_SHOW_MODS) total += 0;
-       if (f3 & TR3_FEATHER) total += 1250;
-       if (f3 & TR3_LITE) total += 1250;
-       if (f3 & TR3_SEE_INVIS) total += 2000;
-       if (f3 & TR3_TELEPATHY) total += 20000;
-       if (f3 & TR3_SLOW_DIGEST) total += 750;
-       if (f3 & TR3_REGEN) total += 2500;
-       if (f3 & TR3_WARNING) total += 2000;
-       if (f3 & TR3_XTRA_MIGHT) total += 2250;
-       if (f3 & TR3_XTRA_SHOTS) total += 10000;
-       if (f3 & TR3_IGNORE_ACID) total += 100;
-       if (f3 & TR3_IGNORE_ELEC) total += 100;
-       if (f3 & TR3_IGNORE_FIRE) total += 100;
-       if (f3 & TR3_IGNORE_COLD) total += 100;
-       if (f3 & TR3_ACTIVATE) total += 100;
-       if (f3 & TR3_DRAIN_EXP) total -= 12500;
-       if (f3 & TR3_TELEPORT)
+       if (have_flag(flgs, TR_SH_FIRE)) total += 5000;
+       if (have_flag(flgs, TR_SH_ELEC)) total += 5000;
+       if (have_flag(flgs, TR_SH_COLD)) total += 5000;
+       if (have_flag(flgs, TR_NO_TELE)) total -= 10000;
+       if (have_flag(flgs, TR_NO_MAGIC)) total += 2500;
+       if (have_flag(flgs, TR_TY_CURSE)) total -= 15000;
+       if (have_flag(flgs, TR_HIDE_TYPE)) total += 0;
+       if (have_flag(flgs, TR_SHOW_MODS)) total += 0;
+       if (have_flag(flgs, TR_FEATHER)) total += 1250;
+       if (have_flag(flgs, TR_LITE)) total += 1250;
+       if (have_flag(flgs, TR_SEE_INVIS)) total += 2000;
+       if (have_flag(flgs, TR_TELEPATHY)) total += 20000;
+       if (have_flag(flgs, TR_ESP_ANIMAL)) total += 3000;
+       if (have_flag(flgs, TR_ESP_UNDEAD)) total += 3000;
+       if (have_flag(flgs, TR_ESP_DEMON)) total += 3000;
+       if (have_flag(flgs, TR_ESP_ORC)) total += 3000;
+       if (have_flag(flgs, TR_ESP_TROLL)) total += 3000;
+       if (have_flag(flgs, TR_ESP_GIANT)) total += 3000;
+       if (have_flag(flgs, TR_ESP_DRAGON)) total += 3000;
+       if (have_flag(flgs, TR_ESP_HUMAN)) total += 3000;
+       if (have_flag(flgs, TR_ESP_EVIL)) total += 10000;
+       if (have_flag(flgs, TR_ESP_GOOD)) total += 6000;
+       if (have_flag(flgs, TR_ESP_NONLIVING)) total += 6000;
+       if (have_flag(flgs, TR_ESP_UNIQUE)) total += 10000;
+       if (have_flag(flgs, TR_SLOW_DIGEST)) total += 750;
+       if (have_flag(flgs, TR_REGEN)) total += 2500;
+       if (have_flag(flgs, TR_WARNING)) total += 2000;
+       if (have_flag(flgs, TR_XTRA_MIGHT)) total += 2250;
+       if (have_flag(flgs, TR_XTRA_SHOTS)) total += 10000;
+       if (have_flag(flgs, TR_IGNORE_ACID)) total += 100;
+       if (have_flag(flgs, TR_IGNORE_ELEC)) total += 100;
+       if (have_flag(flgs, TR_IGNORE_FIRE)) total += 100;
+       if (have_flag(flgs, TR_IGNORE_COLD)) total += 100;
+       if (have_flag(flgs, TR_ACTIVATE)) total += 100;
+       if (have_flag(flgs, TR_DRAIN_EXP)) total -= 12500;
+       if (have_flag(flgs, TR_TELEPORT))
        {
                if (cursed_p(o_ptr))
                        total -= 7500;
                else
                        total += 250;
        }
-       if (f3 & TR3_AGGRAVATE) total -= 10000;
-       if (f3 & TR3_BLESSED) total += 750;
+       if (have_flag(flgs, TR_AGGRAVATE)) total -= 10000;
+       if (have_flag(flgs, TR_BLESSED)) total += 750;
        if (o_ptr->curse_flags & TRC_CURSED) total -= 5000;
        if (o_ptr->curse_flags & TRC_HEAVY_CURSE) total -= 12500;
        if (o_ptr->curse_flags & TRC_PERMA_CURSE) total -= 15000;
 
        /* Also, give some extra for activatable powers... */
-       if (o_ptr->art_name && (o_ptr->art_flags3 & TR3_ACTIVATE))
+       if (o_ptr->art_name && (have_flag(o_ptr->art_flags, TR_ACTIVATE)))
        {
                int type = o_ptr->xtra2;
 
@@ -1132,7 +1151,7 @@ s32b object_value_real(object_type *o_ptr)
 {
        s32b value;
 
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        object_kind *k_ptr = &k_info[o_ptr->k_idx];
 
@@ -1144,7 +1163,7 @@ s32b object_value_real(object_type *o_ptr)
        value = get_object_cost(o_ptr);
 
        /* Extract some flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Artifact */
        if (o_ptr->name1)
@@ -1173,7 +1192,7 @@ s32b object_value_real(object_type *o_ptr)
                value += flag_cost(o_ptr, o_ptr->pval);
        }
 
-       else if (o_ptr->art_flags1 || o_ptr->art_flags2 || o_ptr->art_flags3)
+       else if (o_ptr->art_flags[0] || o_ptr->art_flags[1] || o_ptr->art_flags[2])
        {
                value += flag_cost(o_ptr, o_ptr->pval);
        }
@@ -1210,27 +1229,27 @@ s32b object_value_real(object_type *o_ptr)
                        if (!o_ptr->pval) break;
 
                        /* Give credit for stat bonuses */
-                       if (f1 & (TR1_STR)) value += (o_ptr->pval * 200L);
-                       if (f1 & (TR1_INT)) value += (o_ptr->pval * 200L);
-                       if (f1 & (TR1_WIS)) value += (o_ptr->pval * 200L);
-                       if (f1 & (TR1_DEX)) value += (o_ptr->pval * 200L);
-                       if (f1 & (TR1_CON)) value += (o_ptr->pval * 200L);
-                       if (f1 & (TR1_CHR)) value += (o_ptr->pval * 200L);
+                       if (have_flag(flgs, TR_STR)) value += (o_ptr->pval * 200L);
+                       if (have_flag(flgs, TR_INT)) value += (o_ptr->pval * 200L);
+                       if (have_flag(flgs, TR_WIS)) value += (o_ptr->pval * 200L);
+                       if (have_flag(flgs, TR_DEX)) value += (o_ptr->pval * 200L);
+                       if (have_flag(flgs, TR_CON)) value += (o_ptr->pval * 200L);
+                       if (have_flag(flgs, TR_CHR)) value += (o_ptr->pval * 200L);
 
                        /* Give credit for stealth and searching */
-                       if (f1 & (TR1_MAGIC_MASTERY)) value += (o_ptr->pval * 100L);
-                       if (f1 & (TR1_STEALTH)) value += (o_ptr->pval * 100L);
-                       if (f1 & (TR1_SEARCH)) value += (o_ptr->pval * 100L);
+                       if (have_flag(flgs, TR_MAGIC_MASTERY)) value += (o_ptr->pval * 100L);
+                       if (have_flag(flgs, TR_STEALTH)) value += (o_ptr->pval * 100L);
+                       if (have_flag(flgs, TR_SEARCH)) value += (o_ptr->pval * 100L);
 
                        /* Give credit for infra-vision and tunneling */
-                       if (f1 & (TR1_INFRA)) value += (o_ptr->pval * 50L);
-                       if (f1 & (TR1_TUNNEL)) value += (o_ptr->pval * 50L);
+                       if (have_flag(flgs, TR_INFRA)) value += (o_ptr->pval * 50L);
+                       if (have_flag(flgs, TR_TUNNEL)) value += (o_ptr->pval * 50L);
 
                        /* Give credit for extra attacks */
-                       if (f1 & (TR1_BLOWS)) value += (o_ptr->pval * 5000L);
+                       if (have_flag(flgs, TR_BLOWS)) value += (o_ptr->pval * 5000L);
 
                        /* Give credit for speed bonus */
-                       if (f1 & (TR1_SPEED)) value += (o_ptr->pval * 10000L);
+                       if (have_flag(flgs, TR_SPEED)) value += (o_ptr->pval * 10000L);
 
                        break;
                }
@@ -1532,6 +1551,8 @@ void reduce_charges(object_type *o_ptr, int amt)
  */
 static bool object_similar_part(object_type *o_ptr, object_type *j_ptr)
 {
+       int i;
+
        /* Require identical object types */
        if (o_ptr->k_idx != j_ptr->k_idx) return (0);
 
@@ -1703,10 +1724,8 @@ static bool object_similar_part(object_type *o_ptr, object_type *j_ptr)
 
 
        /* Hack -- Identical art_flags! */
-       if ((o_ptr->art_flags1 != j_ptr->art_flags1) ||
-           (o_ptr->art_flags2 != j_ptr->art_flags2) ||
-           (o_ptr->art_flags3 != j_ptr->art_flags3))
-               return (0);
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               if (o_ptr->art_flags[i] != j_ptr->art_flags[i]) return (0);
 
        /* Hack -- Require identical "cursed" status */
        if (o_ptr->curse_flags != j_ptr->curse_flags) return (0);
@@ -2364,21 +2383,21 @@ static void a_m_aux_1(object_type *o_ptr, int level, int power)
                                {
                                case EGO_HA:
                                        if (one_in_(4) && (level > 40))
-                                               o_ptr->art_flags1 |= TR1_BLOWS;
+                                               add_flag(o_ptr->art_flags, TR_BLOWS);
                                        break;
                                case EGO_DF:
                                        if (one_in_(3))
-                                               o_ptr->art_flags2 |= TR2_RES_POIS;
+                                               add_flag(o_ptr->art_flags, TR_RES_POIS);
                                        if (one_in_(3))
-                                               o_ptr->art_flags3 |= TR3_WARNING;
+                                               add_flag(o_ptr->art_flags, TR_WARNING);
                                        break;
                                case EGO_KILL_DRAGON:
                                        if (one_in_(3))
-                                               o_ptr->art_flags2 |= TR2_RES_POIS;
+                                               add_flag(o_ptr->art_flags, TR_RES_POIS);
                                        break;
                                case EGO_WEST:
                                        if (one_in_(3))
-                                               o_ptr->art_flags2 |= TR2_RES_FEAR;
+                                               add_flag(o_ptr->art_flags, TR_RES_FEAR);
                                        break;
                                case EGO_SLAYING_WEAPON:
                                        if (one_in_(3)) /* double damage */
@@ -2400,39 +2419,39 @@ static void a_m_aux_1(object_type *o_ptr, int level, int power)
                                        
                                        if (one_in_(5))
                                        {
-                                               o_ptr->art_flags1 |= TR1_BRAND_POIS;
+                                               add_flag(o_ptr->art_flags, TR_BRAND_POIS);
                                        }
                                        if (o_ptr->tval == TV_SWORD && one_in_(3))
                                        {
-                                               o_ptr->art_flags1 |= TR1_VORPAL;
+                                               add_flag(o_ptr->art_flags, TR_VORPAL);
                                        }
                                        break;
                                case EGO_TRUMP:
                                        if (one_in_(5))
-                                               o_ptr->art_flags1 |= TR1_SLAY_DEMON;
+                                               add_flag(o_ptr->art_flags, TR_SLAY_DEMON);
                                        if (one_in_(7))
                                                one_ability(o_ptr);
                                        break;
                                case EGO_PATTERN:
                                        if (one_in_(3))
-                                               o_ptr->art_flags2 |= TR2_HOLD_LIFE;
+                                               add_flag(o_ptr->art_flags, TR_HOLD_LIFE);
                                        if (one_in_(3))
-                                               o_ptr->art_flags1 |= TR1_DEX;
+                                               add_flag(o_ptr->art_flags, TR_DEX);
                                        if (one_in_(5))
-                                               o_ptr->art_flags2 |= TR2_RES_FEAR;
+                                               add_flag(o_ptr->art_flags, TR_RES_FEAR);
                                        break;
                                case EGO_SHARPNESS:
                                        o_ptr->pval = m_bonus(5, level) + 1;
                                        break;
                                case EGO_EARTHQUAKES:
                                        if (one_in_(3) && (level > 60))
-                                               o_ptr->art_flags1 |= TR1_BLOWS;
+                                               add_flag(o_ptr->art_flags, TR_BLOWS);
                                        else
                                                o_ptr->pval = m_bonus(3, level);
                                        break;
                                case EGO_VAMPIRIC:
                                        if (one_in_(5))
-                                               o_ptr->art_flags3 |= TR3_SLAY_HUMAN;
+                                               add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
                                        break;
                                }
 
@@ -2456,7 +2475,7 @@ static void a_m_aux_1(object_type *o_ptr, int level, int power)
                                        switch (o_ptr->name2)
                                        {
                                        case EGO_MORGUL:
-                                               if (one_in_(6)) o_ptr->art_flags3 |= TR3_TY_CURSE;
+                                               if (one_in_(6)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
                                        }
                                }
                        }
@@ -2534,6 +2553,46 @@ static void dragon_resist(object_type * o_ptr)
 }
 
 
+static void add_esp_strong(object_type *o_ptr)
+{
+        switch (randint1(3))
+        {
+        case 1: add_flag(o_ptr->art_flags, TR_ESP_EVIL); break;
+        case 2: add_flag(o_ptr->art_flags, TR_ESP_NONLIVING); break;
+        case 3: add_flag(o_ptr->art_flags, TR_TELEPATHY); break;
+        }
+}
+
+
+static void add_esp_weak(object_type *o_ptr)
+{
+        int idx[3];
+        int n = randint1(3);
+
+        idx[0] = randint1(9);
+
+        idx[1] = randint1(8);
+        if (idx[1] >= idx[0]) idx[1]++;
+
+        idx[2] = randint1(7);
+        if (idx[2] >= idx[0]) idx[2]++;
+        if (idx[2] >= idx[1]) idx[2]++;
+
+        while (n--) switch (idx[n])
+        {
+        case 1: add_flag(o_ptr->art_flags, TR_ESP_ANIMAL); break;
+        case 2: add_flag(o_ptr->art_flags, TR_ESP_UNDEAD); break;
+        case 3: add_flag(o_ptr->art_flags, TR_ESP_DEMON); break;
+        case 4: add_flag(o_ptr->art_flags, TR_ESP_ORC); break;
+        case 5: add_flag(o_ptr->art_flags, TR_ESP_TROLL); break;
+        case 6: add_flag(o_ptr->art_flags, TR_ESP_GIANT); break;
+        case 7: add_flag(o_ptr->art_flags, TR_ESP_DRAGON);   break;
+        case 8: add_flag(o_ptr->art_flags, TR_ESP_HUMAN); break;
+        case 9: add_flag(o_ptr->art_flags, TR_ESP_GOOD); break;
+        }
+}
+
+
 /*
  * Apply magic to an item known to be "armor"
  *
@@ -2636,7 +2695,7 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                        {
                                        case EGO_RESISTANCE:
                                                if (one_in_(4))
-                                                       o_ptr->art_flags2 |= TR2_RES_POIS;
+                                                       add_flag(o_ptr->art_flags, TR_RES_POIS);
                                                break;
                                        case EGO_ELVENKIND:
                                                break;
@@ -2651,7 +2710,7 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                                        o_ptr->weight = (2 * k_info[o_ptr->k_idx].weight / 3);
                                                        o_ptr->ac = k_info[o_ptr->k_idx].ac + 5;
                                                        if (one_in_(4))
-                                                               o_ptr->art_flags1 |= TR1_CON;
+                                                               add_flag(o_ptr->art_flags, TR_CON);
                                                        break;
                                                }
                                        }
@@ -2692,7 +2751,7 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                {
                                case EGO_ENDURANCE:
                                        if (!one_in_(3)) one_high_resistance(o_ptr);
-                                       if (one_in_(4)) o_ptr->art_flags2 |= TR2_RES_POIS;
+                                       if (one_in_(4)) add_flag(o_ptr->art_flags, TR_RES_POIS);
                                        break;
                                case EGO_REFLECTION:
                                        if (o_ptr->sval == SV_SHIELD_OF_DEFLECTION)
@@ -2792,14 +2851,21 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
 
                                        switch (o_ptr->name2)
                                        {
+                                       case EGO_TELEPATHY:
+                                                add_esp_strong(o_ptr);
+                                                add_esp_weak(o_ptr);
+                                                break;
                                        case EGO_MAGI:
                                        case EGO_MIGHT:
-                                       case EGO_TELEPATHY:
                                        case EGO_REGENERATION:
                                        case EGO_LORDLINESS:
                                                break;
                                        case EGO_SEEING:
-                                               if (one_in_(3)) o_ptr->art_flags3 |= TR3_TELEPATHY;
+                                               if (one_in_(3))
+                                                {
+                                                        if (one_in_(2)) add_esp_strong(o_ptr);
+                                                        else add_esp_weak(o_ptr);
+                                                }
                                                break;
                                        default:/* not existing crown (wisdom,lite, etc...) */
                                                ok_flag = FALSE;
@@ -2854,7 +2920,7 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                        case EGO_INFRAVISION:
                                                break;
                                        case EGO_SEEING:
-                                               if (one_in_(7)) o_ptr->art_flags3 |= TR3_TELEPATHY;
+                                               if (one_in_(7)) add_flag(o_ptr->art_flags, TR_TELEPATHY);
                                                break;
                                        default:/* not existing helm (Magi, Might, etc...)*/
                                                ok_flag = FALSE;
@@ -3230,15 +3296,15 @@ static void a_m_aux_3(object_type *o_ptr, int level, int power)
                                                o_ptr->name2 = EGO_RING_THROW;
                                                break;
                                        case 3: case 4:
-                                               if (k_ptr->flags3 & TR3_REGEN) break;
+                                               if (have_flag(k_ptr->flags, TR_REGEN)) break;
                                                o_ptr->name2 = EGO_RING_REGEN;
                                                break;
                                        case 5: case 6:
-                                               if (k_ptr->flags3 & TR3_LITE) break;
+                                               if (have_flag(k_ptr->flags, TR_LITE)) break;
                                                o_ptr->name2 = EGO_RING_LITE;
                                                break;
                                        case 7: case 8:
-                                               if (k_ptr->flags2 & TR3_TELEPORT) break;
+                                               if (have_flag(k_ptr->flags, TR_TELEPORT)) break;
                                                o_ptr->name2 = EGO_RING_TELEPORT;
                                                break;
                                        case 9: case 10:
@@ -3254,42 +3320,42 @@ static void a_m_aux_3(object_type *o_ptr, int level, int power)
                                                o_ptr->name2 = EGO_RING_SLAY;
                                                break;
                                        case 14:
-                                               if ((k_ptr->flags1 & TR1_STR) || o_ptr->to_h || o_ptr->to_d) break;
+                                               if ((have_flag(k_ptr->flags, TR_STR)) || o_ptr->to_h || o_ptr->to_d) break;
                                                o_ptr->name2 = EGO_RING_WIZARD;
                                                break;
                                        case 15:
-                                               if (k_ptr->flags3 & TR3_ACTIVATE) break;
+                                               if (have_flag(k_ptr->flags, TR_ACTIVATE)) break;
                                                o_ptr->name2 = EGO_RING_HERO;
                                                break;
                                        case 16:
-                                               if (k_ptr->flags3 & TR3_ACTIVATE) break;
+                                               if (have_flag(k_ptr->flags, TR_ACTIVATE)) break;
                                                if (tmp > 8) o_ptr->name2 = EGO_RING_MANA_BALL;
                                                else if (tmp > 4) o_ptr->name2 = EGO_RING_MANA_BOLT;
                                                else o_ptr->name2 = EGO_RING_MAGIC_MIS;
                                                break;
                                        case 17:
-                                               if (k_ptr->flags3 & TR3_ACTIVATE) break;
-                                               if (!(k_ptr->flags2 & TR2_RES_FIRE) && (k_ptr->flags2 & (TR2_RES_COLD | TR2_RES_ELEC | TR2_RES_ACID))) break;
+                                               if (have_flag(k_ptr->flags, TR_ACTIVATE)) break;
+                                               if (!(have_flag(k_ptr->flags, TR_RES_FIRE)) && (have_flag(k_ptr->flags, TR_RES_COLD) || have_flag(k_ptr->flags, TR_RES_ELEC) || have_flag(k_ptr->flags, TR_RES_ACID))) break;
                                                if (tmp > 7) o_ptr->name2 = EGO_RING_DRAGON_F;
                                                else if (tmp > 3) o_ptr->name2 = EGO_RING_FIRE_BALL;
                                                else o_ptr->name2 = EGO_RING_FIRE_BOLT;
                                                break;
                                        case 18:
-                                               if (k_ptr->flags3 & TR3_ACTIVATE) break;
-                                               if (!(k_ptr->flags2 & TR2_RES_COLD) && (k_ptr->flags2 & (TR2_RES_FIRE | TR2_RES_ELEC | TR2_RES_ACID))) break;
+                                               if (have_flag(k_ptr->flags, TR_ACTIVATE)) break;
+                                               if (!(have_flag(k_ptr->flags, TR_RES_COLD)) && (have_flag(k_ptr->flags, TR_RES_FIRE) || have_flag(k_ptr->flags, TR_RES_ELEC) || have_flag(k_ptr->flags, TR_RES_ACID))) break;
                                                if (tmp > 7) o_ptr->name2 = EGO_RING_DRAGON_C;
                                                else if (tmp > 3) o_ptr->name2 = EGO_RING_COLD_BALL;
                                                else o_ptr->name2 = EGO_RING_COLD_BOLT;
                                                break;
                                        case 19:
-                                               if (k_ptr->flags3 & TR3_ACTIVATE) break;
-                                               if (!(k_ptr->flags2 & TR2_RES_ELEC) && (k_ptr->flags2 & (TR2_RES_COLD | TR2_RES_FIRE | TR2_RES_ACID))) break;
+                                               if (have_flag(k_ptr->flags, TR_ACTIVATE)) break;
+                                               if (!(have_flag(k_ptr->flags, TR_RES_ELEC)) && (have_flag(k_ptr->flags, TR_RES_COLD) || have_flag(k_ptr->flags, TR_RES_FIRE) || have_flag(k_ptr->flags, TR_RES_ACID))) break;
                                                if (tmp > 4) o_ptr->name2 = EGO_RING_ELEC_BALL;
                                                else o_ptr->name2 = EGO_RING_ELEC_BOLT;
                                                break;
                                        case 20:
-                                               if (k_ptr->flags3 & TR3_ACTIVATE) break;
-                                               if (!(k_ptr->flags2 & TR2_RES_ACID) && (k_ptr->flags2 & (TR2_RES_COLD | TR2_RES_ELEC | TR2_RES_FIRE))) break;
+                                               if (have_flag(k_ptr->flags, TR_ACTIVATE)) break;
+                                               if (!(have_flag(k_ptr->flags, TR_RES_ACID)) && (have_flag(k_ptr->flags, TR_RES_COLD) || have_flag(k_ptr->flags, TR_RES_ELEC) || have_flag(k_ptr->flags, TR_RES_FIRE))) break;
                                                if (tmp > 4) o_ptr->name2 = EGO_RING_ACID_BALL;
                                                else o_ptr->name2 = EGO_RING_ACID_BOLT;
                                                break;
@@ -3371,26 +3437,26 @@ static void a_m_aux_3(object_type *o_ptr, int level, int power)
                                if (o_ptr->to_d > 0) o_ptr->to_d = 0-o_ptr->to_d;
                                if (o_ptr->to_a > 0) o_ptr->to_a = 0-o_ptr->to_a;
                                if (o_ptr->pval > 0) o_ptr->pval = 0-o_ptr->pval;
-                               o_ptr->art_flags1 = 0;
-                               o_ptr->art_flags2 = 0;
+                               o_ptr->art_flags[0] = 0;
+                               o_ptr->art_flags[1] = 0;
                                while(!o_ptr->name2)
                                {
                                        object_kind *k_ptr = &k_info[o_ptr->k_idx];
                                        switch(randint1(5))
                                        {
                                        case 1:
-                                               if (k_ptr->flags3 & TR3_DRAIN_EXP) break;
+                                               if (have_flag(k_ptr->flags, TR_DRAIN_EXP)) break;
                                                o_ptr->name2 = EGO_RING_DRAIN_EXP;
                                                break;
                                        case 2:
                                                o_ptr->name2 = EGO_RING_NO_MELEE;
                                                break;
                                        case 3:
-                                               if (k_ptr->flags3 & TR3_AGGRAVATE) break;
+                                               if (have_flag(k_ptr->flags, TR_AGGRAVATE)) break;
                                                o_ptr->name2 = EGO_RING_AGGRAVATE;
                                                break;
                                        case 4:
-                                               if (k_ptr->flags3 & TR3_TY_CURSE) break;
+                                               if (have_flag(k_ptr->flags, TR_TY_CURSE)) break;
                                                o_ptr->name2 = EGO_RING_TY_CURSE;
                                                break;
                                        case 5:
@@ -3469,7 +3535,7 @@ static void a_m_aux_3(object_type *o_ptr, int level, int power)
                                case SV_AMULET_RESISTANCE:
                                {
                                        if (one_in_(5)) one_high_resistance(o_ptr);
-                                       if (one_in_(5)) o_ptr->art_flags2 |= TR2_RES_POIS;
+                                       if (one_in_(5)) add_flag(o_ptr->art_flags, TR_RES_POIS);
                                }
                                break;
 
@@ -3560,7 +3626,7 @@ static void a_m_aux_3(object_type *o_ptr, int level, int power)
                                        switch(randint1(21))
                                        {
                                        case 1: case 2:
-                                               if (k_ptr->flags3 & TR3_SLOW_DIGEST) break;
+                                               if (have_flag(k_ptr->flags, TR_SLOW_DIGEST)) break;
                                                o_ptr->name2 = EGO_AMU_SLOW_D;
                                                break;
                                        case 3: case 4:
@@ -3568,43 +3634,43 @@ static void a_m_aux_3(object_type *o_ptr, int level, int power)
                                                o_ptr->name2 = EGO_AMU_INFRA;
                                                break;
                                        case 5: case 6:
-                                               if (k_ptr->flags3 & TR3_SEE_INVIS) break;
+                                               if (have_flag(k_ptr->flags, TR_SEE_INVIS)) break;
                                                o_ptr->name2 = EGO_AMU_SEE_INVIS;
                                                break;
                                        case 7: case 8:
-                                               if (k_ptr->flags2 & TR2_HOLD_LIFE) break;
+                                               if (have_flag(k_ptr->flags, TR_HOLD_LIFE)) break;
                                                o_ptr->name2 = EGO_AMU_HOLD_LIFE;
                                                break;
                                        case 9:
-                                               if (k_ptr->flags3 & TR3_FEATHER) break;
+                                               if (have_flag(k_ptr->flags, TR_FEATHER)) break;
                                                o_ptr->name2 = EGO_AMU_LEVITATION;
                                                break;
                                        case 10: case 11: case 21:
                                                o_ptr->name2 = EGO_AMU_AC;
                                                break;
                                        case 12:
-                                               if (k_ptr->flags2 & TR2_RES_FIRE) break;
+                                               if (have_flag(k_ptr->flags, TR_RES_FIRE)) break;
                                                if (m_bonus(10, level) > 8)
                                                        o_ptr->name2 = EGO_AMU_RES_FIRE_;
                                                else
                                                        o_ptr->name2 = EGO_AMU_RES_FIRE;
                                                break;
                                        case 13:
-                                               if (k_ptr->flags2 & TR2_RES_COLD) break;
+                                               if (have_flag(k_ptr->flags, TR_RES_COLD)) break;
                                                if (m_bonus(10, level) > 8)
                                                        o_ptr->name2 = EGO_AMU_RES_COLD_;
                                                else
                                                        o_ptr->name2 = EGO_AMU_RES_COLD;
                                                break;
                                        case 14:
-                                               if (k_ptr->flags2 & TR2_RES_ELEC) break;
+                                               if (have_flag(k_ptr->flags, TR_RES_ELEC)) break;
                                                if (m_bonus(10, level) > 8)
                                                        o_ptr->name2 = EGO_AMU_RES_ELEC_;
                                                else
                                                        o_ptr->name2 = EGO_AMU_RES_ELEC;
                                                break;
                                        case 15:
-                                               if (k_ptr->flags2 & TR2_RES_ACID) break;
+                                               if (have_flag(k_ptr->flags, TR_RES_ACID)) break;
                                                if (m_bonus(10, level) > 8)
                                                        o_ptr->name2 = EGO_AMU_RES_ACID_;
                                                else
@@ -3656,26 +3722,26 @@ static void a_m_aux_3(object_type *o_ptr, int level, int power)
                                if (o_ptr->to_d > 0) o_ptr->to_d = 0-o_ptr->to_d;
                                if (o_ptr->to_a > 0) o_ptr->to_a = 0-o_ptr->to_a;
                                if (o_ptr->pval > 0) o_ptr->pval = 0-o_ptr->pval;
-                               o_ptr->art_flags1 = 0;
-                               o_ptr->art_flags2 = 0;
+                               o_ptr->art_flags[0] = 0;
+                               o_ptr->art_flags[1] = 0;
                                while(!o_ptr->name2)
                                {
                                        object_kind *k_ptr = &k_info[o_ptr->k_idx];
                                        switch(randint1(5))
                                        {
                                        case 1:
-                                               if (k_ptr->flags3 & TR3_DRAIN_EXP) break;
+                                               if (have_flag(k_ptr->flags, TR_DRAIN_EXP)) break;
                                                o_ptr->name2 = EGO_AMU_DRAIN_EXP;
                                                break;
                                        case 2:
                                                o_ptr->name2 = EGO_AMU_FOOL;
                                                break;
                                        case 3:
-                                               if (k_ptr->flags3 & TR3_AGGRAVATE) break;
+                                               if (have_flag(k_ptr->flags, TR_AGGRAVATE)) break;
                                                o_ptr->name2 = EGO_AMU_AGGRAVATE;
                                                break;
                                        case 4:
-                                               if (k_ptr->flags3 & TR3_TY_CURSE) break;
+                                               if (have_flag(k_ptr->flags, TR_TY_CURSE)) break;
                                                o_ptr->name2 = EGO_AMU_TY_CURSE;
                                                break;
                                        case 5:
@@ -4241,7 +4307,12 @@ void apply_magic(object_type *o_ptr, int lev, bool okay, bool good, bool great,
            (p_ptr->pseikaku == SEIKAKU_SEXY))
        {
                o_ptr->pval = 3;
-               o_ptr->art_flags1 |= (TR1_STR | TR1_INT | TR1_WIS | TR1_DEX | TR1_CON | TR1_CHR);
+               add_flag(o_ptr->art_flags, TR_STR);
+               add_flag(o_ptr->art_flags, TR_INT);
+               add_flag(o_ptr->art_flags, TR_WIS);
+               add_flag(o_ptr->art_flags, TR_DEX);
+               add_flag(o_ptr->art_flags, TR_CON);
+               add_flag(o_ptr->art_flags, TR_CHR);
        }
 
        if (o_ptr->art_name) rating += 30;
@@ -4308,7 +4379,7 @@ void apply_magic(object_type *o_ptr, int lev, bool okay, bool good, bool great,
                        /* Hack -- obtain pval */
                        if (e_ptr->max_pval)
                        {
-                               if ((o_ptr->name2 == EGO_HA) && (o_ptr->art_flags1 & TR1_BLOWS))
+                               if ((o_ptr->name2 == EGO_HA) && (have_flag(o_ptr->art_flags, TR_BLOWS)))
                                {
                                        o_ptr->pval++;
                                        if ((lev > 60) && one_in_(3) && ((o_ptr->dd*(o_ptr->ds+1)) < 15)) o_ptr->pval++;
@@ -6168,11 +6239,11 @@ object_type *choose_warning_item(void)
        /* Search Inventry */
        for (i = INVEN_RARM; i < INVEN_TOTAL; i++)
        {
-               u32b f1, f2, f3;
+               u32b flgs[TR_FLAG_SIZE];
                object_type *o_ptr = &inventory[i];
 
-               object_flags(o_ptr, &f1, &f2, &f3);
-               if (f3 & (TR3_WARNING))
+               object_flags(o_ptr, flgs);
+               if (have_flag(flgs, TR_WARNING))
                {
                        choices[number] = i;
                        number++;
@@ -6699,7 +6770,7 @@ static void drain_essence(void)
        int dec = 4;
        bool observe = FALSE;
        int old_ds, old_dd, old_to_h, old_to_d, old_ac, old_to_a, old_pval, old_name2;
-       u32b old_f1, old_f2, old_f3, new_f1, new_f2, new_f3;
+       u32b old_flgs[TR_FLAG_SIZE], new_flgs[TR_FLAG_SIZE];
        object_type *o_ptr;
        cptr            q, s;
        byte iy, ix, marked, number;
@@ -6746,8 +6817,8 @@ static void drain_essence(void)
 
        energy_use = 100;
 
-       object_flags(o_ptr, &old_f1, &old_f2, &old_f3);
-       if (old_f1 & TR1_KILL_DRAGON) old_f1 |= TR1_SLAY_DRAGON;
+       object_flags(o_ptr, old_flgs);
+       if (have_flag(old_flgs, TR_KILL_DRAGON)) add_flag(old_flgs, TR_SLAY_DRAGON);
 
        old_to_a = o_ptr->to_a;
        old_ac = o_ptr->ac;
@@ -6758,10 +6829,10 @@ static void drain_essence(void)
        old_pval = o_ptr->pval;
        old_name2 = o_ptr->name2;
        if (o_ptr->curse_flags & (TRC_CURSED | TRC_HEAVY_CURSE | TRC_PERMA_CURSE)) dec--;
-       if (old_f3 & (TR3_AGGRAVATE)) dec--;
-       if (old_f3 & (TR3_NO_TELE)) dec--;
-       if (old_f3 & (TR3_DRAIN_EXP)) dec--;
-       if (old_f3 & (TR3_TY_CURSE)) dec--;
+       if (have_flag(old_flgs, TR_AGGRAVATE)) dec--;
+       if (have_flag(old_flgs, TR_NO_TELE)) dec--;
+       if (have_flag(old_flgs, TR_DRAIN_EXP)) dec--;
+       if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
 
        iy = o_ptr->iy;
        ix = o_ptr->ix;
@@ -6782,60 +6853,48 @@ static void drain_essence(void)
        object_aware(o_ptr);
        object_known(o_ptr);
 
-       object_flags(o_ptr, &new_f1, &new_f2, &new_f3);
+       object_flags(o_ptr, new_flgs);
 
        for (i = 0; i < 96; i++)
        {
-               if (i < 32)
-               {
-                       int pval = 0;
+               int pval = 0;
+
+               if (is_pval_flag(i) && old_pval) pval = (have_flag(new_flgs, i)) ? old_pval-o_ptr->pval : old_pval;
 
-                       if (((1 << i) & TR1_PVAL_MASK) && old_pval) pval = ((new_f1 >> i) & 0x00000001) ? old_pval-o_ptr->pval : old_pval;
-                       if ((!((new_f1 >> i) & 0x00000001) || pval) && ((old_f1 >> i) & 0x00000001) && essence_info[i].link)
+               if ((!(have_flag(new_flgs, i)) || pval) && (have_flag(old_flgs, i)) && essence_info[i].link)
+               {
+                       if (pval)
                        {
-                               drain_value[essence_info[i].link-1] += (10 * (pval ? pval : 1));
+                               drain_value[essence_info[i].link-1] += 10 * pval;
                        }
-               }
-               else if (i < 64)
-               {
-                       if (!((new_f2 >> (i-32)) & 0x00000001) && ((old_f2 >> (i-32)) & 0x00000001) && essence_info[i].link)
+                       else if (essence_info[i].link != -1)
                        {
                                drain_value[essence_info[i].link-1] += 10;
                        }
-               }
-               else
-               {
-                       if (!((new_f3 >> (i-64)) & 0x00000001) && ((old_f3 >> (i-64)) & 0x00000001) && essence_info[i].link)
+                       else if (i == ESSENCE__SH__FIRE-1)
                        {
-                               if (essence_info[i].link == -1)
-                               {
-                                       if (i == ESSENCE__SH__FIRE-1)
-                                       {
-                                               drain_value[ESSENCE_B_FIRE-1] += 10;
-                                               drain_value[ESSENCE_RES_FIRE-1] += 10;
-                                       }
-                                       else if (i == ESSENCE__SH__ELEC-1)
-                                       {
-                                               drain_value[ESSENCE_B_ELEC-1] += 10;
-                                               drain_value[ESSENCE_RES_ELEC-1] += 10;
-                                       }
-                                       else if (i == ESSENCE__SH__COLD-1)
-                                       {
-                                               drain_value[ESSENCE_B_COLD-1] += 10;
-                                               drain_value[ESSENCE_RES_COLD-1] += 10;
-                                       }
-                               }
-                               else drain_value[essence_info[i].link-1] += 10;
+                               drain_value[ESSENCE_B_FIRE-1] += 10;
+                               drain_value[ESSENCE_RES_FIRE-1] += 10;
+                       }
+                       else if (i == ESSENCE__SH__ELEC-1)
+                       {
+                               drain_value[ESSENCE_B_ELEC-1] += 10;
+                               drain_value[ESSENCE_RES_ELEC-1] += 10;
+                       }
+                       else if (i == ESSENCE__SH__COLD-1)
+                       {
+                               drain_value[ESSENCE_B_COLD-1] += 10;
+                               drain_value[ESSENCE_RES_COLD-1] += 10;
                        }
                }
        }
 
-       if ((old_f1 & TR1_FORCE_WEAPON) && !(new_f1 & TR1_FORCE_WEAPON))
+       if ((have_flag(old_flgs, TR_FORCE_WEAPON)) && !(have_flag(new_flgs, TR_FORCE_WEAPON)))
        {
                drain_value[ESSENCE_INT-1] += 5;
                drain_value[ESSENCE_WIS-1] += 5;
        }
-       if ((old_f1 & TR1_VORPAL) && !(new_f1 & TR1_VORPAL))
+       if ((have_flag(old_flgs, TR_VORPAL)) && !(have_flag(new_flgs, TR_VORPAL)))
        {
                drain_value[ESSENCE_B_POIS-1] += 5;
                drain_value[ESSENCE_B_ACID-1] += 5;
@@ -6843,15 +6902,15 @@ static void drain_essence(void)
                drain_value[ESSENCE_B_FIRE-1] += 5;
                drain_value[ESSENCE_B_COLD-1] += 5;
        }
-       if ((old_f3 & TR3_DEC_MANA) && !(new_f3 & TR3_DEC_MANA))
+       if ((have_flag(old_flgs, TR_DEC_MANA)) && !(have_flag(new_flgs, TR_DEC_MANA)))
        {
                drain_value[ESSENCE_INT-1] += 10;
        }
-       if ((old_f3 & TR3_XTRA_MIGHT) && !(new_f3 & TR3_XTRA_MIGHT))
+       if ((have_flag(old_flgs, TR_XTRA_MIGHT)) && !(have_flag(new_flgs, TR_XTRA_MIGHT)))
        {
                drain_value[ESSENCE_STR-1] += 10;
        }
-       if ((old_f3 & TR3_XTRA_SHOTS) && !(new_f3 & TR3_XTRA_SHOTS))
+       if ((have_flag(old_flgs, TR_XTRA_SHOTS)) && !(have_flag(new_flgs, TR_XTRA_SHOTS)))
        {
                drain_value[ESSENCE_DEX-1] += 10;
        }
@@ -7406,7 +7465,7 @@ static void add_essence(int mode)
 #endif
                        return;
                }
-               if ((num[i] < 32) && (TR1_PVAL_MASK & (0x1L << num[i])))
+               if ((num[i] < 32) && is_pval_flag(num[i]))
                {
                        if (num[i] == ESSENCE_BLOWS-1)
                        {
@@ -7599,7 +7658,12 @@ static void add_essence(int mode)
                        return;
                }
                if (num[i] == ESSENCE_SUSTAIN-1)
-                       o_ptr->art_flags3 |= (TR3_IGNORE_ACID | TR3_IGNORE_ELEC | TR3_IGNORE_FIRE | TR3_IGNORE_COLD);
+               {
+                       add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
+                       add_flag(o_ptr->art_flags, TR_IGNORE_ELEC);
+                       add_flag(o_ptr->art_flags, TR_IGNORE_FIRE);
+                       add_flag(o_ptr->art_flags, TR_IGNORE_COLD);
+               }
                else o_ptr->xtra3 = num[i]+1;
        }
 
@@ -7655,7 +7719,7 @@ static void erase_essence(void)
        cptr q, s;
        object_type *o_ptr;
        char o_name[MAX_NLEN];
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        item_tester_hook = item_tester_hook_kaji;
 
@@ -7698,8 +7762,8 @@ static void erase_essence(void)
                o_ptr->xtra4 = 0;
        }
        o_ptr->xtra3 = 0;
-       object_flags(o_ptr, &f1, &f2, &f3);
-       if (!(f1 & TR1_PVAL_MASK)) o_ptr->pval = 0;
+       object_flags(o_ptr, flgs);
+       if (!(have_pval_flags(flgs))) o_ptr->pval = 0;
 #ifdef JP
        msg_print("¥¨¥Ã¥»¥ó¥¹¤ò¼è¤êµî¤Ã¤¿¡£");
 #else
index 6ccd099..3d8b9f5 100644 (file)
@@ -113,9 +113,10 @@ static void wr_item(object_type *o_ptr)
 
        wr_byte(o_ptr->marked);
 
-       wr_u32b(o_ptr->art_flags1);
-       wr_u32b(o_ptr->art_flags2);
-       wr_u32b(o_ptr->art_flags3);
+       wr_u32b(o_ptr->art_flags[0]);
+       wr_u32b(o_ptr->art_flags[1]);
+       wr_u32b(o_ptr->art_flags[2]);
+       wr_u32b(o_ptr->art_flags[3]);
 
        wr_u32b(o_ptr->curse_flags);
 
index bc68bd2..6f105b5 100644 (file)
@@ -1267,7 +1267,7 @@ static bool project_o(int who, int r, int y, int x, int dam, int typ)
        bool obvious = FALSE;
        bool known = player_has_los_bold(y, x);
 
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        char o_name[MAX_NLEN];
 
@@ -1301,7 +1301,7 @@ static bool project_o(int who, int r, int y, int x, int dam, int typ)
                next_o_idx = o_ptr->next_o_idx;
 
                /* Extract the flags */
-               object_flags(o_ptr, &f1, &f2, &f3);
+               object_flags(o_ptr, flgs);
 
                /* Get the "plural"-ness */
                if (o_ptr->number > 1) plural = TRUE;
@@ -1324,7 +1324,7 @@ note_kill = "ͻ
                                        note_kill = (plural ? " melt!" : " melts!");
 #endif
 
-                                       if (f3 & (TR3_IGNORE_ACID)) ignore = TRUE;
+                                       if (have_flag(flgs, TR_IGNORE_ACID)) ignore = TRUE;
                                }
                                break;
                        }
@@ -1341,7 +1341,7 @@ note_kill = "
                                        note_kill = (plural ? " are destroyed!" : " is destroyed!");
 #endif
 
-                                       if (f3 & (TR3_IGNORE_ELEC)) ignore = TRUE;
+                                       if (have_flag(flgs, TR_IGNORE_ELEC)) ignore = TRUE;
                                }
                                break;
                        }
@@ -1358,7 +1358,7 @@ note_kill = "dz
                                        note_kill = (plural ? " burn up!" : " burns up!");
 #endif
 
-                                       if (f3 & (TR3_IGNORE_FIRE)) ignore = TRUE;
+                                       if (have_flag(flgs, TR_IGNORE_FIRE)) ignore = TRUE;
                                }
                                break;
                        }
@@ -1375,7 +1375,7 @@ note_kill = "
 #endif
 
                                        do_kill = TRUE;
-                                       if (f3 & (TR3_IGNORE_COLD)) ignore = TRUE;
+                                       if (have_flag(flgs, TR_IGNORE_COLD)) ignore = TRUE;
                                }
                                break;
                        }
@@ -1392,7 +1392,7 @@ note_kill = "dz
                                        note_kill = (plural ? " burn up!" : " burns up!");
 #endif
 
-                                       if (f3 & (TR3_IGNORE_FIRE)) ignore = TRUE;
+                                       if (have_flag(flgs, TR_IGNORE_FIRE)) ignore = TRUE;
                                }
                                if (hates_elec(o_ptr))
                                {
@@ -1404,7 +1404,7 @@ note_kill = "
                                        note_kill = (plural ? " are destroyed!" : " is destroyed!");
 #endif
 
-                                       if (f3 & (TR3_IGNORE_ELEC)) ignore = TRUE;
+                                       if (have_flag(flgs, TR_IGNORE_ELEC)) ignore = TRUE;
                                }
                                break;
                        }
@@ -1421,7 +1421,7 @@ note_kill = "dz
                                        note_kill = (plural ? " burn up!" : " burns up!");
 #endif
 
-                                       if (f3 & (TR3_IGNORE_FIRE)) ignore = TRUE;
+                                       if (have_flag(flgs, TR_IGNORE_FIRE)) ignore = TRUE;
                                }
                                if (hates_cold(o_ptr))
                                {
@@ -1433,7 +1433,7 @@ note_kill = "
                                        note_kill = (plural ? " shatter!" : " shatters!");
 #endif
 
-                                       if (f3 & (TR3_IGNORE_COLD)) ignore = TRUE;
+                                       if (have_flag(flgs, TR_IGNORE_COLD)) ignore = TRUE;
                                }
                                break;
                        }
@@ -1493,7 +1493,7 @@ note_kill = "
                                note_kill = (plural ? " are destroyed!" : " is destroyed!");
 #endif
 
-                               if (f2 & (TR2_RES_CHAOS)) ignore = TRUE;
+                               if (have_flag(flgs, TR_RES_CHAOS)) ignore = TRUE;
                                else if ((o_ptr->tval == TV_SCROLL) && (o_ptr->sval == SV_SCROLL_CHAOS)) ignore = TRUE;
                                break;
                        }
index cbc0fe1..7fcc7d5 100644 (file)
@@ -34,7 +34,7 @@ void self_knowledge(void)
        char v_string [8] [128];
        char s_string [6] [128];
 
-       u32b f1 = 0L, f2 = 0L, f3 = 0L;
+       u32b flgs[TR_FLAG_SIZE];
 
        object_type *o_ptr;
 
@@ -47,6 +47,9 @@ void self_knowledge(void)
 
        int percent;
 
+       for (j = 0; j < TR_FLAG_SIZE; j++)
+               flgs[j] = 0L;
+
        p_ptr->knowledge |= (KNOW_STAT | KNOW_HPRATE);
 
        strcpy(Dummy, "");
@@ -71,7 +74,7 @@ sprintf(Dummy, "
        /* Acquire item flags from equipment */
        for (k = INVEN_RARM; k < INVEN_TOTAL; k++)
        {
-               u32b t1, t2, t3;
+               u32b tflgs[TR_FLAG_SIZE];
 
                o_ptr = &inventory[k];
 
@@ -79,12 +82,11 @@ sprintf(Dummy, "
                if (!o_ptr->k_idx) continue;
 
                /* Extract the flags */
-               object_flags(o_ptr, &t1, &t2, &t3);
+               object_flags(o_ptr, tflgs);
 
                /* Extract flags */
-               f1 |= t1;
-               f2 |= t2;
-               f3 |= t3;
+               for (j = 0; j < TR_FLAG_SIZE; j++)
+                       flgs[j] |= tflgs[j];
        }
 
 #ifdef JP
@@ -2134,6 +2136,105 @@ info[i++] = "
 #endif
 
        }
+       if (p_ptr->esp_animal)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¼«Á³³¦¤ÎÀ¸Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense natural creatures.";
+#endif
+
+       }
+       if (p_ptr->esp_undead)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥¢¥ó¥Ç¥Ã¥É¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense undead.";
+#endif
+
+       }
+       if (p_ptr->esp_demon)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï°­Ëâ¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense demons.";
+#endif
+
+       }
+       if (p_ptr->esp_troll)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥È¥í¥ë¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense trolls.";
+#endif
+
+       }
+       if (p_ptr->esp_giant)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ïµð¿Í¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense giants.";
+#endif
+
+       }
+       if (p_ptr->esp_dragon)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¥É¥é¥´¥ó¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense dragons.";
+#endif
+
+       }
+       if (p_ptr->esp_human)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¿Í´Ö¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense humans.";
+#endif
+
+       }
+       if (p_ptr->esp_evil)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï¼Ù°­¤ÊÀ¸¤­Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense evil creatures.";
+#endif
+
+       }
+       if (p_ptr->esp_good)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏÁ±ÎɤÊÀ¸¤­Êª¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense good creatures.";
+#endif
+
+       }
+       if (p_ptr->esp_nonliving)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤Ï³èÆ°¤¹¤ë̵À¸ÊªÂΤθºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense non-living creatures.";
+#endif
+
+       }
+       if (p_ptr->esp_unique)
+       {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÏÆÃÊ̤ʶ¯Å¨¤Î¸ºß¤ò´¶¤¸¤ëǽÎϤò»ý¤Ã¤Æ¤¤¤ë¡£";
+#else
+               info[i++] = "You sense unique monsters.";
+#endif
+
+       }
        if (p_ptr->hold_life)
        {
 #ifdef JP
@@ -2615,7 +2716,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_STR))
+       if (have_flag(flgs, TR_STR))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÏÓÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2624,7 +2725,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_INT))
+       if (have_flag(flgs, TR_INT))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÃÎǽ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2633,7 +2734,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_WIS))
+       if (have_flag(flgs, TR_WIS))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤Î¸­¤µ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2642,7 +2743,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_DEX))
+       if (have_flag(flgs, TR_DEX))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤Î´ïÍѤµ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2651,7 +2752,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_CON))
+       if (have_flag(flgs, TR_CON))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÂѵ×ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2660,7 +2761,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_CHR))
+       if (have_flag(flgs, TR_CHR))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÌ¥ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2670,7 +2771,7 @@ info[i++] = "
 
        }
 
-       if (f1 & (TR1_STEALTH))
+       if (have_flag(flgs, TR_STEALTH))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤Î±£Ì©¹ÔưǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2679,7 +2780,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SEARCH))
+       if (have_flag(flgs, TR_SEARCH))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤Îõº÷ǽÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2688,7 +2789,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_INFRA))
+       if (have_flag(flgs, TR_INFRA))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÀÖ³°Àþ»ëÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2697,7 +2798,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_TUNNEL))
+       if (have_flag(flgs, TR_TUNNEL))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎºÎ·¡Ç½ÎϤÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2706,7 +2807,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_SPEED))
+       if (have_flag(flgs, TR_SPEED))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤Î¥¹¥Ô¡¼¥É¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2715,7 +2816,7 @@ info[i++] = "
 #endif
 
        }
-       if (f1 & (TR1_BLOWS))
+       if (have_flag(flgs, TR_BLOWS))
        {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤Î¹¶·â®ÅÙ¤ÏÁõÈ÷¤Ë¤è¤Ã¤Æ±Æ¶Á¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2733,7 +2834,7 @@ info[i++] = "
        if (o_ptr->k_idx)
        {
                /* Indicate Blessing */
-               if (f3 & (TR3_BLESSED))
+               if (have_flag(flgs, TR_BLESSED))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿À¤Î½ËÊ¡¤ò¼õ¤±¤Æ¤¤¤ë¡£";
@@ -2743,7 +2844,7 @@ info[i++] = "
 
                }
 
-               if (f1 & (TR1_CHAOTIC))
+               if (have_flag(flgs, TR_CHAOTIC))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥í¥°¥ë¥¹¤Îħ¤Î°À­¤ò¤â¤Ä¡£";
@@ -2754,7 +2855,7 @@ info[i++] = "
                }
 
                /* Hack */
-               if (f1 & (TR1_IMPACT))
+               if (have_flag(flgs, TR_IMPACT))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÂÇ·â¤ÇÃϿ̤òȯÀ¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£";
@@ -2764,7 +2865,7 @@ info[i++] = "
 
                }
 
-               if (f1 & (TR1_VORPAL))
+               if (have_flag(flgs, TR_VORPAL))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÈó¾ï¤Ë±Ô¤¤¡£";
@@ -2774,7 +2875,7 @@ info[i++] = "
 
                }
 
-               if (f1 & (TR1_VAMPIRIC))
+               if (have_flag(flgs, TR_VAMPIRIC))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤«¤éÀ¸Ì¿ÎϤòµÛ¼ý¤¹¤ë¡£";
@@ -2785,7 +2886,7 @@ info[i++] = "
                }
 
                /* Special "Attack Bonuses" */
-               if (f1 & (TR1_BRAND_ACID))
+               if (have_flag(flgs, TR_BRAND_ACID))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÍϤ«¤¹¡£";
@@ -2794,7 +2895,7 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_BRAND_ELEC))
+               if (have_flag(flgs, TR_BRAND_ELEC))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤ò´¶ÅŤµ¤»¤ë¡£";
@@ -2803,7 +2904,7 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_BRAND_FIRE))
+               if (have_flag(flgs, TR_BRAND_FIRE))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òdz¤ä¤¹¡£";
@@ -2812,7 +2913,7 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_BRAND_COLD))
+               if (have_flag(flgs, TR_BRAND_COLD))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÅà¤é¤»¤ë¡£";
@@ -2821,7 +2922,7 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_BRAND_POIS))
+               if (have_flag(flgs, TR_BRAND_POIS))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏŨ¤òÆǤǿ¯¤¹¡£";
@@ -2832,7 +2933,16 @@ info[i++] = "
                }
 
                /* Special "slay" flags */
-               if (f1 & (TR1_SLAY_ANIMAL))
+               if (have_flag(flgs, TR_KILL_ANIMAL))
+               {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+                       info[i++] = "Your weapon is a great bane of animals.";
+#endif
+
+               }
+               else if (have_flag(flgs, TR_SLAY_ANIMAL))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ïưʪ¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2841,7 +2951,16 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_SLAY_EVIL))
+               if (have_flag(flgs, TR_KILL_EVIL))
+               {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°­¤Ê¤ë¸ºß¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+                       info[i++] = "Your weapon is a great bane of evil.";
+#endif
+
+               }
+               else if (have_flag(flgs, TR_SLAY_EVIL))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¼Ù°­¤Ê¤ë¸ºß¤ËÂФ·¤Æ¶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2850,7 +2969,16 @@ info[i++] = "
 #endif
 
                }
-               if (f3 & (TR3_SLAY_HUMAN))
+               if (have_flag(flgs, TR_KILL_HUMAN))
+               {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+                       info[i++] = "Your weapon is a great bane of humans.";
+#endif
+
+               }
+               else if (have_flag(flgs, TR_SLAY_HUMAN))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¿Í´Ö¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2859,7 +2987,16 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_SLAY_UNDEAD))
+               if (have_flag(flgs, TR_KILL_UNDEAD))
+               {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+                       info[i++] = "Your weapon is a great bane of undead.";
+#endif
+
+               }
+               else if (have_flag(flgs, TR_SLAY_UNDEAD))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¢¥ó¥Ç¥Ã¥É¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
@@ -2868,7 +3005,16 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_SLAY_DEMON))
+               if (have_flag(flgs, TR_KILL_DEMON))
+               {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+                       info[i++] = "Your weapon is a great bane of demons.";
+#endif
+
+               }
+               else if (have_flag(flgs, TR_SLAY_DEMON))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥Ç¡¼¥â¥ó¤ËÂФ·¤Æ¿ÀÀ»¤Ê¤ëÎϤòȯ´ø¤¹¤ë¡£";
@@ -2877,7 +3023,16 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_SLAY_ORC))
+               if (have_flag(flgs, TR_KILL_ORC))
+               {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+                       info[i++] = "Your weapon is a great bane of orcs.";
+#endif
+
+               }
+               else if (have_flag(flgs, TR_SLAY_ORC))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥ª¡¼¥¯¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2886,7 +3041,16 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_SLAY_TROLL))
+               if (have_flag(flgs, TR_KILL_TROLL))
+               {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+                       info[i++] = "Your weapon is a great bane of trolls.";
+#endif
+
+               }
+               else if (have_flag(flgs, TR_SLAY_TROLL))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥È¥í¥ë¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2895,7 +3059,16 @@ info[i++] = "
 #endif
 
                }
-               if (f1 & (TR1_SLAY_GIANT))
+               if (have_flag(flgs, TR_KILL_GIANT))
+               {
+#ifdef JP
+info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ÎŷŨ¤Ç¤¢¤ë¡£";
+#else
+                       info[i++] = "Your weapon is a great bane of giants.";
+#endif
+
+               }
+               else if (have_flag(flgs, TR_SLAY_GIANT))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥¸¥ã¥¤¥¢¥ó¥È¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2905,7 +3078,7 @@ info[i++] = "
 
                }
                /* Special "kill" flags */
-               if (f1 & (TR1_KILL_DRAGON))
+               if (have_flag(flgs, TR_KILL_DRAGON))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ÎŷŨ¤Ç¤¢¤ë¡£";
@@ -2914,7 +3087,7 @@ info[i++] = "
 #endif
 
                }
-               else if (f1 & (TR1_SLAY_DRAGON))
+               else if (have_flag(flgs, TR_SLAY_DRAGON))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤Ï¥É¥é¥´¥ó¤ËÂФ·¤ÆÆä˶¯¤¤ÎϤòȯ´ø¤¹¤ë¡£";
@@ -2924,7 +3097,7 @@ info[i++] = "
 
                }
 
-               if (f1 & (TR1_FORCE_WEAPON))
+               if (have_flag(flgs, TR_FORCE_WEAPON))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏMP¤ò»È¤Ã¤Æ¹¶·â¤¹¤ë¡£";
@@ -2933,7 +3106,7 @@ info[i++] = "
 #endif
 
                }
-               if (f2 & (TR2_THROW))
+               if (have_flag(flgs, TR_THROW))
                {
 #ifdef JP
 info[i++] = "¤¢¤Ê¤¿¤ÎÉð´ï¤ÏÅꤲ¤ä¤¹¤¤¡£";
index 501550f..40ce5a8 100644 (file)
@@ -3266,7 +3266,7 @@ bool bless_weapon(void)
 {
        int             item;
        object_type     *o_ptr;
-       u32b            f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        char            o_name[MAX_NLEN];
        cptr            q, s;
 
@@ -3303,7 +3303,7 @@ s = "
        object_desc(o_name, o_ptr, FALSE, 0);
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        if (cursed_p(o_ptr))
        {
@@ -3354,7 +3354,7 @@ msg_format("%s 
         * artifact weapon they find. Ego weapons and normal weapons
         * can be blessed automatically.
         */
-       if (f3 & TR3_BLESSED)
+       if (have_flag(flgs, TR_BLESSED))
        {
 #ifdef JP
 msg_format("%s ¤Ï´û¤Ë½ËÊ¡¤µ¤ì¤Æ¤¤¤ë¡£",
@@ -3380,7 +3380,7 @@ msg_format("%s
                    ((o_ptr->number > 1) ? "" : "s"));
 #endif
 
-               o_ptr->art_flags3 |= TR3_BLESSED;
+               add_flag(o_ptr->art_flags, TR_BLESSED);
                o_ptr->discount = 99;
        }
        else
@@ -3460,7 +3460,7 @@ bool pulish_shield(void)
 {
        int             item;
        object_type     *o_ptr;
-       u32b            f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        char            o_name[MAX_NLEN];
        cptr            q, s;
 
@@ -3497,7 +3497,7 @@ s = "
        object_desc(o_name, o_ptr, FALSE, 0);
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        if (o_ptr->k_idx && !artifact_p(o_ptr) && !ego_item_p(o_ptr) &&
            !o_ptr->art_name && !cursed_p(o_ptr) && (o_ptr->sval != SV_SHIELD_OF_DEFLECTION))
@@ -4825,10 +4825,10 @@ bool hates_cold(object_type *o_ptr)
  */
 int set_acid_destroy(object_type *o_ptr)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        if (!hates_acid(o_ptr)) return (FALSE);
-       object_flags(o_ptr, &f1, &f2, &f3);
-       if (f3 & TR3_IGNORE_ACID) return (FALSE);
+       object_flags(o_ptr, flgs);
+       if (have_flag(flgs, TR_IGNORE_ACID)) return (FALSE);
        return (TRUE);
 }
 
@@ -4838,10 +4838,10 @@ int set_acid_destroy(object_type *o_ptr)
  */
 int set_elec_destroy(object_type *o_ptr)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        if (!hates_elec(o_ptr)) return (FALSE);
-       object_flags(o_ptr, &f1, &f2, &f3);
-       if (f3 & TR3_IGNORE_ELEC) return (FALSE);
+       object_flags(o_ptr, flgs);
+       if (have_flag(flgs, TR_IGNORE_ELEC)) return (FALSE);
        return (TRUE);
 }
 
@@ -4851,10 +4851,10 @@ int set_elec_destroy(object_type *o_ptr)
  */
 int set_fire_destroy(object_type *o_ptr)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        if (!hates_fire(o_ptr)) return (FALSE);
-       object_flags(o_ptr, &f1, &f2, &f3);
-       if (f3 & TR3_IGNORE_FIRE) return (FALSE);
+       object_flags(o_ptr, flgs);
+       if (have_flag(flgs, TR_IGNORE_FIRE)) return (FALSE);
        return (TRUE);
 }
 
@@ -4864,10 +4864,10 @@ int set_fire_destroy(object_type *o_ptr)
  */
 int set_cold_destroy(object_type *o_ptr)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        if (!hates_cold(o_ptr)) return (FALSE);
-       object_flags(o_ptr, &f1, &f2, &f3);
-       if (f3 & TR3_IGNORE_COLD) return (FALSE);
+       object_flags(o_ptr, flgs);
+       if (have_flag(flgs, TR_IGNORE_COLD)) return (FALSE);
        return (TRUE);
 }
 
@@ -4978,7 +4978,7 @@ o_name, index_to_label(i),
 static int minus_ac(void)
 {
        object_type *o_ptr = NULL;
-       u32b        f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        char        o_name[MAX_NLEN];
 
 
@@ -5007,10 +5007,10 @@ static int minus_ac(void)
        object_desc(o_name, o_ptr, FALSE, 0);
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Object resists */
-       if (f3 & TR3_IGNORE_ACID)
+       if (have_flag(flgs, TR_IGNORE_ACID))
        {
 #ifdef JP
 msg_format("¤·¤«¤·%s¤Ë¤Ï¸ú²Ì¤¬¤Ê¤«¤Ã¤¿¡ª", o_name);
@@ -5233,7 +5233,7 @@ s = "
        /* Description */
        object_desc(o_name, o_ptr, FALSE, 0);
 
-       o_ptr->art_flags3 |= TR3_IGNORE_ACID;
+       add_flag(o_ptr->art_flags, TR_IGNORE_ACID);
 
        if ((o_ptr->to_a < 0) && !cursed_p(o_ptr))
        {
@@ -5268,6 +5268,7 @@ msg_format("%s
  */
 bool curse_armor(void)
 {
+       int i;
        object_type *o_ptr;
 
        char o_name[MAX_NLEN];
@@ -5318,9 +5319,9 @@ msg_format("
                o_ptr->ac = 0;
                o_ptr->dd = 0;
                o_ptr->ds = 0;
-               o_ptr->art_flags1 = 0;
-               o_ptr->art_flags2 = 0;
-               o_ptr->art_flags3 = 0;
+
+               for (i = 0; i < TR_FLAG_SIZE; i++)
+                       o_ptr->art_flags[i] = 0;
 
                /* Curse it */
                o_ptr->curse_flags = TRC_CURSED;
@@ -5347,6 +5348,8 @@ msg_format("
  */
 bool curse_weapon(bool force, int slot)
 {
+       int i;
+
        object_type *o_ptr;
 
        char o_name[MAX_NLEN];
@@ -5397,9 +5400,9 @@ if (!force) msg_format("
                o_ptr->ac = 0;
                o_ptr->dd = 0;
                o_ptr->ds = 0;
-               o_ptr->art_flags1 = 0;
-               o_ptr->art_flags2 = 0;
-               o_ptr->art_flags3 = 0;
+
+               for (i = 0; i < TR_FLAG_SIZE; i++)
+                       o_ptr->art_flags[i] = 0;
 
 
                /* Curse it */
index 0c8c1d4..715aa79 100644 (file)
@@ -1138,6 +1138,8 @@ msg_print("
  */
 static bool store_object_similar(object_type *o_ptr, object_type *j_ptr)
 {
+       int i;
+
        /* Hack -- Identical items cannot be stacked */
        if (o_ptr == j_ptr) return (0);
 
@@ -1162,10 +1164,8 @@ static bool store_object_similar(object_type *o_ptr, object_type *j_ptr)
        if (o_ptr->art_name || j_ptr->art_name) return (0);
 
        /* Hack -- Identical art_flags! */
-       if ((o_ptr->art_flags1 != j_ptr->art_flags1) ||
-               (o_ptr->art_flags2 != j_ptr->art_flags2) ||
-               (o_ptr->art_flags3 != j_ptr->art_flags3))
-                       return (0);
+       for (i = 0; i < TR_FLAG_SIZE; i++)
+               if (o_ptr->art_flags[i] != j_ptr->art_flags[i]) return (0);
 
        /* Hack -- Never stack "powerful" items */
        if (o_ptr->xtra1 || j_ptr->xtra1) return (0);
@@ -1281,9 +1281,9 @@ static int store_check_num(object_type *o_ptr)
 
 static bool is_blessed(object_type *o_ptr)
 {
-       u32b f1, f2, f3;
-       object_flags(o_ptr, &f1, &f2, &f3);
-       if (f3 & TR3_BLESSED) return (TRUE);
+       u32b flgs[TR_FLAG_SIZE];
+       object_flags(o_ptr, flgs);
+       if (have_flag(flgs, TR_BLESSED)) return (TRUE);
        else return (FALSE);
 }
 
index ed909c9..c49ad17 100644 (file)
@@ -104,9 +104,7 @@ struct object_kind
 
        s32b cost;                      /* Object "base cost" */
 
-       u32b flags1;            /* Flags, set 1 */
-       u32b flags2;            /* Flags, set 2 */
-       u32b flags3;            /* Flags, set 3 */
+       u32b flags[TR_FLAG_SIZE];       /* Flags */
 
        u32b gen_flags;         /* flags for generate */
 
@@ -169,9 +167,7 @@ struct artifact_type
 
        s32b cost;                      /* Artifact "cost" */
 
-       u32b flags1;            /* Artifact Flags, set 1 */
-       u32b flags2;            /* Artifact Flags, set 2 */
-       u32b flags3;            /* Artifact Flags, set 3 */
+       u32b flags[TR_FLAG_SIZE];       /* Artifact Flags */
 
        u32b gen_flags;         /* flags for generate */
 
@@ -208,9 +204,7 @@ struct ego_item_type
 
        s32b cost;                      /* Ego-item "cost" */
 
-       u32b flags1;            /* Ego-Item Flags, set 1 */
-       u32b flags2;            /* Ego-Item Flags, set 2 */
-       u32b flags3;            /* Ego-Item Flags, set 3 */
+       u32b flags[TR_FLAG_SIZE];       /* Ego-Item Flags */
 
        u32b gen_flags;         /* flags for generate */
 };
@@ -522,9 +516,7 @@ struct object_type
 
        byte feeling;          /* Game generated inscription number (eg, pseudo-id) */
 
-       u32b art_flags1;        /* Flags, set 1  Alas, these were necessary */
-       u32b art_flags2;        /* Flags, set 2  for the random artifacts of*/
-       u32b art_flags3;        /* Flags, set 3  Zangband */
+       u32b art_flags[TR_FLAG_SIZE];        /* Extra Flags for ego and artifacts */
 
        u32b curse_flags;        /* Flags for curse */
 
@@ -1264,7 +1256,21 @@ struct player_type
        bool see_inv;           /* Can see invisible */
        bool regenerate;        /* Regenerate hit pts */
        bool hold_life;         /* Resist life draining */
+
        bool telepathy;         /* Telepathy */
+       bool esp_animal;
+       bool esp_undead;
+       bool esp_demon;
+       bool esp_orc;
+       bool esp_troll;
+       bool esp_giant;
+       bool esp_dragon;
+       bool esp_human;
+       bool esp_evil;
+       bool esp_good;
+       bool esp_nonliving;
+       bool esp_unique;
+
        bool slow_digest;       /* Slower digestion */
        bool bless_blade;       /* Blessed blade */
        bool xtra_might;        /* Extra might bow */
index 81620ae..a1fdd82 100644 (file)
@@ -570,7 +570,7 @@ typedef struct flag_desc flag_desc;
 
 struct flag_desc
 {
-       const u32b flag;
+       const int flag;
        const char *const desc;
 };
 
@@ -586,19 +586,19 @@ struct flag_desc
 static flag_desc stat_flags_desc[] =
 {
 #ifdef JP
-       { TR1_STR,        "ÏÓÎÏ" },
-       { TR1_INT,        "ÃÎǽ" },
-       { TR1_WIS,        "¸­¤µ" },
-       { TR1_DEX,        "´ïÍѤµ" },
-       { TR1_CON,        "Âѵ×ÎÏ" },
-       { TR1_CHR,        "Ì¥ÎÏ" }
+       { TR_STR,        "ÏÓÎÏ" },
+       { TR_INT,        "ÃÎǽ" },
+       { TR_WIS,        "¸­¤µ" },
+       { TR_DEX,        "´ïÍѤµ" },
+       { TR_CON,        "Âѵ×ÎÏ" },
+       { TR_CHR,        "Ì¥ÎÏ" }
 #else
-       { TR1_STR,        "STR" },
-       { TR1_INT,        "INT" },
-       { TR1_WIS,        "WIS" },
-       { TR1_DEX,        "DEX" },
-       { TR1_CON,        "CON" },
-       { TR1_CHR,        "CHR" }
+       { TR_STR,        "STR" },
+       { TR_INT,        "INT" },
+       { TR_WIS,        "WIS" },
+       { TR_DEX,        "DEX" },
+       { TR_CON,        "CON" },
+       { TR_CHR,        "CHR" }
 #endif
 };
 
@@ -610,20 +610,20 @@ static flag_desc stat_flags_desc[] =
 static flag_desc pval_flags1_desc[] =
 {
 #ifdef JP
-       { TR1_MAGIC_MASTERY,    "ËâË¡Æ»¶ñ»ÈÍÑǽÎÏ" },
-       { TR1_STEALTH,    "±£Ì©" },
-       { TR1_SEARCH,     "õº÷" },
-       { TR1_INFRA,      "ÀÖ³°Àþ»ëÎÏ" },
-       { TR1_TUNNEL,     "ºÎ·¡" },
-       { TR1_BLOWS,      "¹¶·â²ó¿ô" },
-       { TR1_SPEED,      "¥¹¥Ô¡¼¥É" }
+       { TR_MAGIC_MASTERY,    "ËâË¡Æ»¶ñ»ÈÍÑǽÎÏ" },
+       { TR_STEALTH,    "±£Ì©" },
+       { TR_SEARCH,     "õº÷" },
+       { TR_INFRA,      "ÀÖ³°Àþ»ëÎÏ" },
+       { TR_TUNNEL,     "ºÎ·¡" },
+       { TR_BLOWS,      "¹¶·â²ó¿ô" },
+       { TR_SPEED,      "¥¹¥Ô¡¼¥É" }
 #else
-       { TR1_STEALTH,    "Stealth" },
-       { TR1_SEARCH,     "Searching" },
-       { TR1_INFRA,      "Infravision" },
-       { TR1_TUNNEL,     "Tunneling" },
-       { TR1_BLOWS,      "Attacks" },
-       { TR1_SPEED,      "Speed" }
+       { TR_STEALTH,    "Stealth" },
+       { TR_SEARCH,     "Searching" },
+       { TR_INFRA,      "Infravision" },
+       { TR_TUNNEL,     "Tunneling" },
+       { TR_BLOWS,      "Attacks" },
+       { TR_SPEED,      "Speed" }
 #endif
 };
 
@@ -634,27 +634,43 @@ static flag_desc pval_flags1_desc[] =
 static flag_desc slay_flags_desc[] =
 {
 #ifdef JP
-       { TR1_SLAY_ANIMAL,        "ưʪ" },
-       { TR1_SLAY_EVIL,          "¼Ù°­" },
-       { TR3_SLAY_HUMAN,         "¿Í´Ö" },
-       { TR1_SLAY_UNDEAD,        "¥¢¥ó¥Ç¥Ã¥É" },
-       { TR1_SLAY_DEMON,         "°­Ëâ" },
-       { TR1_SLAY_ORC,           "¥ª¡¼¥¯" },
-       { TR1_SLAY_TROLL,         "¥È¥í¥ë" },
-       { TR1_SLAY_GIANT,         "µð¿Í" },
-       { TR1_SLAY_DRAGON,        "¥É¥é¥´¥ó" },
-       { TR1_KILL_DRAGON,        "*¥É¥é¥´¥ó*" },
+       { TR_SLAY_ANIMAL,        "ưʪ" },
+       { TR_KILL_ANIMAL,        "*ưʪ*" },
+       { TR_SLAY_EVIL,          "¼Ù°­" },
+       { TR_KILL_EVIL,          "*¼Ù°­*" },
+       { TR_SLAY_HUMAN,         "¿Í´Ö" },
+       { TR_KILL_HUMAN,         "*¿Í´Ö*" },
+       { TR_SLAY_UNDEAD,        "¥¢¥ó¥Ç¥Ã¥É" },
+       { TR_KILL_UNDEAD,        "*¥¢¥ó¥Ç¥Ã¥É*" },
+       { TR_SLAY_DEMON,         "°­Ëâ" },
+       { TR_KILL_DEMON,         "*°­Ëâ*" },
+       { TR_SLAY_ORC,           "¥ª¡¼¥¯" },
+       { TR_KILL_ORC,           "*¥ª¡¼¥¯*" },
+       { TR_SLAY_TROLL,         "¥È¥í¥ë" },
+       { TR_KILL_TROLL,         "*¥È¥í¥ë*" },
+       { TR_SLAY_GIANT,         "µð¿Í" },
+       { TR_KILL_GIANT,         "*µð¿Í*" },
+       { TR_SLAY_DRAGON,        "¥É¥é¥´¥ó" },
+       { TR_KILL_DRAGON,        "*¥É¥é¥´¥ó*" },
 #else
-       { TR1_SLAY_ANIMAL,        "Animal" },
-       { TR1_SLAY_EVIL,          "Evil" },
-       { TR3_SLAY_HUMAN,         "Human" },
-       { TR1_SLAY_UNDEAD,        "Undead" },
-       { TR1_SLAY_DEMON,         "Demon" },
-       { TR1_SLAY_ORC,           "Orc" },
-       { TR1_SLAY_TROLL,         "Troll" },
-       { TR1_SLAY_GIANT,         "Giant" },
-       { TR1_SLAY_DRAGON,        "Dragon" },
-       { TR1_KILL_DRAGON,        "Xdragon" }
+       { TR_SLAY_ANIMAL,        "Animal" },
+       { TR_KILL_ANIMAL,        "XAnimal" },
+       { TR_SLAY_EVIL,          "Evil" },
+       { TR_KILL_EVIL,          "XEvil" },
+       { TR_SLAY_HUMAN,         "Human" },
+       { TR_KILL_HUMAN,         "XHuman" },
+       { TR_SLAY_UNDEAD,        "Undead" },
+       { TR_KILL_UNDEAD,        "XUndead" },
+       { TR_SLAY_DEMON,         "Demon" },
+       { TR_KILL_DEMON,         "XDemon" },
+       { TR_SLAY_ORC,           "Orc" },
+       { TR_KILL_ORC,           "XOrc" },
+       { TR_SLAY_TROLL,         "Troll" },
+       { TR_KILL_TROLL,         "XTroll" },
+       { TR_SLAY_GIANT,         "Giant" },
+       { TR_KILL_GIANT,         "Xgiant" },
+       { TR_SLAY_DRAGON,        "Dragon" },
+       { TR_KILL_DRAGON,        "Xdragon" }
 #endif
 };
 
@@ -669,29 +685,29 @@ static flag_desc slay_flags_desc[] =
 static flag_desc brand_flags_desc[] =
 {
 #ifdef JP
-       { TR1_BRAND_ACID,         "Íϲò" },
-       { TR1_BRAND_ELEC,         "ÅÅ·â" },
-       { TR1_BRAND_FIRE,         "¾Æ´þ" },
-       { TR1_BRAND_COLD,         "Åà·ë" },
-       { TR1_BRAND_POIS,         "ÆÇ»¦" },
-
-       { TR1_FORCE_WEAPON,       "ÍýÎÏ" },
-       { TR1_CHAOTIC,            "º®ÆÙ" },
-       { TR1_VAMPIRIC,           "µÛ·ì" },
-       { TR1_IMPACT,             "ÃÏ¿Ì" },
-       { TR1_VORPAL,             "ÀÚ¤ìÌ£" },
+       { TR_BRAND_ACID,         "Íϲò" },
+       { TR_BRAND_ELEC,         "ÅÅ·â" },
+       { TR_BRAND_FIRE,         "¾Æ´þ" },
+       { TR_BRAND_COLD,         "Åà·ë" },
+       { TR_BRAND_POIS,         "ÆÇ»¦" },
+
+       { TR_FORCE_WEAPON,       "ÍýÎÏ" },
+       { TR_CHAOTIC,            "º®ÆÙ" },
+       { TR_VAMPIRIC,           "µÛ·ì" },
+       { TR_IMPACT,             "ÃÏ¿Ì" },
+       { TR_VORPAL,             "ÀÚ¤ìÌ£" },
 #else
-       { TR1_BRAND_ACID,         "Acid Brand" },
-       { TR1_BRAND_ELEC,         "Lightning Brand" },
-       { TR1_BRAND_FIRE,         "Flame Tongue" },
-       { TR1_BRAND_COLD,         "Frost Brand" },
-       { TR1_BRAND_POIS,         "Poisoned" },
-
-       { TR1_FORCE_WEAPON,       "Force" },
-       { TR1_CHAOTIC,            "Mark of Chaos" },
-       { TR1_VAMPIRIC,           "Vampiric" },
-       { TR1_IMPACT,             "Earthquake impact on hit" },
-       { TR1_VORPAL,             "Very sharp" },
+       { TR_BRAND_ACID,         "Acid Brand" },
+       { TR_BRAND_ELEC,         "Lightning Brand" },
+       { TR_BRAND_FIRE,         "Flame Tongue" },
+       { TR_BRAND_COLD,         "Frost Brand" },
+       { TR_BRAND_POIS,         "Poisoned" },
+
+       { TR_FORCE_WEAPON,       "Force" },
+       { TR_CHAOTIC,            "Mark of Chaos" },
+       { TR_VAMPIRIC,           "Vampiric" },
+       { TR_IMPACT,             "Earthquake impact on hit" },
+       { TR_VORPAL,             "Very sharp" },
 #endif
 };
 
@@ -702,39 +718,39 @@ static flag_desc brand_flags_desc[] =
 static const flag_desc resist_flags_desc[] =
 {
 #ifdef JP
-       { TR2_RES_ACID,   "»À" },
-       { TR2_RES_ELEC,   "ÅÅ·â" },
-       { TR2_RES_FIRE,   "²Ð±ê" },
-       { TR2_RES_COLD,   "Î䵤" },
-       { TR2_RES_POIS,   "ÆÇ" },
-       { TR2_RES_FEAR,   "¶²ÉÝ"},
-       { TR2_RES_LITE,   "Á®¸÷" },
-       { TR2_RES_DARK,   "°Å¹õ" },
-       { TR2_RES_BLIND,  "ÌÕÌÜ" },
-       { TR2_RES_CONF,   "º®Íð" },
-       { TR2_RES_SOUND,  "¹ì²»" },
-       { TR2_RES_SHARDS, "ÇËÊÒ" },
-       { TR2_RES_NETHER, "ÃϹö" },
-       { TR2_RES_NEXUS,  "°ø²Ìº®Íð" },
-       { TR2_RES_CHAOS,  "¥«¥ª¥¹" },
-       { TR2_RES_DISEN,  "Îô²½" },
+       { TR_RES_ACID,   "»À" },
+       { TR_RES_ELEC,   "ÅÅ·â" },
+       { TR_RES_FIRE,   "²Ð±ê" },
+       { TR_RES_COLD,   "Î䵤" },
+       { TR_RES_POIS,   "ÆÇ" },
+       { TR_RES_FEAR,   "¶²ÉÝ"},
+       { TR_RES_LITE,   "Á®¸÷" },
+       { TR_RES_DARK,   "°Å¹õ" },
+       { TR_RES_BLIND,  "ÌÕÌÜ" },
+       { TR_RES_CONF,   "º®Íð" },
+       { TR_RES_SOUND,  "¹ì²»" },
+       { TR_RES_SHARDS, "ÇËÊÒ" },
+       { TR_RES_NETHER, "ÃϹö" },
+       { TR_RES_NEXUS,  "°ø²Ìº®Íð" },
+       { TR_RES_CHAOS,  "¥«¥ª¥¹" },
+       { TR_RES_DISEN,  "Îô²½" },
 #else
-       { TR2_RES_ACID,   "Acid" },
-       { TR2_RES_ELEC,   "Lightning" },
-       { TR2_RES_FIRE,   "Fire" },
-       { TR2_RES_COLD,   "Cold" },
-       { TR2_RES_POIS,   "Poison" },
-       { TR2_RES_FEAR,   "Fear"},
-       { TR2_RES_LITE,   "Light" },
-       { TR2_RES_DARK,   "Dark" },
-       { TR2_RES_BLIND,  "Blindness" },
-       { TR2_RES_CONF,   "Confusion" },
-       { TR2_RES_SOUND,  "Sound" },
-       { TR2_RES_SHARDS, "Shards" },
-       { TR2_RES_NETHER, "Nether" },
-       { TR2_RES_NEXUS,  "Nexus" },
-       { TR2_RES_CHAOS,  "Chaos" },
-       { TR2_RES_DISEN,  "Disenchantment" },
+       { TR_RES_ACID,   "Acid" },
+       { TR_RES_ELEC,   "Lightning" },
+       { TR_RES_FIRE,   "Fire" },
+       { TR_RES_COLD,   "Cold" },
+       { TR_RES_POIS,   "Poison" },
+       { TR_RES_FEAR,   "Fear"},
+       { TR_RES_LITE,   "Light" },
+       { TR_RES_DARK,   "Dark" },
+       { TR_RES_BLIND,  "Blindness" },
+       { TR_RES_CONF,   "Confusion" },
+       { TR_RES_SOUND,  "Sound" },
+       { TR_RES_SHARDS, "Shards" },
+       { TR_RES_NETHER, "Nether" },
+       { TR_RES_NEXUS,  "Nexus" },
+       { TR_RES_CHAOS,  "Chaos" },
+       { TR_RES_DISEN,  "Disenchantment" },
 #endif
 };
 
@@ -745,15 +761,15 @@ static const flag_desc resist_flags_desc[] =
 static const flag_desc immune_flags_desc[] =
 {
 #ifdef JP
-       { TR2_IM_ACID,    "»À" },
-       { TR2_IM_ELEC,    "ÅÅ·â" },
-       { TR2_IM_FIRE,    "²Ð±ê" },
-       { TR2_IM_COLD,    "Î䵤" },
+       { TR_IM_ACID,    "»À" },
+       { TR_IM_ELEC,    "ÅÅ·â" },
+       { TR_IM_FIRE,    "²Ð±ê" },
+       { TR_IM_COLD,    "Î䵤" },
 #else
-       { TR2_IM_ACID,    "Acid" },
-       { TR2_IM_ELEC,    "Lightning" },
-       { TR2_IM_FIRE,    "Fire" },
-       { TR2_IM_COLD,    "Cold" },
+       { TR_IM_ACID,    "Acid" },
+       { TR_IM_ELEC,    "Lightning" },
+       { TR_IM_FIRE,    "Fire" },
+       { TR_IM_COLD,    "Cold" },
 #endif
 };
 
@@ -764,19 +780,19 @@ static const flag_desc immune_flags_desc[] =
 static const flag_desc sustain_flags_desc[] =
 {
 #ifdef JP
-       { TR2_SUST_STR,   "ÏÓÎÏ" },
-       { TR2_SUST_INT,   "ÃÎǽ" },
-       { TR2_SUST_WIS,   "¸­¤µ" },
-       { TR2_SUST_DEX,   "´ïÍѤµ" },
-       { TR2_SUST_CON,   "Âѵ×ÎÏ" },
-       { TR2_SUST_CHR,   "Ì¥ÎÏ" },
+       { TR_SUST_STR,   "ÏÓÎÏ" },
+       { TR_SUST_INT,   "ÃÎǽ" },
+       { TR_SUST_WIS,   "¸­¤µ" },
+       { TR_SUST_DEX,   "´ïÍѤµ" },
+       { TR_SUST_CON,   "Âѵ×ÎÏ" },
+       { TR_SUST_CHR,   "Ì¥ÎÏ" },
 #else
-       { TR2_SUST_STR,   "STR" },
-       { TR2_SUST_INT,   "INT" },
-       { TR2_SUST_WIS,   "WIS" },
-       { TR2_SUST_DEX,   "DEX" },
-       { TR2_SUST_CON,   "CON" },
-       { TR2_SUST_CHR,   "CHR" },
+       { TR_SUST_STR,   "STR" },
+       { TR_SUST_INT,   "INT" },
+       { TR_SUST_WIS,   "WIS" },
+       { TR_SUST_DEX,   "DEX" },
+       { TR_SUST_CON,   "CON" },
+       { TR_SUST_CHR,   "CHR" },
 #endif
 };
 
@@ -787,15 +803,15 @@ static const flag_desc sustain_flags_desc[] =
 static const flag_desc misc_flags2_desc[] =
 {
 #ifdef JP
-       { TR2_THROW,      "ÅêÚ³" },
-       { TR2_REFLECT,    "È¿¼Í" },
-       { TR2_FREE_ACT,   "ËãáãÃΤ餺" },
-       { TR2_HOLD_LIFE,  "À¸Ì¿ÎÏ°Ý»ý" },
+       { TR_THROW,      "ÅêÚ³" },
+       { TR_REFLECT,    "È¿¼Í" },
+       { TR_FREE_ACT,   "ËãáãÃΤ餺" },
+       { TR_HOLD_LIFE,  "À¸Ì¿ÎÏ°Ý»ý" },
 #else
-       { TR2_THROW,      "Throwing" },
-       { TR2_REFLECT,    "Reflection" },
-       { TR2_FREE_ACT,   "Free Action" },
-       { TR2_HOLD_LIFE,  "Hold Life" },
+       { TR_THROW,      "Throwing" },
+       { TR_REFLECT,    "Reflection" },
+       { TR_FREE_ACT,   "Free Action" },
+       { TR_HOLD_LIFE,  "Hold Life" },
 #endif
 };
 
@@ -809,41 +825,53 @@ static const flag_desc misc_flags2_desc[] =
 static const flag_desc misc_flags3_desc[] =
 {
 #ifdef JP
-       { TR3_SH_FIRE,            "²Ð±ê¥ª¡¼¥é" },
-       { TR3_SH_ELEC,            "Åŷ⥪¡¼¥é" },
-       { TR3_SH_COLD,            "Î䵤¥ª¡¼¥é" },
-       { TR3_NO_TELE,            "È¿¥Æ¥ì¥Ý¡¼¥È" },
-       { TR3_NO_MAGIC,           "È¿ËâË¡" },
-       { TR3_FEATHER,            "ÉâÍ·" },
-       { TR3_SEE_INVIS,          "²Ä»ëÆ©ÌÀ" },
-       { TR3_TELEPATHY,          "¥Æ¥ì¥Ñ¥·¡¼" },
-       { TR3_SLOW_DIGEST,        "Ãپò½" },
-       { TR3_REGEN,              "µÞ®²óÉü" },
-       { TR3_WARNING,            "·Ù¹ð" },
-/*     { TR3_XTRA_MIGHT,         "¶¯Îϼͷâ" }, */
-       { TR3_XTRA_SHOTS,         "Äɲüͷâ" },        /* always +1? */
-       { TR3_DRAIN_EXP,          "·Ð¸³Ã͵ۼý" },
-       { TR3_AGGRAVATE,          "È¿´¶" },
-       { TR3_BLESSED,            "½ËÊ¡" },
-       { TR3_DEC_MANA,           "¾ÃÈñËâÎϸº¾¯" },
+       { TR_SH_FIRE,            "²Ð±ê¥ª¡¼¥é" },
+       { TR_SH_ELEC,            "Åŷ⥪¡¼¥é" },
+       { TR_SH_COLD,            "Î䵤¥ª¡¼¥é" },
+       { TR_NO_TELE,            "È¿¥Æ¥ì¥Ý¡¼¥È" },
+       { TR_NO_MAGIC,           "È¿ËâË¡" },
+       { TR_FEATHER,            "ÉâÍ·" },
+       { TR_SEE_INVIS,          "²Ä»ëÆ©ÌÀ" },
+       { TR_TELEPATHY,          "¥Æ¥ì¥Ñ¥·¡¼" },
+       { TR_ESP_ANIMAL,             "ưʪ´¶ÃÎ" },
+       { TR_ESP_UNDEAD,             "ÉԻശÃÎ" },
+       { TR_ESP_DEMON,              "°­Ëâ´¶ÃÎ" },
+       { TR_ESP_ORC,                "¥ª¡¼¥¯´¶ÃÎ" },
+       { TR_ESP_TROLL,              "¥È¥í¥ë´¶ÃÎ" },
+       { TR_ESP_GIANT,              "µð¿Í´¶ÃÎ" },
+       { TR_ESP_DRAGON,             "¥É¥é¥´¥ó´¶ÃÎ" },
+       { TR_ESP_HUMAN,              "¿Í´Ö´¶ÃÎ" },
+       { TR_ESP_EVIL,               "¼Ù°­´¶ÃÎ" },
+       { TR_ESP_GOOD,               "Á±ÎÉ´¶ÃÎ" },
+       { TR_ESP_NONLIVING,          "̵À¸Êª´¶ÃÎ" },
+       { TR_ESP_UNIQUE,             "¥æ¥Ë¡¼¥¯´¶ÃÎ" },
+       { TR_SLOW_DIGEST,        "Ãپò½" },
+       { TR_REGEN,              "µÞ®²óÉü" },
+       { TR_WARNING,            "·Ù¹ð" },
+/*     { TR_XTRA_MIGHT,         "¶¯Îϼͷâ" }, */
+       { TR_XTRA_SHOTS,         "Äɲüͷâ" },        /* always +1? */
+       { TR_DRAIN_EXP,          "·Ð¸³Ã͵ۼý" },
+       { TR_AGGRAVATE,          "È¿´¶" },
+       { TR_BLESSED,            "½ËÊ¡" },
+       { TR_DEC_MANA,           "¾ÃÈñËâÎϸº¾¯" },
 #else
-       { TR3_SH_FIRE,            "Fiery Aura" },
-       { TR3_SH_ELEC,            "Electric Aura" },
-       { TR3_SH_COLD,            "Coldly Aura" },
-       { TR3_NO_TELE,            "Prevent Teleportation" },
-       { TR3_NO_MAGIC,           "Anti-Magic" },
-       { TR3_FEATHER,            "Levitation" },
-       { TR3_SEE_INVIS,          "See Invisible" },
-       { TR3_TELEPATHY,          "ESP" },
-       { TR3_SLOW_DIGEST,        "Slow Digestion" },
-       { TR3_REGEN,              "Regeneration" },
-       { TR3_WARNING,            "Warning" },
-/*     { TR3_XTRA_MIGHT,         "Extra Might" }, */
-       { TR3_XTRA_SHOTS,         "+1 Extra Shot" },        /* always +1? */
-       { TR3_DRAIN_EXP,          "Drains Experience" },
-       { TR3_AGGRAVATE,          "Aggravates" },
-       { TR3_BLESSED,            "Blessed Blade" },
-       { TR3_DEC_MANA,           "Decrease Shouhi Mana" },
+       { TR_SH_FIRE,            "Fiery Aura" },
+       { TR_SH_ELEC,            "Electric Aura" },
+       { TR_SH_COLD,            "Coldly Aura" },
+       { TR_NO_TELE,            "Prevent Teleportation" },
+       { TR_NO_MAGIC,           "Anti-Magic" },
+       { TR_FEATHER,            "Levitation" },
+       { TR_SEE_INVIS,          "See Invisible" },
+       { TR_TELEPATHY,          "ESP" },
+       { TR_SLOW_DIGEST,        "Slow Digestion" },
+       { TR_REGEN,              "Regeneration" },
+       { TR_WARNING,            "Warning" },
+/*     { TR_XTRA_MIGHT,         "Extra Might" }, */
+       { TR_XTRA_SHOTS,         "+1 Extra Shot" },        /* always +1? */
+       { TR_DRAIN_EXP,          "Drains Experience" },
+       { TR_AGGRAVATE,          "Aggravates" },
+       { TR_BLESSED,            "Blessed Blade" },
+       { TR_DEC_MANA,           "Decrease Shouhi Mana" },
 #endif
 };
 
@@ -964,14 +992,15 @@ static void spoiler_underline(cptr str)
  *
  * The possibly updated description pointer is returned.
  */
-static cptr *spoiler_flag_aux(const u32b art_flags, const flag_desc *flag_ptr,
+static cptr *spoiler_flag_aux(const u32b art_flags[TR_FLAG_SIZE],
+                             const flag_desc *flag_ptr,
                              cptr *desc_ptr, const int n_elmnts)
 {
        int i;
 
        for (i = 0; i < n_elmnts; ++i)
        {
-               if (art_flags & flag_ptr[i].flag)
+               if (have_flag(art_flags, flag_ptr[i].flag))
                {
                        *desc_ptr++ = flag_ptr[i].desc;
                }
@@ -997,10 +1026,7 @@ static void analyze_general (object_type *o_ptr, char *desc_ptr)
  */
 static void analyze_pval (object_type *o_ptr, pval_info_type *p_ptr)
 {
-       const u32b all_stats = (TR1_STR | TR1_INT | TR1_WIS |
-                               TR1_DEX | TR1_CON | TR1_CHR);
-
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        cptr *affects_list;
 
@@ -1013,7 +1039,7 @@ static void analyze_pval (object_type *o_ptr, pval_info_type *p_ptr)
        }
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        affects_list = p_ptr->pval_affects;
 
@@ -1021,7 +1047,9 @@ static void analyze_pval (object_type *o_ptr, pval_info_type *p_ptr)
        sprintf(p_ptr->pval_desc, "%s%d", POSITIZE(o_ptr->pval), o_ptr->pval);
 
        /* First, check to see if the pval affects all stats */
-       if ((f1 & all_stats) == all_stats)
+       if (have_flag(flgs, TR_STR) && have_flag(flgs, TR_INT) &&
+           have_flag(flgs, TR_WIS) && have_flag(flgs, TR_DEX) &&
+           have_flag(flgs, TR_CON) && have_flag(flgs, TR_CHR))
        {
 #ifdef JP
                *affects_list++ = "Á´Ç½ÎÏ";
@@ -1031,15 +1059,17 @@ static void analyze_pval (object_type *o_ptr, pval_info_type *p_ptr)
        }
 
        /* Are any stats affected? */
-       else if (f1 & all_stats)
+       else if (have_flag(flgs, TR_STR) || have_flag(flgs, TR_INT) ||
+                have_flag(flgs, TR_WIS) || have_flag(flgs, TR_DEX) ||
+                have_flag(flgs, TR_CON) || have_flag(flgs, TR_CHR))
        {
-               affects_list = spoiler_flag_aux(f1, stat_flags_desc,
+               affects_list = spoiler_flag_aux(flgs, stat_flags_desc,
                                                affects_list,
                                                N_ELEMENTS(stat_flags_desc));
        }
 
        /* And now the "rest" */
-       affects_list = spoiler_flag_aux(f1, pval_flags1_desc,
+       affects_list = spoiler_flag_aux(flgs, pval_flags1_desc,
                                        affects_list,
                                        N_ELEMENTS(pval_flags1_desc));
 
@@ -1051,11 +1081,11 @@ static void analyze_pval (object_type *o_ptr, pval_info_type *p_ptr)
 /* Note the slaying specialties of a weapon */
 static void analyze_slay (object_type *o_ptr, cptr *slay_list)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
-       slay_list = spoiler_flag_aux(f1, slay_flags_desc, slay_list,
+       slay_list = spoiler_flag_aux(flgs, slay_flags_desc, slay_list,
                                     N_ELEMENTS(slay_flags_desc));
 
        /* Terminate the description list */
@@ -1065,11 +1095,11 @@ static void analyze_slay (object_type *o_ptr, cptr *slay_list)
 /* Note an object's elemental brands */
 static void analyze_brand (object_type *o_ptr, cptr *brand_list)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
-       brand_list = spoiler_flag_aux(f1, brand_flags_desc, brand_list,
+       brand_list = spoiler_flag_aux(flgs, brand_flags_desc, brand_list,
                                      N_ELEMENTS(brand_flags_desc));
 
        /* Terminate the description list */
@@ -1080,11 +1110,11 @@ static void analyze_brand (object_type *o_ptr, cptr *brand_list)
 /* Note the resistances granted by an object */
 static void analyze_resist (object_type *o_ptr, cptr *resist_list)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
-       resist_list = spoiler_flag_aux(f2, resist_flags_desc,
+       resist_list = spoiler_flag_aux(flgs, resist_flags_desc,
                                       resist_list, N_ELEMENTS(resist_flags_desc));
 
        /* Terminate the description list */
@@ -1095,11 +1125,11 @@ static void analyze_resist (object_type *o_ptr, cptr *resist_list)
 /* Note the immunities granted by an object */
 static void analyze_immune (object_type *o_ptr, cptr *immune_list)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
-       immune_list = spoiler_flag_aux(f2, immune_flags_desc,
+       immune_list = spoiler_flag_aux(flgs, immune_flags_desc,
                                       immune_list, N_ELEMENTS(immune_flags_desc));
 
        /* Terminate the description list */
@@ -1110,15 +1140,14 @@ static void analyze_immune (object_type *o_ptr, cptr *immune_list)
 
 static void analyze_sustains (object_type *o_ptr, cptr *sustain_list)
 {
-       const u32b all_sustains = (TR2_SUST_STR | TR2_SUST_INT | TR2_SUST_WIS |
-                                  TR2_SUST_DEX | TR2_SUST_CON | TR2_SUST_CHR);
-
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Simplify things if an item sustains all stats */
-       if ((f2 & all_sustains) == all_sustains)
+       if (have_flag(flgs, TR_SUST_STR) && have_flag(flgs, TR_SUST_INT) &&
+           have_flag(flgs, TR_SUST_WIS) && have_flag(flgs, TR_SUST_DEX) &&
+           have_flag(flgs, TR_SUST_CON) && have_flag(flgs, TR_SUST_CHR))
        {
 #ifdef JP
                *sustain_list++ = "Á´Ç½ÎÏ";
@@ -1128,9 +1157,11 @@ static void analyze_sustains (object_type *o_ptr, cptr *sustain_list)
        }
 
        /* Should we bother? */
-       else if ((f2 & all_sustains))
+       else if (have_flag(flgs, TR_SUST_STR) || have_flag(flgs, TR_SUST_INT) ||
+                have_flag(flgs, TR_SUST_WIS) || have_flag(flgs, TR_SUST_DEX) ||
+                have_flag(flgs, TR_SUST_CON) || have_flag(flgs, TR_SUST_CHR))
        {
-               sustain_list = spoiler_flag_aux(f2, sustain_flags_desc,
+               sustain_list = spoiler_flag_aux(flgs, sustain_flags_desc,
                                                sustain_list,
                                                N_ELEMENTS(sustain_flags_desc));
        }
@@ -1146,14 +1177,14 @@ static void analyze_sustains (object_type *o_ptr, cptr *sustain_list)
  */
 static void analyze_misc_magic (object_type *o_ptr, cptr *misc_list)
 {
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
-       misc_list = spoiler_flag_aux(f2, misc_flags2_desc, misc_list,
+       misc_list = spoiler_flag_aux(flgs, misc_flags2_desc, misc_list,
                                     N_ELEMENTS(misc_flags2_desc));
 
-       misc_list = spoiler_flag_aux(f3, misc_flags3_desc, misc_list,
+       misc_list = spoiler_flag_aux(flgs, misc_flags3_desc, misc_list,
                                     N_ELEMENTS(misc_flags3_desc));
 
        /*
@@ -1171,7 +1202,7 @@ static void analyze_misc_magic (object_type *o_ptr, cptr *misc_list)
        /*
         * Glowing artifacts -- small radius light.
         */
-       if (f3 & (TR3_LITE))
+       if (have_flag(flgs, TR_LITE))
        {
 #ifdef JP
                *misc_list++ = "±Êµ×¸÷¸»(Ⱦ·Â1)";
@@ -1189,7 +1220,7 @@ static void analyze_misc_magic (object_type *o_ptr, cptr *misc_list)
 /*     if (cursed_p(o_ptr)) */
        if (1)
        {
-               if (f3 & TR3_TY_CURSE)
+               if (have_flag(flgs, TR_TY_CURSE))
                {
 #ifdef JP
                        *misc_list++ = "ÂÀ¸Å¤Î±åÇ°";
index 6414ddb..3d04d29 100644 (file)
@@ -533,11 +533,11 @@ static void do_cmd_wiz_change(void)
 static void wiz_display_item(object_type *o_ptr)
 {
        int i, j = 13;
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        char buf[256];
 
        /* Extract the flags */
-       object_flags(o_ptr, &f1, &f2, &f3);
+       object_flags(o_ptr, flgs);
 
        /* Clear the screen */
        for (i = 1; i <= 23; i++) prt("", i, j - 2);
@@ -575,7 +575,7 @@ static void wiz_display_item(object_type *o_ptr)
        prt("siwdccsossidsahanvudotgddhuoclio", 13, j);
        prt("tnieohtctrnipttmiinmrrnrrraiierl", 14, j);
        prt("rtsxnarelcfgdkcpmldncltggpksdced", 15, j);
-       prt_binary(f1, 16, j);
+       prt_binary(flgs[0], 16, j);
 
        prt("+------------FLAGS2------------+", 17, j);
        prt("SUST....IMMUN.RESIST............", 18, j);
@@ -583,7 +583,7 @@ static void wiz_display_item(object_type *o_ptr)
        prt("siwdcci clioheatcliooeialoshtncd", 20, j);
        prt("tnieohd ierlrfraierliatrnnnrhehi", 21, j);
        prt("rtsxnae.dcedwlatdcedsrekdfddrxss", 22, j);
-       prt_binary(f2, 23, j);
+       prt_binary(flgs[1], 23, j);
 
        prt("+------------FLAGS3------------+", 10, j+32);
        prt("fe cnn t      stdrmsiiii d ab   ", 11, j+32);
@@ -591,7 +591,15 @@ static void wiz_display_item(object_type *o_ptr)
        prt("uu utmacaih eielgggonnnnaaere   ", 13, j+32);
        prt("rr reanurdo vtieeehtrrrrcilas   ", 14, j+32);
        prt("aa algarnew ienpsntsaefctnevs   ", 15, j+32);
-       prt_binary(f3, 16, j+32);
+       prt_binary(flgs[2], 16, j+32);
+
+       prt("+------------FLAGS4------------+", 17, j+32);
+       prt("KILL....ESP.........            ", 18, j+32);
+       prt("aeud tghaud tgdhegnu            ", 19, j+32);
+       prt("nvneoriunneoriruvoon            ", 20, j+32);
+       prt("iidmroamidmroagmionq            ", 21, j+32);
+       prt("mlenclnmmenclnnnldlu            ", 22, j+32);
+       prt_binary(flgs[3], 23, j+32);
 }
 
 
index c366121..4685f56 100644 (file)
@@ -2462,7 +2462,7 @@ static void calc_mana(void)
        /* Only mages are affected */
        if (mp_ptr->spell_xtra & MAGIC_GLOVE_REDUCE_MANA)
        {
-               u32b f1, f2, f3;
+               u32b flgs[TR_FLAG_SIZE];
 
                /* Assume player is not encumbered by gloves */
                p_ptr->cumber_glove = FALSE;
@@ -2471,13 +2471,13 @@ static void calc_mana(void)
                o_ptr = &inventory[INVEN_HANDS];
 
                /* Examine the gloves */
-               object_flags(o_ptr, &f1, &f2, &f3);
+               object_flags(o_ptr, flgs);
 
                /* Normal gloves hurt mage-type spells */
                if (o_ptr->k_idx &&
-                   !(f2 & (TR2_FREE_ACT)) &&
-                   !(f1 & (TR1_MAGIC_MASTERY)) &&
-                   !((f1 & (TR1_DEX)) && (o_ptr->pval > 0)))
+                   !(have_flag(flgs, TR_FREE_ACT)) &&
+                   !(have_flag(flgs, TR_MAGIC_MASTERY)) &&
+                   !(have_flag(flgs, TR_DEX)) && (o_ptr->pval > 0))
                {
                        /* Encumbered */
                        p_ptr->cumber_glove = TRUE;
@@ -2823,7 +2823,7 @@ static void calc_torch(void)
 {
        int i;
        object_type *o_ptr;
-       u32b f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
 
        /* Assume no light */
        p_ptr->cur_lite = 0;
@@ -2885,10 +2885,10 @@ static void calc_torch(void)
                        if (!o_ptr->k_idx) continue;
 
                        /* Extract the flags */
-                       object_flags(o_ptr, &f1, &f2, &f3);
+                       object_flags(o_ptr, flgs);
 
                        /* does this item glow? */
-                       if (f3 & TR3_LITE)
+                       if (have_flag(flgs, TR_LITE))
                        {
                                if ((o_ptr->name2 == EGO_DARK) || (o_ptr->name1 == ART_NIGHT)) p_ptr->cur_lite--;
                                else p_ptr->cur_lite++;
@@ -2981,14 +2981,26 @@ void calc_bonuses(void)
 {
        int             i, j, hold, neutral[2];
        int             old_speed;
-       int             old_telepathy;
+       bool old_telepathy;
+       bool old_esp_animal;
+       bool old_esp_undead;
+       bool old_esp_demon;
+       bool old_esp_orc;
+       bool old_esp_troll;
+       bool old_esp_giant;
+       bool old_esp_dragon;
+       bool old_esp_human;
+       bool old_esp_evil;
+       bool old_esp_good;
+       bool old_esp_nonliving;
+       bool old_esp_unique;
        int             old_see_inv;
        int             old_dis_ac;
        int             old_dis_to_a;
        int             extra_blows[2];
        int             extra_shots;
        object_type     *o_ptr;
-       u32b            f1, f2, f3;
+       u32b flgs[TR_FLAG_SIZE];
        bool            omoi = FALSE;
        bool            yoiyami = FALSE;
        bool            down_saving = FALSE;
@@ -3003,6 +3015,19 @@ void calc_bonuses(void)
 
        /* Save the old vision stuff */
        old_telepathy = p_ptr->telepathy;
+       old_esp_animal = p_ptr->esp_animal;
+       old_esp_undead = p_ptr->esp_undead;
+       old_esp_demon = p_ptr->esp_demon;
+       old_esp_orc = p_ptr->esp_orc;
+       old_esp_troll = p_ptr->esp_troll;
+       old_esp_giant = p_ptr->esp_giant;
+       old_esp_dragon = p_ptr->esp_dragon;
+       old_esp_human = p_ptr->esp_human;
+       old_esp_evil = p_ptr->esp_evil;
+       old_esp_good = p_ptr->esp_good;
+       old_esp_nonliving = p_ptr->esp_nonliving;
+       old_esp_unique = p_ptr->esp_unique;
+
        old_see_inv = p_ptr->see_inv;
 
        /* Save the old armor class */
@@ -3067,6 +3092,18 @@ void calc_bonuses(void)
        p_ptr->ffall = FALSE;
        p_ptr->hold_life = FALSE;
        p_ptr->telepathy = FALSE;
+       p_ptr->esp_animal = FALSE;
+       p_ptr->esp_undead = FALSE;
+       p_ptr->esp_demon = FALSE;
+       p_ptr->esp_orc = FALSE;
+       p_ptr->esp_troll = FALSE;
+       p_ptr->esp_giant = FALSE;
+       p_ptr->esp_dragon = FALSE;
+       p_ptr->esp_human = FALSE;
+       p_ptr->esp_evil = FALSE;
+       p_ptr->esp_good = FALSE;
+       p_ptr->esp_nonliving = FALSE;
+       p_ptr->esp_unique = FALSE;
        p_ptr->lite = FALSE;
        p_ptr->sustain_str = FALSE;
        p_ptr->sustain_int = FALSE;
@@ -3812,41 +3849,41 @@ void calc_bonuses(void)
                if (!o_ptr->k_idx) continue;
 
                /* Extract the item flags */
-               object_flags(o_ptr, &f1, &f2, &f3);
+               object_flags(o_ptr, flgs);
 
                p_ptr->cursed |= (o_ptr->curse_flags & (0xFFFFFFF0L));
                if (o_ptr->name1 == ART_CHAINSWORD) p_ptr->cursed |= TRC_CHAINSWORD;
 
                /* Affect stats */
-               if (f1 & (TR1_STR)) p_ptr->stat_add[A_STR] += o_ptr->pval;
-               if (f1 & (TR1_INT)) p_ptr->stat_add[A_INT] += o_ptr->pval;
-               if (f1 & (TR1_WIS)) p_ptr->stat_add[A_WIS] += o_ptr->pval;
-               if (f1 & (TR1_DEX)) p_ptr->stat_add[A_DEX] += o_ptr->pval;
-               if (f1 & (TR1_CON)) p_ptr->stat_add[A_CON] += o_ptr->pval;
-               if (f1 & (TR1_CHR)) p_ptr->stat_add[A_CHR] += o_ptr->pval;
+               if (have_flag(flgs, TR_STR)) p_ptr->stat_add[A_STR] += o_ptr->pval;
+               if (have_flag(flgs, TR_INT)) p_ptr->stat_add[A_INT] += o_ptr->pval;
+               if (have_flag(flgs, TR_WIS)) p_ptr->stat_add[A_WIS] += o_ptr->pval;
+               if (have_flag(flgs, TR_DEX)) p_ptr->stat_add[A_DEX] += o_ptr->pval;
+               if (have_flag(flgs, TR_CON)) p_ptr->stat_add[A_CON] += o_ptr->pval;
+               if (have_flag(flgs, TR_CHR)) p_ptr->stat_add[A_CHR] += o_ptr->pval;
 
-               if (f1 & (TR1_MAGIC_MASTERY))    p_ptr->skill_dev += 8*o_ptr->pval;
+               if (have_flag(flgs, TR_MAGIC_MASTERY))    p_ptr->skill_dev += 8*o_ptr->pval;
 
                /* Affect stealth */
-               if (f1 & (TR1_STEALTH)) p_ptr->skill_stl += o_ptr->pval;
+               if (have_flag(flgs, TR_STEALTH)) p_ptr->skill_stl += o_ptr->pval;
 
                /* Affect searching ability (factor of five) */
-               if (f1 & (TR1_SEARCH)) p_ptr->skill_srh += (o_ptr->pval * 5);
+               if (have_flag(flgs, TR_SEARCH)) p_ptr->skill_srh += (o_ptr->pval * 5);
 
                /* Affect searching frequency (factor of five) */
-               if (f1 & (TR1_SEARCH)) p_ptr->skill_fos += (o_ptr->pval * 5);
+               if (have_flag(flgs, TR_SEARCH)) p_ptr->skill_fos += (o_ptr->pval * 5);
 
                /* Affect infravision */
-               if (f1 & (TR1_INFRA)) p_ptr->see_infra += o_ptr->pval;
+               if (have_flag(flgs, TR_INFRA)) p_ptr->see_infra += o_ptr->pval;
 
                /* Affect digging (factor of 20) */
-               if (f1 & (TR1_TUNNEL)) p_ptr->skill_dig += (o_ptr->pval * 20);
+               if (have_flag(flgs, TR_TUNNEL)) p_ptr->skill_dig += (o_ptr->pval * 20);
 
                /* Affect speed */
-               if (f1 & (TR1_SPEED)) p_ptr->pspeed += o_ptr->pval;
+               if (have_flag(flgs, TR_SPEED)) p_ptr->pspeed += o_ptr->pval;
 
                /* Affect blows */
-               if (f1 & (TR1_BLOWS))
+               if (have_flag(flgs, TR_BLOWS))
                {
                        if((i == INVEN_RARM || i == INVEN_RIGHT) && !p_ptr->ryoute) extra_blows[0] += o_ptr->pval;
                        else if((i == INVEN_LARM || i == INVEN_LEFT) && !p_ptr->ryoute) extra_blows[1] += o_ptr->pval;
@@ -3854,31 +3891,44 @@ void calc_bonuses(void)
                }
 
                /* Hack -- cause earthquakes */
-               if (f1 & (TR1_IMPACT)) p_ptr->impact[(i == INVEN_RARM) ? 0 : 1] = TRUE;
+               if (have_flag(flgs, TR_IMPACT)) p_ptr->impact[(i == INVEN_RARM) ? 0 : 1] = TRUE;
 
                /* Boost shots */
-               if (f3 & (TR3_XTRA_SHOTS)) extra_shots++;
+               if (have_flag(flgs, TR_XTRA_SHOTS)) extra_shots++;
 
                /* Various flags */
-               if (f3 & (TR3_AGGRAVATE))   p_ptr->cursed |= TRC_AGGRAVATE;
-               if (f3 & (TR3_DRAIN_EXP))   p_ptr->cursed |= TRC_DRAIN_EXP;
-               if (f3 & (TR3_TY_CURSE))    p_ptr->cursed |= TRC_TY_CURSE;
-               if (f3 & (TR3_DEC_MANA))    p_ptr->dec_mana = TRUE;
-               if (f3 & (TR3_BLESSED))     p_ptr->bless_blade = TRUE;
-               if (f3 & (TR3_XTRA_MIGHT))  p_ptr->xtra_might = TRUE;
-               if (f3 & (TR3_SLOW_DIGEST)) p_ptr->slow_digest = TRUE;
-               if (f3 & (TR3_REGEN))       p_ptr->regenerate = TRUE;
-               if (f3 & (TR3_TELEPATHY))   p_ptr->telepathy = TRUE;
-               if (f3 & (TR3_SEE_INVIS))   p_ptr->see_inv = TRUE;
-               if (f3 & (TR3_FEATHER))     p_ptr->ffall = TRUE;
-               if (f2 & (TR2_FREE_ACT))    p_ptr->free_act = TRUE;
-               if (f2 & (TR2_HOLD_LIFE))   p_ptr->hold_life = TRUE;
-               if (f3 & (TR3_WARNING)){
+               if (have_flag(flgs, TR_AGGRAVATE))   p_ptr->cursed |= TRC_AGGRAVATE;
+               if (have_flag(flgs, TR_DRAIN_EXP))   p_ptr->cursed |= TRC_DRAIN_EXP;
+               if (have_flag(flgs, TR_TY_CURSE))    p_ptr->cursed |= TRC_TY_CURSE;
+               if (have_flag(flgs, TR_DEC_MANA))    p_ptr->dec_mana = TRUE;
+               if (have_flag(flgs, TR_BLESSED))     p_ptr->bless_blade = TRUE;
+               if (have_flag(flgs, TR_XTRA_MIGHT))  p_ptr->xtra_might = TRUE;
+               if (have_flag(flgs, TR_SLOW_DIGEST)) p_ptr->slow_digest = TRUE;
+               if (have_flag(flgs, TR_REGEN))       p_ptr->regenerate = TRUE;
+               if (have_flag(flgs, TR_TELEPATHY))   p_ptr->telepathy = TRUE;
+               if (have_flag(flgs, TR_ESP_ANIMAL))  p_ptr->esp_animal = TRUE;
+               if (have_flag(flgs, TR_ESP_UNDEAD))  p_ptr->esp_undead = TRUE;
+               if (have_flag(flgs, TR_ESP_DEMON))   p_ptr->esp_demon = TRUE;
+               if (have_flag(flgs, TR_ESP_ORC))     p_ptr->esp_orc = TRUE;
+               if (have_flag(flgs, TR_ESP_TROLL))   p_ptr->esp_troll = TRUE;
+               if (have_flag(flgs, TR_ESP_GIANT))   p_ptr->esp_giant = TRUE;
+               if (have_flag(flgs, TR_ESP_DRAGON))  p_ptr->esp_dragon = TRUE;
+               if (have_flag(flgs, TR_ESP_HUMAN))   p_ptr->esp_human = TRUE;
+               if (have_flag(flgs, TR_ESP_EVIL))    p_ptr->esp_evil = TRUE;
+               if (have_flag(flgs, TR_ESP_GOOD))    p_ptr->esp_good = TRUE;
+               if (have_flag(flgs, TR_ESP_NONLIVING)) p_ptr->esp_nonliving = TRUE;
+               if (have_flag(flgs, TR_ESP_UNIQUE))  p_ptr->esp_unique = TRUE;
+
+               if (have_flag(flgs, TR_SEE_INVIS))   p_ptr->see_inv = TRUE;
+               if (have_flag(flgs, TR_FEATHER))     p_ptr->ffall = TRUE;
+               if (have_flag(flgs, TR_FREE_ACT))    p_ptr->free_act = TRUE;
+               if (have_flag(flgs, TR_HOLD_LIFE))   p_ptr->hold_life = TRUE;
+               if (have_flag(flgs, TR_WARNING)){
                        if (!o_ptr->inscription || !(strchr(quark_str(o_ptr->inscription),'$')))
                          p_ptr->warning = TRUE;
                }
 
-               if (f3 & (TR3_TELEPORT))
+               if (have_flag(flgs, TR_TELEPORT))
                {
                        if (cursed_p(o_ptr)) p_ptr->cursed |= TRC_TELEPORT;
                        else if (!o_ptr->inscription || !(strchr(quark_str(o_ptr->inscription),'.')))
@@ -3886,43 +3936,43 @@ void calc_bonuses(void)
                }
 
                /* Immunity flags */
-               if (f2 & (TR2_IM_FIRE)) p_ptr->immune_fire = TRUE;
-               if (f2 & (TR2_IM_ACID)) p_ptr->immune_acid = TRUE;
-               if (f2 & (TR2_IM_COLD)) p_ptr->immune_cold = TRUE;
-               if (f2 & (TR2_IM_ELEC)) p_ptr->immune_elec = TRUE;
+               if (have_flag(flgs, TR_IM_FIRE)) p_ptr->immune_fire = TRUE;
+               if (have_flag(flgs, TR_IM_ACID)) p_ptr->immune_acid = TRUE;
+               if (have_flag(flgs, TR_IM_COLD)) p_ptr->immune_cold = TRUE;
+               if (have_flag(flgs, TR_IM_ELEC)) p_ptr->immune_elec = TRUE;
 
                /* Resistance flags */
-               if (f2 & (TR2_RES_ACID))   p_ptr->resist_acid = TRUE;
-               if (f2 & (TR2_RES_ELEC))   p_ptr->resist_elec = TRUE;
-               if (f2 & (TR2_RES_FIRE))   p_ptr->resist_fire = TRUE;
-               if (f2 & (TR2_RES_COLD))   p_ptr->resist_cold = TRUE;
-               if (f2 & (TR2_RES_POIS))   p_ptr->resist_pois = TRUE;
-               if (f2 & (TR2_RES_FEAR))   p_ptr->resist_fear = TRUE;
-               if (f2 & (TR2_RES_CONF))   p_ptr->resist_conf = TRUE;
-               if (f2 & (TR2_RES_SOUND))  p_ptr->resist_sound = TRUE;
-               if (f2 & (TR2_RES_LITE))   p_ptr->resist_lite = TRUE;
-               if (f2 & (TR2_RES_DARK))   p_ptr->resist_dark = TRUE;
-               if (f2 & (TR2_RES_CHAOS))  p_ptr->resist_chaos = TRUE;
-               if (f2 & (TR2_RES_DISEN))  p_ptr->resist_disen = TRUE;
-               if (f2 & (TR2_RES_SHARDS)) p_ptr->resist_shard = TRUE;
-               if (f2 & (TR2_RES_NEXUS))  p_ptr->resist_nexus = TRUE;
-               if (f2 & (TR2_RES_BLIND))  p_ptr->resist_blind = TRUE;
-               if (f2 & (TR2_RES_NETHER)) p_ptr->resist_neth = TRUE;
-
-               if (f2 & (TR2_REFLECT))  p_ptr->reflect = TRUE;
-               if (f3 & (TR3_SH_FIRE))  p_ptr->sh_fire = TRUE;
-               if (f3 & (TR3_SH_ELEC))  p_ptr->sh_elec = TRUE;
-               if (f3 & (TR3_SH_COLD))  p_ptr->sh_cold = TRUE;
-               if (f3 & (TR3_NO_MAGIC)) p_ptr->anti_magic = TRUE;
-               if (f3 & (TR3_NO_TELE))  p_ptr->anti_tele = TRUE;
+               if (have_flag(flgs, TR_RES_ACID))   p_ptr->resist_acid = TRUE;
+               if (have_flag(flgs, TR_RES_ELEC))   p_ptr->resist_elec = TRUE;
+               if (have_flag(flgs, TR_RES_FIRE))   p_ptr->resist_fire = TRUE;
+               if (have_flag(flgs, TR_RES_COLD))   p_ptr->resist_cold = TRUE;
+               if (have_flag(flgs, TR_RES_POIS))   p_ptr->resist_pois = TRUE;
+               if (have_flag(flgs, TR_RES_FEAR))   p_ptr->resist_fear = TRUE;
+               if (have_flag(flgs, TR_RES_CONF))   p_ptr->resist_conf = TRUE;
+               if (have_flag(flgs, TR_RES_SOUND))  p_ptr->resist_sound = TRUE;
+               if (have_flag(flgs, TR_RES_LITE))   p_ptr->resist_lite = TRUE;
+               if (have_flag(flgs, TR_RES_DARK))   p_ptr->resist_dark = TRUE;
+               if (have_flag(flgs, TR_RES_CHAOS))  p_ptr->resist_chaos = TRUE;
+               if (have_flag(flgs, TR_RES_DISEN))  p_ptr->resist_disen = TRUE;
+               if (have_flag(flgs, TR_RES_SHARDS)) p_ptr->resist_shard = TRUE;
+               if (have_flag(flgs, TR_RES_NEXUS))  p_ptr->resist_nexus = TRUE;
+               if (have_flag(flgs, TR_RES_BLIND))  p_ptr->resist_blind = TRUE;
+               if (have_flag(flgs, TR_RES_NETHER)) p_ptr->resist_neth = TRUE;
+
+               if (have_flag(flgs, TR_REFLECT))  p_ptr->reflect = TRUE;
+               if (have_flag(flgs, TR_SH_FIRE))  p_ptr->sh_fire = TRUE;
+               if (have_flag(flgs, TR_SH_ELEC))  p_ptr->sh_elec = TRUE;
+               if (have_flag(flgs, TR_SH_COLD))  p_ptr->sh_cold = TRUE;
+               if (have_flag(flgs, TR_NO_MAGIC)) p_ptr->anti_magic = TRUE;
+               if (have_flag(flgs, TR_NO_TELE))  p_ptr->anti_tele = TRUE;
 
                /* Sustain flags */
-               if (f2 & (TR2_SUST_STR)) p_ptr->sustain_str = TRUE;
-               if (f2 & (TR2_SUST_INT)) p_ptr->sustain_int = TRUE;
-               if (f2 & (TR2_SUST_WIS)) p_ptr->sustain_wis = TRUE;
-               if (f2 & (TR2_SUST_DEX)) p_ptr->sustain_dex = TRUE;
-               if (f2 & (TR2_SUST_CON)) p_ptr->sustain_con = TRUE;
-               if (f2 & (TR2_SUST_CHR)) p_ptr->sustain_chr = TRUE;
+               if (have_flag(flgs, TR_SUST_STR)) p_ptr->sustain_str = TRUE;
+               if (have_flag(flgs, TR_SUST_INT)) p_ptr->sustain_int = TRUE;
+               if (have_flag(flgs, TR_SUST_WIS)) p_ptr->sustain_wis = TRUE;
+               if (have_flag(flgs, TR_SUST_DEX)) p_ptr->sustain_dex = TRUE;
+               if (have_flag(flgs, TR_SUST_CON)) p_ptr->sustain_con = TRUE;
+               if (have_flag(flgs, TR_SUST_CHR)) p_ptr->sustain_chr = TRUE;
 
                if (o_ptr->name2 == EGO_YOIYAMI) yoiyami = TRUE;
                if (o_ptr->name2 == EGO_2WEAPON) easy_2weapon = TRUE;
@@ -4422,6 +4472,22 @@ void calc_bonuses(void)
                p_ptr->update |= (PU_MONSTERS);
        }
 
+       if ((p_ptr->esp_animal != old_esp_animal) ||
+           (p_ptr->esp_undead != old_esp_undead) ||
+           (p_ptr->esp_demon != old_esp_demon) ||
+           (p_ptr->esp_orc != old_esp_orc) ||
+           (p_ptr->esp_troll != old_esp_troll) ||
+           (p_ptr->esp_giant != old_esp_giant) ||
+           (p_ptr->esp_dragon != old_esp_dragon) ||
+           (p_ptr->esp_human != old_esp_human) ||
+           (p_ptr->esp_evil != old_esp_evil) ||
+           (p_ptr->esp_good != old_esp_good) ||
+           (p_ptr->esp_nonliving != old_esp_nonliving) ||
+           (p_ptr->esp_unique != old_esp_unique))
+       {
+               p_ptr->update |= (PU_MONSTERS);
+       }
+
        /* Hack -- See Invis Change */
        if (p_ptr->see_inv != old_see_inv)
        {
@@ -4653,7 +4719,7 @@ void calc_bonuses(void)
                /* Examine the "main weapon" */
                o_ptr = &inventory[INVEN_RARM+i];
 
-               object_flags(o_ptr, &f1, &f2, &f3);
+               object_flags(o_ptr, flgs);
 
                /* Assume not heavy */
                p_ptr->heavy_wield[i] = FALSE;
@@ -4752,7 +4818,7 @@ void calc_bonuses(void)
                                        num = 5; wgt = 70; mul = 3; break;
 
                                case CLASS_CAVALRY:
-                                       if ((p_ptr->riding) && (f2 & TR2_RIDING)) {num = 5; wgt = 70; mul = 4;}
+                                       if ((p_ptr->riding) && (have_flag(flgs, TR_RIDING))) {num = 5; wgt = 70; mul = 4;}
                                        else {num = 5; wgt = 100; mul = 3;}
                                        break;
 
@@ -4827,7 +4893,7 @@ void calc_bonuses(void)
 
                /* Assume okay */
                /* Priest weapon penalty for non-blessed edged weapons */
-               if ((p_ptr->pclass == CLASS_PRIEST) && (!(f3 & (TR3_BLESSED))) &&
+               if ((p_ptr->pclass == CLASS_PRIEST) && (!(have_flag(flgs, TR_BLESSED))) &&
                    ((o_ptr->tval == TV_SWORD) || (o_ptr->tval == TV_POLEARM)))
                {
                        /* Reduce the real bonuses */
@@ -4888,7 +4954,7 @@ void calc_bonuses(void)
                                p_ptr->to_h[i] +=15;
                                p_ptr->dis_to_h[i] +=15;
                        }
-                       else if (!(f2 & TR2_RIDING))
+                       else if (!(have_flag(flgs, TR_RIDING)))
                        {
                                int penalty;
                                if ((p_ptr->pclass == CLASS_BEASTMASTER) || (p_ptr->pclass == CLASS_CAVALRY))