OSDN Git Service

switch文で書かれていた、生成するエゴアイテムを選ぶコードをe_infoに書いた
authormogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Fri, 18 Jan 2002 10:34:21 +0000 (10:34 +0000)
committermogami <mogami@0568b783-4c39-0410-ac80-bf13821ea2a2>
Fri, 18 Jan 2002 10:34:21 +0000 (10:34 +0000)
rarityを元にして決めるように書き変え。
ただし、指輪とアミュレットは例外的な処理が多すぎるのでとりあえず諦め。書き変えはなし。

lib/edit/e_info_j.txt
src/defines.h
src/object2.c

index f2276e3..2912811 100644 (file)
@@ -61,32 +61,32 @@ V:2.8.1
 
 N:4:ÂÑ»À¤Î
 E:of Resist Acid
-X:30:16
-W:0:0:0:1000
+X:31:16
+W:0:120:0:1000
 F:RES_ACID | IGNORE_ACID
 
 N:5:ÂÑÅŤÎ
 E:of Resist Lightning
-X:30:10
-W:0:0:0:400
+X:31:10
+W:0:120:0:400
 F:RES_ELEC | IGNORE_ELEC
 
 N:6:ÂѲФÎ
 E:of Resist Fire
-X:30:14
-W:0:0:0:800
+X:31:14
+W:0:90:0:800
 F:RES_FIRE | IGNORE_FIRE
 
 N:7:ÂÑÎä¤Î
 E:of Resist Cold
-X:30:12
-W:0:0:0:600
+X:31:12
+W:0:90:0:600
 F:RES_COLD | IGNORE_COLD
 
 N:8:Á´ÂÑÀ­¤Î
 E:of Resistance
-X:30:20
-W:0:0:0:12500
+X:31:20
+W:0:180:0:12500
 C:0:0:10:0
 F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | 
 F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
@@ -95,8 +95,8 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 
 N:9:¥¨¥ë¥Õ¤Î
 E:of Elvenkind
-X:30:25
-W:0:0:0:15000
+X:31:25
+W:0:180:0:15000
 C:0:0:10:3
 F:STEALTH | 
 F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | 
@@ -104,8 +104,8 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 
 N:10:(¥É¥ï¡¼¥Õ)
 E:(Dwarven)
-X:30:5
-W:0:0:0:1500
+X:31:5
+W:0:180:0:1500
 C:0:0:12:3
 F:STR |
 F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
@@ -114,7 +114,7 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 
 N:11:±Ê³¤Î
 E:of Permanence
-X:30:30
+X:31:30
 W:0:0:0:30000
 C:0:0:10:0
 F:SUST_STR | SUST_DEX | SUST_CON | SUST_INT | SUST_WIS | SUST_CHR | 
@@ -123,7 +123,7 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 
 N:12:¾¬°Ç¤Î
 E:of The Twilight
-X:30:99
+X:31:99
 W:0:0:0:100000
 C:0:0:0:0
 F:SUST_STR | SUST_DEX | SUST_CON | SUST_INT | SUST_WIS | SUST_CHR | 
@@ -144,32 +144,32 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 
 N:16:ÂÑ»À¤Î
 E:of Resist Acid
-X:32:16
-W:0:0:0:1000
+X:25:16
+W:0:180:0:1000
 F:RES_ACID | IGNORE_ACID
 
 N:17:ÂÑÅŤÎ
 E:of Resist Lightning
-X:32:10
-W:0:0:0:400
+X:25:10
+W:0:72:0:400
 F:RES_ELEC | IGNORE_ELEC
 
 N:18:ÂѲФÎ
 E:of Resist Fire
-X:32:14
-W:0:0:0:800
+X:25:14
+W:0:90:0:800
 F:RES_FIRE | IGNORE_FIRE
 
 N:19:ÂÑÎä¤Î
 E:of Resist Cold
-X:32:12
-W:0:0:0:600
+X:25:12
+W:0:72:0:600
 F:RES_COLD | IGNORE_COLD
 
 N:20:Á´ÂÑÀ­¤Î
 E:of Resistance
-X:32:20
-W:0:0:0:12500
+X:25:20
+W:0:180:0:12500
 C:0:0:10:0
 F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | 
 F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
@@ -177,16 +177,16 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 #JZ#
 N:21:È¿¼Í¤Î
 E:of Reflection
-X:32:20
-W:0:0:0:8000
+X:25:20
+W:0:180:0:8000
 C:0:0:5:0
 F:REFLECT
 F:IGNORE_ELEC | IGNORE_ACID | IGNORE_COLD | IGNORE_FIRE
 
 N:22:¸÷¤È±Æ¤Î
 E:of Night and Day
-X:32:18
-W:0:0:0:8000
+X:25:18
+W:0:180:0:8000
 C:0:0:5:0
 F:RES_LITE | RES_DARK
 
@@ -196,27 +196,27 @@ F:RES_LITE | RES_DARK
 N:23:°Ç¤Î
 E:of Darkness
 X:33:6
-W:0:0:0:800
+W:0:180:0:800
 F:LITE | RES_DARK
 
 N:24:ÃÎǽ¤Î
 E:of Intelligence
 X:33:13
 C:0:0:0:2
-W:0:0:0:500
+W:0:180:0:500
 F:INT | SUST_INT
 
 N:25:¸­ÌÀ¤Î
 E:of Wisdom
 X:33:13
-W:0:0:0:500
+W:0:180:0:500
 C:0:0:0:2
 F:WIS | SUST_WIS
 
 N:26:ÈþËƤÎ
 E:of Beauty
 X:33:8
-W:0:0:0:1000
+W:0:180:0:1000
 C:0:0:0:4
 F:CHR | SUST_CHR
 
@@ -228,7 +228,7 @@ F:CHR | SUST_CHR
 N:27:¸­¼Ô¤Î
 E:of the Magi
 X:33:15
-W:0:0:0:15000
+W:0:360:0:15000
 C:0:0:0:3
 F:INT | SUST_INT | 
 F:RES_ACID | RES_ELEC | RES_FIRE | RES_COLD | 
@@ -237,81 +237,81 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 N:28:ÎϤÎ
 E:of Might
 X:33:19
-W:0:0:0:10000
+W:0:360:0:10000
 C:0:0:0:3
 F:STR | DEX | CON | SUST_STR | SUST_DEX | SUST_CON | FREE_ACT
 
 N:29:º¸·¤Î
 E:of Lordliness
 X:33:17
-W:0:0:0:10000
+W:0:180:0:10000
 C:0:0:0:3
 F:WIS | CHR | SUST_WIS | SUST_CHR
 
 N:30:±ÔÉÒ¤Î
 E:of Seeing
 X:33:8
-W:0:0:0:1000
+W:0:180:0:1000
 C:0:0:0:8
 F:SEARCH | RES_BLIND | SEE_INVIS
 
 N:31:ÀÖ³°Àþ»ëÎϤÎ
 E:of Infravision
 X:33:11
-W:0:0:0:500
+W:0:90:0:500
 C:0:0:0:8
 F:INFRA | HIDE_TYPE
 
 N:32:¸÷¤Î
 E:of Light
 X:33:6
-W:0:0:0:500
+W:0:180:0:500
 F:LITE | RES_LITE
 
 N:33:¥Æ¥ì¥Ñ¥·¡¼¤Î
 E:of Telepathy
 X:33:20
-W:0:0:0:15000
+W:0:360:0:15000
 F:TELEPATHY
 
 N:34:µÞ®²óÉü¤Î
 E:of Regeneration
 X:33:10
-W:0:0:0:1500
+W:0:360:0:1500
 F:REGEN
 
 N:35:¥Æ¥ì¥Ý¡¼¥È¤Î
 E:of Teleportation
 X:33:0
-W:0:0:0:0
+W:0:360:0:0
 F:TELEPORT
 
 N:36:̵ÃΤÎ
 E:of Stupidity
 X:33:0
 C:0:0:0:5
-W:0:0:0:0
+W:0:180:0:0
 F:INT
 
 N:37:¶òÆߤÎ
 E:of Naivety
 X:33:0
 C:0:0:0:5
-W:0:0:0:0
+W:0:180:0:0
 F:WIS
 
 N:38:½¹°­¤Î
 E:of Ugliness
 X:33:0
 C:0:0:0:5
-W:0:0:0:0
+W:0:360:0:0
 F:CHR
 
 N:39:¼ÀɤÎ
 E:of Sickliness
 X:33:0
 C:0:0:0:5
-W:0:0:0:0
+W:0:360:0:0
 F:STR | DEX | CON
 
 
@@ -319,8 +319,8 @@ F:STR | DEX | CON
 
 N:40:¼é¤ê¤Î
 E:of Protection
-X:31:10
-W:0:0:0:500
+X:32:10
+W:0:45:0:500
 C:0:0:10:0
 F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 
@@ -329,8 +329,8 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 #J0#
 N:41:Ǧ¤Ó¤Î
 E:of Stealth
-X:31:10
-W:0:0:0:500
+X:32:10
+W:0:51:0:500
 C:0:0:0:3
 F:STEALTH
 
@@ -338,8 +338,8 @@ F:STEALTH
 
 N:42:»êÊ¡¤ÎÃÏ¥¢¥Þ¥ó¤Î
 E:of Aman
-X:31:20
-W:0:0:0:15000
+X:32:20
+W:0:360:0:15000
 C:0:0:20:3
 F:STEALTH | 
 F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
@@ -348,8 +348,8 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 #JZ#
 N:43:¼ÞÇ®¤Î
 E:of Immolation
-X:31:16
-W:0:0:0:4000
+X:32:16
+W:0:360:0:4000
 C:0:0:4:0
 F:IGNORE_ACID | IGNORE_FIRE | SH_FIRE | RES_FIRE
 
@@ -358,22 +358,22 @@ F:IGNORE_ACID | IGNORE_FIRE | SH_FIRE | RES_FIRE
 #J0#
 N:44:«Çû¤Î
 E:of Enveloping
-X:31:0
-W:0:0:0:0
+X:32:0
+W:0:360:0:0
 C:10:10:0:0
 F:SHOW_MODS
 
 N:45:¤¤¤¸¤á¤é¤ì¤Î
 E:of Vulnerability
-X:31:0
-W:0:0:0:0
+X:32:0
+W:0:360:0:0
 C:0:0:50:0
 F:AGGRAVATE
 
 N:46:¤¤¤é¤Ä¤­¤Î
 E:of Irritation
-X:31:0
-W:0:0:0:0
+X:32:0
+W:0:360:0:0
 C:15:15:0:0
 F:AGGRAVATE | SHOW_MODS
 
@@ -381,8 +381,8 @@ F:AGGRAVATE | SHOW_MODS
 #JZ#
 N:47:ÅÅ·â¤Î
 E:of Electricity
-X:31:16
-W:0:0:0:4000
+X:32:16
+W:0:360:0:4000
 C:0:0:4:0
 F:IGNORE_ACID | IGNORE_ELEC | SH_ELEC | RES_ELEC
 
@@ -394,54 +394,54 @@ N:48:
 E:of Free Action
 X:34:11
 F:FREE_ACT
-W:0:0:0:1000
+W:0:12:0:1000
 
 N:49:»¦Ù¤¤Î
 E:of Slaying
 X:34:17
-W:0:0:0:2500
+W:0:60:0:2500
 C:8:8:0:0
 F:SHOW_MODS
 
 N:50:½ÓÉÒ¤Î
 E:of Agility
 X:34:14
-W:0:0:0:1000
+W:0:90:0:1000
 C:0:0:0:5
 F:DEX | HIDE_TYPE
 
 N:51:ÏÓÎϤÎ
 E:of Power
 X:34:22
-W:0:0:0:8000
+W:0:180:0:8000
 C:5:5:0:5
 F:STR | SHOW_MODS | HIDE_TYPE
 
 N:52:¸»»á¤Î
 E:of Genji
 X:34:30
-W:0:0:0:50000
+W:0:360:0:50000
 C:8:0:0:3
 F:DEX | SHOW_MODS | HIDE_TYPE
 
 N:53:ËâÎÏ»ÙÇÛ¤Î
 E:of Magic Mastery
 X:34:17
-W:0:0:0:2000
+W:0:72:0:2000
 C:0:0:0:4
 F:MAGIC_MASTERY | HIDE_TYPE
 
 N:54:Àȼå¤Î
 E:of Weakness
 X:34:0
-W:0:0:0:0
+W:0:360:0:0
 C:0:0:0:10
 F:STR
 
 N:55:ÉÔ´ïÍѤÎ
 E:of Clumsiness
 X:34:0
-W:0:0:0:0
+W:0:360:0:0
 C:0:0:0:10
 F:DEX
 
@@ -452,7 +452,7 @@ F:DEX
 N:56:ÉâÍ·¤Î
 E:of Levitation
 X:35:7
-W:0:0:0:250
+W:0:13:0:250
 F:FEATHER
 
 #J0#
@@ -461,46 +461,46 @@ F:FEATHER
 N:57:Ǧ¤Ó¤Î
 E:of Stealth
 X:35:16
-W:0:0:0:500
+W:0:60:0:500
 C:0:0:0:3
 F:STEALTH
 
 N:58:ËãáãÃΤ餺¤Î
 E:of Free Action
 X:35:15
-W:0:0:0:1000
+W:0:90:0:1000
 F:FREE_ACT
 
 N:59:¥¹¥Ô¡¼¥É¤Î
 E:of Speed
 X:35:25
-W:0:0:0:100000
+W:0:360:0:100000
 C:0:0:0:10
 F:SPEED | HIDE_TYPE
 
 N:60:Ä·Ìö¤Î
 E:of Jumping
 X:35:15
-W:0:0:0:1000
+W:0:90:0:1000
 F:ACTIVATE
 
 N:61:Áû²»¤Î
 E:of Noise
 X:35:0
-W:0:0:0:0
+W:0:360:0:0
 F:AGGRAVATE
 
 N:62:¤Î¤í¤Þ¤Î
 E:of Slowness
 X:35:0
-W:0:0:0:0
+W:0:360:0:0
 C:0:0:0:5
 F:SPEED
 
 N:63:Ìñ²ð¼Ô¤Î
 E:of Annoyance
 X:35:0
-W:0:0:0:0
+W:0:360:0:0
 C:0:0:0:10
 F:SPEED | AGGRAVATE
 
@@ -512,7 +512,7 @@ F:SPEED | AGGRAVATE
 N:64:(À»Àï¼Ô)
 E:(Holy Avenger)
 X:24:30
-W:0:0:0:20000
+W:0:360:0:20000
 C:6:6:4:4
 F:WIS | 
 F:SLAY_EVIL | SLAY_UNDEAD | SLAY_DEMON | 
@@ -523,7 +523,7 @@ F:SEE_INVIS | BLESSED | RES_FEAR
 N:65:(ËɱҼÔ)
 E:(Defender)
 X:24:25
-W:0:0:0:10000
+W:0:360:0:10000
 C:4:4:8:4
 F:STEALTH | 
 F:FREE_ACT | SEE_INVIS | FEATHER | REGEN | 
@@ -535,7 +535,7 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 N:66:(½ËÊ¡)
 E:(Blessed)
 X:24:20
-W:0:0:0:5000
+W:0:360:0:5000
 C:0:0:0:3
 F:WIS | 
 F:BLESSED
@@ -545,7 +545,7 @@ F:BLESSED
 N:68:À¾Êý¹ñ¤Î
 E:of Westernesse
 X:24:20
-W:0:0:0:15000
+W:0:360:0:15000
 C:5:5:0:2
 F:STR | DEX | CON | 
 F:SLAY_ORC | SLAY_TROLL | SLAY_GIANT | 
@@ -554,20 +554,20 @@ F:FREE_ACT | SEE_INVIS
 N:69:Äɲù¶·â¤Î
 E:of Extra Attacks
 X:24:20
-W:0:0:0:10000
+W:0:180:0:10000
 C:0:0:0:3
 F:BLOWS
 
 N:70:»¦Ù¤¤Î
 E:of Slaying
 X:24:15
-W:0:0:0:2500
+W:0:180:0:2500
 C:0:0:0:0
 
 N:71:ÍýÎϤÎ
 E:of Force
 X:24:15
-W:0:0:0:12000
+W:0:180:0:12000
 C:3:3:0:2
 F:INT | WIS |
 F:FORCE_WEPON | SEE_INVIS
@@ -577,46 +577,46 @@ F:FORCE_WEPON | SEE_INVIS
 N:72:Íϲò¤Î
 E:of Melting
 X:24:15
-W:0:0:0:8000
+W:0:360:0:8000
 F:BRAND_ACID | RES_ACID | IGNORE_ACID
 
 N:73:ÅÅ·â¤Î
 E:of Shocking
 X:24:20
-W:0:0:0:4500
+W:0:360:0:4500
 F:BRAND_ELEC | RES_ELEC | IGNORE_ELEC
 
 N:74:¾Æ´þ¤Î
 E:of Burning
 X:24:20
-W:0:0:0:3000
+W:0:360:0:3000
 F:BRAND_FIRE | RES_FIRE | IGNORE_FIRE | LITE
 
 N:75:Åà·ë¤Î
 E:of Freezing
 X:24:15
-W:0:0:0:2500
+W:0:360:0:2500
 F:BRAND_COLD | RES_COLD | IGNORE_COLD
 
 #JZ#
 N:76:ÆÇ»¦¤Î
 E:of Poisoning
 X:24:20
-W:0:0:0:4500
+W:0:360:0:4500
 F:BRAND_POIS | RES_POIS
 
 #JZ#
 N:77:(º®ÆÙ)
 E:(Chaotic)
 X:24:28
-W:0:0:0:10000
+W:0:360:0:10000
 F:CHAOTIC | RES_CHAOS | IGNORE_ELEC | IGNORE_ACID | IGNORE_FIRE
 
 #JZ#
 N:78:ÀÚ¤ìÌ£¤Î
 E:of Sharpness
 X:24:20
-W:0:0:0:5000
+W:0:180:0:5000
 F:VORPAL | TUNNEL
 
 #JZ#
@@ -632,49 +632,49 @@ F:TUNNEL | IMPACT | ACTIVATE
 N:80:¥¢¥Ë¥Þ¥ë¥¹¥ì¥¤¥ä¡¼¤Î
 E:of Slay Animal
 X:24:18
-W:0:0:0:3500
+W:0:75:0:3500
 F:SLAY_ANIMAL
 
 N:81:ÌǼ٤Î
 E:of Slay Evil
 X:24:18
-W:0:0:0:3500
+W:0:75:0:3500
 F:SLAY_EVIL
 
 N:82:¥¢¥ó¥Ç¥Ã¥É¥¹¥ì¥¤¥ä¡¼¤Î
 E:of Slay Undead
 X:24:18
-W:0:0:0:3500
+W:0:75:0:3500
 F:SLAY_UNDEAD | HOLD_LIFE
 
 N:83:¥Ç¡¼¥â¥ó¥¹¥ì¥¤¥ä¡¼¤Î
 E:of Slay Demon
 X:24:14
-W:0:0:0:2500
+W:0:75:0:2500
 F:SLAY_DEMON
 
 N:84:¥ª¡¼¥¯¥¹¥ì¥¤¥ä¡¼¤Î
 E:of Slay Orc
 X:24:10
-W:0:0:0:2500
+W:0:50:0:2500
 F:SLAY_ORC
 
 N:85:¥È¥í¥ë¥¹¥ì¥¤¥ä¡¼¤Î
 E:of Slay Troll
 X:24:10
-W:0:0:0:2500
+W:0:50:0:2500
 F:SLAY_TROLL
 
 N:86:¥¸¥ã¥¤¥¢¥ó¥È¥¹¥ì¥¤¥ä¡¼¤Î
 E:of Slay Giant
 X:24:14
-W:0:0:0:2500
+W:0:50:0:2500
 F:SLAY_GIANT
 
 N:87:¥É¥é¥´¥ó¥¹¥ì¥¤¥ä¡¼¤Î
 E:of Slay Dragon
 X:24:18
-W:0:0:0:3500
+W:0:75:0:3500
 F:SLAY_DRAGON
 
 # The "Kill" brands (8)
@@ -682,56 +682,56 @@ F:SLAY_DRAGON
 N:88:*¥¢¥Ë¥Þ¥ë¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Animal
 X:24:20
-W:0:0:0:6000
+W:0:300:0:6000
 C:0:0:0:2
 F:INT | SLAY_ANIMAL | REGEN
 
 N:89:*ÌǼÙ*¤Î
 E:of *Slay* Evil
 X:24:20
-W:0:0:0:5000
+W:0:300:0:5000
 C:0:0:0:2
 F:WIS | SLAY_EVIL | BLESSED | RES_FEAR
 
 N:90:*¥¢¥ó¥Ç¥Ã¥É¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Undead
 X:24:24
-W:0:0:0:8000
+W:0:300:0:8000
 C:0:0:0:2
 F:WIS | SLAY_UNDEAD | SEE_INVIS | RES_NETHER
 
 N:91:*¥Ç¡¼¥â¥ó¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Demon
 X:24:16
-W:0:0:0:4000
+W:0:300:0:4000
 C:0:0:0:2
 F:INT | SLAY_DEMON
 
 N:92:*¥ª¡¼¥¯¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Orc
 X:24:14
-W:0:0:0:4000
+W:0:200:0:4000
 C:0:0:0:2
 F:DEX | SLAY_ORC
 
 N:93:*¥È¥í¥ë¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Troll
 X:24:14
-W:0:0:0:4000
+W:0:200:0:4000
 C:0:0:0:2
 F:STR | SLAY_TROLL
 
 N:94:*¥¸¥ã¥¤¥¢¥ó¥È¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Giant
 X:24:16
-W:0:0:0:4000
+W:0:200:0:4000
 C:0:0:0:2
 F:STR | SLAY_GIANT
 
 N:95:*¥É¥é¥´¥ó¥¹¥ì¥¤¥ä¡¼*¤Î
 E:of *Slay* Dragon
 X:24:24
-W:0:0:0:6000
+W:0:300:0:6000
 C:0:0:0:1
 F:CON | SLAY_DRAGON | KILL_DRAGON
 
@@ -739,13 +739,13 @@ F:CON | SLAY_DRAGON | KILL_DRAGON
 N:96:(µÛ·ì)
 E:(Vampiric)
 X:24:25
-W:0:0:0:10000
+W:0:180:0:10000
 F:VAMPIRIC | HOLD_LIFE
 
 N:97:Æú¿§¤Î
 E:of Prism
 X:24:25
-W:0:0:0:10000
+W:0:360:0:10000
 F:BRAND_FIRE | BRAND_COLD | BRAND_ELEC | LITE
 F:IGNORE_FIRE | IGNORE_COLD | IGNORE_ELEC
 
@@ -753,7 +753,7 @@ F:IGNORE_FIRE | IGNORE_COLD | IGNORE_ELEC
 N:98:(¥È¥é¥ó¥×)
 E:(Trump Weapon)
 X:24:22
-W:0:0:0:7000
+W:0:180:0:7000
 C:4:4:0:2
 F:SLAY_EVIL | TELEPORT | FREE_ACT | SEARCH |
 F:REGEN | SLOW_DIGEST | RES_NEXUS | ACTIVATE
@@ -762,7 +762,7 @@ F:REGEN | SLOW_DIGEST | RES_NEXUS | ACTIVATE
 N:99:(¥Ñ¥¿¡¼¥ó)
 E:(Pattern Weapon)
 X:24:26
-W:0:0:0:25000
+W:0:360:0:25000
 C:6:6:0:2
 F:STR | CON |
 F:SLAY_EVIL | SLAY_DEMON | SLAY_UNDEAD |
@@ -784,7 +784,7 @@ F:IGNORE_ACID | IGNORE_ELEC | IGNORE_FIRE | IGNORE_COLD
 N:102:¥â¥ë¥°¥ë¤Î
 E:of Morgul
 X:24:0
-W:0:0:0:0
+W:0:360:0:0
 C:20:20:10:0
 F:SEE_INVIS | AGGRAVATE | HEAVY_CURSE | CURSED
 
@@ -795,14 +795,14 @@ F:SEE_INVIS | AGGRAVATE | HEAVY_CURSE | CURSED
 
 N:104:¹âÀºÅÙ¤Î
 E:of Accuracy
-X:25:10
-W:0:0:0:1000
+X:26:10
+W:0:45:0:1000
 C:10:5:0:0
 
 N:105:¹â®ÅÙ¤Î
 E:of Velocity
-X:25:10
-W:0:0:0:1000
+X:26:10
+W:0:45:0:1000
 C:5:10:0:0
 
 # 106 (unused)
@@ -811,16 +811,16 @@ C:5:10:0:0
 
 N:108:¶¯ÎϼͤÎ
 E:of Extra Might
-X:25:20
-W:0:0:0:10000
+X:26:20
+W:0:180:0:10000
 C:2:4:0:0
 F:XTRA_MIGHT
 
 N:109:¶¯Â®¼Í¤Î
 E:of Extra Shots
-X:25:20
+X:26:20
 C:4:2:0:0
-W:0:0:0:10000
+W:0:180:0:10000
 F:XTRA_SHOTS
 
 # 110 (unused)
@@ -833,13 +833,13 @@ F:XTRA_SHOTS
 N:112:¥¢¥Ë¥Þ¥ë¥­¥é¡¼¤Î
 E:of Hurt Animal
 X:23:10
-W:0:0:0:25
+W:0:180:0:25
 F:SLAY_ANIMAL
 
 N:113:Ç˼٤Î
 E:of Hurt Evil
 X:23:10
-W:0:0:0:25
+W:0:180:0:25
 F:SLAY_EVIL
 
 # 114 (unused)
@@ -861,37 +861,37 @@ W:0:0:0:35
 N:120:»¦Ù¤¤Î
 E:of Slaying
 X:23:15
-W:0:0:0:20
+W:0:360:0:20
 C:10:10:0:0
 
 N:121:ÅÅ·â¤Î
 E:of Shocking
 X:23:10
 F:BRAND_ELEC | IGNORE_ELEC
-W:0:0:0:30
+W:0:360:0:30
 
 N:122:²Ð±ê¤Î
 E:of Flame
 X:23:10
 F:BRAND_FIRE | IGNORE_FIRE
-W:0:0:0:30
+W:0:360:0:30
 
 N:123:Î䵤¤Î
 E:of Frost
 X:23:10
 F:BRAND_COLD | IGNORE_COLD
-W:0:0:0:25
+W:0:360:0:25
 
 N:124:»¦½ý¤Î
 E:of Wounding
 X:23:5
-W:0:0:0:20
+W:0:120:0:20
 C:5:5:0:0
 
 N:125:±¢¸ý¤Î
 E:of Backbiting
 X:23:0
-W:0:0:0:0
+W:0:360:0:0
 C:50:50:0:0
 
 
@@ -908,7 +908,7 @@ C:5:5:0:0
 
 N:127:(ÁÆ°­ÉÊ)
 E:(Blasted)
-X:30:0
+X:32:0
 W:0:0:0:0
 C:0:0:10:0
 
@@ -917,16 +917,16 @@ C:0:0:10:0
 #JZ#
 N:128:¶Ë´¨¤Î
 E:of Coldly
-X:31:16
-W:0:0:0:4000
+X:32:16
+W:0:360:0:4000
 C:0:0:4:0
 F:IGNORE_ACID | IGNORE_COLD | SH_COLD | RES_COLD
 
 
 N:129:éþéõ¤Î
 E:of the Bat
-X:31:20
-W:50:0:0:10000
+X:32:20
+W:50:360:0:10000
 C:-7:-7:-5:5
 F:SPEED | FEATHER | RES_DARK | SEE_INVIS | INFRA | STEALTH | HIDE_TYPE
 
@@ -934,306 +934,306 @@ F:SPEED | FEATHER | RES_DARK | SEE_INVIS | INFRA | STEALTH | HIDE_TYPE
 # Ego Lite
 N:140:¸÷ÌÀ¤Î
 E:of Extra Light
-X:26:5
-W:0:0:0:200
+X:30:5
+W:0:90:0:200
 C:0:0:0:0
 
 N:141:¥¤¥ë¥ß¥Í¡¼¥·¥ç¥ó¤Î
 E:of Illumination
-X:26:20
-W:30:0:0:3000
+X:30:20
+W:30:360:0:3000
 C:0:0:0:0
 F:ACTIVATE
 
 N:142:¼ÞÇ®¤Î
 E:of Immolation
-X:26:20
-W:0:0:0:3000
+X:30:20
+W:0:360:0:3000
 C:0:0:0:0
 F:SH_FIRE | IGNORE_FIRE
 
 N:143:°Å»ë¤Î
 E:of Infravision
-X:26:5
-W:0:0:0:300
+X:30:5
+W:0:180:0:300
 C:0:0:0:3
 F:INFRA
 
 N:144:Ĺ»ý¤Á¤Î
 E:of Duration
-X:26:10
-W:0:0:0:100
+X:30:10
+W:0:90:0:100
 C:0:0:0:0
 
 N:145:°Å°Ç¤Î
 E:of Darkness
-X:26:0
-W:0:0:0:0
+X:30:0
+W:0:360:0:0
 C:0:0:0:0
 
 N:146:ÉÔµà¤Î´ã¤Î
 E:of Immortal Eye
-X:26:0
-W:0:0:0:4000
+X:30:0
+W:0:360:0:4000
 C:0:0:0:0
 F:RES_BLIND | SEE_INVIS
 
 # Ego Ring
 N:150:ͦµ¤¤Î
 E:of Heroism
-X:26:10
+X:27:10
 W:5:0:0:300
 C:0:0:0:0
 F:ACTIVATE
 
 N:151:»¦Ù¤¤Î
 E:of Slaying
-X:26:10
+X:27:10
 W:0:0:0:300
 C:4:4:0:0
 
 N:152:ÂçËɸæ¤Î
 E:of Defense
-X:26:5
+X:27:5
 W:0:0:0:300
 C:0:0:8:0
 
 N:153:ËâË¡¤ÎÌð¤Î
-E:of Maggic Missile
-X:26:5
+E:of Magic Missile
+X:27:5
 W:2:0:0:200
 C:0:0:0:0
 F:ACTIVATE
 
 N:154:²Ð±ê¤ÎÌð¤Î
 E:of Fire bolt
-X:26:5
+X:27:5
 W:10:0:0:700
 C:0:0:0:0
 F:ACTIVATE
 
 N:155:Î䵤¤ÎÌð¤Î
 E:of Frost bolt
-X:26:5
+X:27:5
 W:9:0:0:600
 C:0:0:0:0
 F:ACTIVATE
 
 N:156:ÅÅ·â¤ÎÌð¤Î
-E:of Elec bolt
-X:26:5
+E:of Lightning bolt
+X:27:5
 W:7:0:0:400
 C:0:0:0:0
 F:ACTIVATE
 
 N:157:»À¤ÎÌð¤Î
 E:of Acid bolt
-X:26:5
+X:27:5
 W:8:0:0:500
 C:0:0:0:0
 F:ACTIVATE
 
 N:158:ËâÎϤÎÌð¤Î
 E:of Mana bolt
-X:26:10
+X:27:10
 W:50:0:0:1500
 C:0:0:0:0
 F:ACTIVATE
 
 N:159:²Ðµå¤Î
 E:of Fire ball
-X:26:10
+X:27:10
 W:40:0:0:1500
 C:0:0:0:0
 F:ACTIVATE
 
 N:160:¥Ö¥ê¥¶¡¼¥É¤Î
 E:of Blizzard
-X:26:10
+X:27:10
 W:40:0:0:1500
 C:0:0:0:0
 F:ACTIVATE
 
 N:161:Íëµå¤Î
 E:of Ball Lightning
-X:26:10
+X:27:10
 W:40:0:0:1500
 C:0:0:0:0
 F:ACTIVATE
 
 N:162:»À¤Îµå¤Î
 E:of Acid ball
-X:26:10
+X:27:10
 W:40:0:0:1500
 C:0:0:0:0
 F:ACTIVATE
 
 N:163:ËâÎϤÎÍò¤Î
 E:of Mana Storm
-X:26:25
+X:27:25
 W:100:0:0:8000
 C:0:0:0:0
 F:ACTIVATE
 
 N:164:¥É¥é¥´¥ó¤Î²Ð±ê¤Î
 E:of Dragon's Flame
-X:26:20
+X:27:20
 W:70:0:0:5000
 C:0:0:0:0
 F:ACTIVATE
 
 N:165:¥É¥é¥´¥ó¤ÎÎ䵤¤Î
 E:of Dragon's Frost
-X:26:20
+X:27:20
 W:70:0:0:5000
 C:0:0:0:0
 F:ACTIVATE
 
 N:166:ÆóÃʲî¤Î
 E:of Acceleration
-X:26:20
+X:27:20
 W:90:0:0:30000
 C:0:0:0:0
 F:ACTIVATE
 
 N:167:¶¸Àï»Î¤Î
 E:of Berserker
-X:26:15
+X:27:15
 W:30:0:0:2000
 C:0:0:0:0
 F:ACTIVATE
 
 N:168:¼í¿Í¤Î
 E:of Hunter
-X:26:10
+X:27:10
 W:30:0:0:8000
 C:0:0:0:3
 F:STEALTH
 
 N:169:¶¯ÎÏÅêÚ³¤Î
 E:of Power Throwing
-X:26:5
+X:27:5
 W:30:0:0:500
 C:0:0:0:0
 
 N:170:³èÎϤÎ
 E:of Regeneration
-X:26:5
+X:27:5
 W:30:0:0:800
 C:0:0:0:0
 F:REGEN
 
 N:171:µ±¤­¤Î
 E:of light
-X:26:5
+X:27:5
 W:30:0:0:500
 C:0:0:0:0
 F:LITE
 
 N:172:´°Á´¥â¥ó¥¹¥¿¡¼´¶ÃΤÎ
 E:of Observe Monster
-X:26:5
+X:27:5
 W:30:0:0:1000
 C:0:0:0:0
 F:ACTIVATE
 
 N:173:Ǧ¤Ó¤Î
 E:of Stealth
-X:26:5
+X:27:5
 W:30:0:0:500
 C:0:0:0:0
 F:STEALTH
 
 N:174:²øʪÈô¤Ð¤·¤Î
 E:of Teleport away
-X:26:10
+X:27:10
 W:45:0:0:2000
 C:0:0:0:0
 F:ACTIVATE
 
 N:175:ÀºÅÙ¤Î
 E:of Accuracy
-X:26:5
+X:27:5
 W:30:0:0:500
 C:5:0:0:0
 
 N:176:¥À¥á¡¼¥¸¤Î
 E:of Damage
-X:26:5
+X:27:5
 W:30:0:0:500
 C:0:5:0:0
 
 N:177:ÂѸ÷¤Î
 E:of Resist light
-X:26:10
+X:27:10
 W:30:0:0:2000
 C:0:0:0:0
 F:RES_LITE
 
 N:178:ÂѰŤÎ
 E:of Resist dark
-X:26:10
+X:27:10
 W:30:0:0:2000
 C:0:0:0:0
 F:RES_DARK
 
 N:179:ËâÆ»»Õ¤Î
 E:of Wizardry
-X:26:10
+X:27:10
 W:30:0:0:1500
 C:0:0:0:0
 
 N:180:µæ¶Ë̵Ũ¶ä²ÏºÇ¶¯¤Î
 E:of the Mightiest in the Galaxy
-X:26:30
+X:27:30
 W:100:0:0:50000
 C:0:0:15:0
 F:ACTIVATE
 
 N:181:·Ð¸³Ã͵ۼý¤Î
 E:of Experience Drain
-X:26:0
+X:27:0
 W:0:0:0:0
 C:0:0:0:0
 F:DRAIN_EXP | CURSED | HEAVY_CURSE
 
 N:182:Èó˽ÎϤÎ
 E:of Pacifist
-X:26:0
+X:27:0
 W:0:0:0:0
 C:20:20:0:3
 F:CURSED | HEAVY_CURSE | STR | DEX
 
 N:183:È¿´¶¤Î
 E:of Aggravate
-X:26:0
+X:27:0
 W:0:0:0:0
 C:0:0:0:0
 F:AGGRAVATE | CURSED | HEAVY_CURSE
 
 N:184:±åÇ°¤Î
 E:of Ancient Foul Curse
-X:26:0
+X:27:0
 W:0:0:0:0
 C:0:0:0:0
 F:TY_CURSE | CURSED | HEAVY_CURSE
 
 N:185:ÂÑ»þ´ÖµÕž¤Î
 E:of Resist Time
-X:26:25
+X:27:25
 W:30:0:0:0
 C:0:0:0:0
 
 N:186:ÉÔ°ÂÄê¤Î
 E:of Random Teleport
-X:26:3
+X:27:3
 W:30:0:0:100
 C:0:0:0:0
 F:TELEPORT
 
 N:187:¥¢¥ë¥Ó¥Î¤Î
 E:of Albino
-X:28:0
+X:27:0
 W:0:0:0:0
 C:0:0:20:3
 F:CURSED | HEAVY_CURSE | CON
@@ -1242,195 +1242,196 @@ F:CURSED | HEAVY_CURSE | CON
 # Ego Amulet
 N:210:Ãپò½¤Î
 E:of Slow Digestion
-X:28:5
+X:29:5
 W:30:0:0:200
 C:0:0:0:0
 F:SLOW_DIGEST
 
 N:211:°Å»ë¤Î
 E:of Infravision
-X:28:5
+X:29:5
 W:30:0:0:500
 C:0:0:0:3
 F:INFRA
 
 N:212:²Ä»ëÆ©ÌÀ¤Î
 E:of See Invisible
-X:28:5
+X:29:5
 W:30:0:0:500
 C:0:0:0:0
 F:SEE_INVIS
 
 N:213:À¸Ì¿ÎÏÊÝ»ý¤Î
 E:of Hold Life
-X:28:5
+X:29:5
 W:30:0:0:1000
 C:0:0:0:0
 F:HOLD_LIFE
 
 N:214:·Ð¸³Ã͵ۼý¤Î
 E:of Experience Drain
-X:28:0
+X:29:0
 W:0:0:0:0
 C:0:0:0:0
 F:DRAIN_EXP | CURSED | HEAVY_CURSE
 
 N:215:̵ÃΤÎ
 E:of Stupidity
-X:26:0
+X:27:0
 W:30:0:0:0
 C:0:0:0:3
 F:INT | CURSED | HEAVY_CURSE
 
 N:216:È¿´¶¤Î
 E:of Aggravate
-X:28:0
+X:29:0
 W:0:0:0:0
 C:0:0:0:0
 F:AGGRAVATE | CURSED | HEAVY_CURSE
 
 N:217:±åÇ°¤Î
 E:of Ancient Foul Curse
-X:28:0
+X:29:0
 W:0:0:0:0
 C:0:0:0:0
 F:TY_CURSE | CURSED | HEAVY_CURSE
 
 N:218:¼é¤ê¤Î
 E:of Protection
-X:28:5
+X:29:5
 W:0:0:0:200
 C:0:0:8:0
 
 N:219:Ã챤Î
 E:of Lore
-X:28:15
+X:29:15
 W:60:0:0:8000
 C:0:0:0:0
 F:ACTIVATE
 
 N:220:Ì¥ÏǤÎ
 E:of fascination
-X:28:15
+X:29:15
 W:40:0:0:2000
 C:0:0:0:0
 F:ACTIVATE
 
 N:221:Ǧ¤Ó¤Î
 E:of Stealth
-X:28:10
+X:29:10
 W:0:0:0:500
 C:0:0:0:0
 F:STEALTH
 
 N:222:Ä·Ìö¤Î
 E:of Jumping
-X:28:5
+X:29:5
 W:5:0:0:500
 C:0:0:0:0
 F:ACTIVATE
 
 N:223:ž°Ü¤Î
 E:at Will
-X:28:5
+X:29:5
 W:10:0:0:1000
 C:0:0:0:0
 F:ACTIVATE
 
 N:224:¼¡¸µ¤Î
 E:of Dimension Door
-X:28:30
+X:29:30
 W:100:0:0:30000
 C:0:0:0:0
 F:ACTIVATE
 
 N:225:(ËɱҼÔ)
 E:(Defender)
-X:28:25
+X:29:25
 W:0:0:0:20000
 C:0:0:8:4
 F:STEALTH | FEATHER | REGEN | FREE_ACT | SEE_INVIS
 
 N:226:ÂѲФÎ
 E:of Resist Fire
-X:28:5
+X:29:5
 W:0:0:0:500
 C:0:0:0:0
 F:RES_FIRE
 
 N:227:*ÂѲÐ*¤Î
 E:of *Resist* Fire
-X:28:15
+X:29:15
 W:80:0:0:5000
 C:0:0:0:0
 F:RES_FIRE | ACTIVATE
 
 N:228:ÂÑÎä¤Î
 E:of Resist Cold
-X:28:5
+X:29:5
 W:0:0:0:500
 C:0:0:0:0
 F:RES_COLD
 
 N:229:*ÂÑÎä*¤Î
 E:of *Resist* Cold
-X:28:15
+X:29:15
 W:80:0:0:5000
 C:0:0:0:0
 F:RES_COLD | ACTIVATE
 
 N:230:ÂÑÅŤÎ
 E:of Resist Elec
-X:28:5
+X:29:5
 W:0:0:0:500
 C:0:0:0:0
 F:RES_ELEC
 
 N:231:*ÂÑÅÅ*¤Î
 E:of *Resist* Elec
-X:28:15
+X:29:15
 W:80:0:0:5000
 C:0:0:0:0
 F:RES_ELEC | ACTIVATE
 
 N:232:ÂÑ»À¤Î
 E:of Resist Acid
-X:28:5
+X:29:5
 W:0:0:0:500
 C:0:0:0:0
 F:RES_ACID
 
 N:233:*ÂÑ»À*¤Î
 E:of *Resist* Acid
-X:28:15
+X:29:15
 W:80:0:0:5000
 C:0:0:0:0
 F:RES_ACID | ACTIVATE
 
 N:234:ÉâÍ·¤Î
 E:of Levitation
-X:28:5
+X:29:5
 W:0:0:0:1000
 C:0:0:0:0
 F:FEATHER
 
 N:235:Âç
 E:of High Rank
-X:28:15
+X:29:15
 W:0:0:0:10000
 C:0:0:5:5
 F:RES_BLIND | RES_CONF
 
 N:236:´¶ÃΤÎ
 E:of Detection
-X:28:20
+X:29:20
 W:0:0:0:2000
 C:0:0:0:3
 F:SEARCH | ACTIVATE
 
 N:237:¶ò¼Ô¤Î
 E:of Naivety
-X:26:0
-W:30:0:0:0
+X:27:0
+W:29:0:0:0
 C:0:0:0:3
 F:WIS | CHR | CURSED | HEAVY_CURSE
+
index 81735e5..e64e45e 100644 (file)
 #define INVEN_FEET      35
 
 /*
+ * used for get_random_ego()
+ */
+#define INVEN_AMMO     23
+
+/*
  * Total number of inventory slots (hard-coded).
  */
 #define INVEN_TOTAL     36
 #define EGO_KILL_ANIMAL         88
 #define EGO_KILL_EVIL           89
 #define EGO_KILL_UNDEAD         90
-#define EGO_KILL_DEMON          83
-#define EGO_KILL_ORC            84
-#define EGO_KILL_TROLL          85
-#define EGO_KILL_GIANT          86
+#define EGO_KILL_DEMON          91
+#define EGO_KILL_ORC            92
+#define EGO_KILL_TROLL          93
+#define EGO_KILL_GIANT          94
 #define EGO_KILL_DRAGON         95
 #define EGO_VAMPIRIC            96
 #define EGO_PRISM               97
index d84e3e5..78c7508 100644 (file)
@@ -2170,6 +2170,46 @@ static bool make_artifact(object_type *o_ptr)
 
 
 /*
+ *  Choose random ego type
+ */
+static byte get_random_ego(byte slot, bool good, int level)
+{
+       int i, value;
+       ego_item_type *e_ptr;
+
+       long total = 0L;
+       
+       for (i = 1; i < max_e_idx; i++)
+       {
+               e_ptr = &e_info[i];
+               
+               if (e_ptr->slot == slot && level >= e_ptr->level 
+                   && ((good && e_ptr->rating) || (!good && !e_ptr->rating)) )
+               {
+                       if (e_ptr->rarity)
+                               total += (240 / e_ptr->rarity);
+               }
+       }
+
+       value = randint(total);
+
+       for (i = 1; i < max_e_idx; i++)
+       {
+               e_ptr = &e_info[i];
+               
+               if (e_ptr->slot == slot  && level >= e_ptr->level
+                   && ((good && e_ptr->rating) || (!good && !e_ptr->rating)) )
+               {
+                       if (e_ptr->rarity)
+                               value -= (240 / e_ptr->rarity);
+                       if (value <= 0L) break;
+               }
+       }
+       return (byte)i;
+}
+
+
+/*
  * Apply magic to an item known to be a "weapon"
  *
  * Hack -- note special base damage dice boosting
@@ -2269,247 +2309,98 @@ static void a_m_aux_1(object_type *o_ptr, int level, int power)
                        /* Very Good */
                        if (power > 1)
                        {
-                               /* Roll for an ego-item */
-                               switch (randint((o_ptr->tval == TV_POLEARM) ? 42 : 44))
+                               if (one_in_((o_ptr->tval == TV_POLEARM) ? 42 : 44))
                                {
-                                       case 1:
-                                       {
-                                               o_ptr->name2 = EGO_HA;
-
-                                               if ((randint(4) == 1) && (level > 40))
-                                               {
-                                                       o_ptr->art_flags1 |= TR1_BLOWS;
-                                               }
-                                               break;
-                                       }
-
-                                       case 2:
-                                       {
-                                               o_ptr->name2 = EGO_DF;
-                                               if (randint(3) == 1)
-                                                       o_ptr->art_flags2 |= TR2_RES_POIS;
-                                               random_resistance(o_ptr, FALSE, randint(22)+16);
-                                               break;
-                                       }
-
-                                       case 3:
-                                       {
-                                               o_ptr->name2 = EGO_BRAND_ACID;
-                                               break;
-                                       }
-
-                                       case 4:
-                                       {
-                                               o_ptr->name2 = EGO_BRAND_ELEC;
-                                               break;
-                                       }
-
-                                       case 5:
-                                       {
-                                               o_ptr->name2 = EGO_BRAND_FIRE;
-                                               break;
-                                       }
-
-                                       case 6:
-                                       {
-                                               o_ptr->name2 = EGO_BRAND_COLD;
-                                               break;
-                                       }
-
-                                       case 7: case 8:
-                                       {
-                                               o_ptr->name2 = EGO_SLAY_ANIMAL;
-                                               if (rand_int(100) < 20)
-                                               {
-                                                       o_ptr->name2 = EGO_KILL_ANIMAL;
-                                               }
-                                               break;
-                                       }
-
-                                       case 9: case 10:
-                                       {
-                                               o_ptr->name2 = EGO_SLAY_DRAGON;
-                                               random_resistance(o_ptr, FALSE, randint(12) + 4);
-                                               if (rand_int(100) < 20)
-                                               {
-                                                       if (randint(3) == 1) o_ptr->art_flags2 |= TR2_RES_POIS;
-                                                       random_resistance(o_ptr, FALSE, randint(14) + 4);
-                                                       o_ptr->name2 = EGO_KILL_DRAGON;
-                                               }
-                                               break;
-                                       }
-
-                                       case 11: case 12:
-                                       {
-                                               o_ptr->name2 = EGO_SLAY_EVIL;
-                                               if (rand_int(100) < 20)
-                                               {
-                                                       o_ptr->name2 = EGO_KILL_EVIL;
-                                               }
-                                               break;
-                                       }
-
-                                       case 13: case 14:
-                                       {
-                                               o_ptr->name2 = EGO_SLAY_UNDEAD;
-                                               if (rand_int(100) < 20)
-                                               {
-                                                       o_ptr->name2 = EGO_KILL_UNDEAD;
-                                               }
-                                               break;
-                                       }
-
-                                       case 15: case 16: case 17:
-                                       {
-                                               o_ptr->name2 = EGO_SLAY_ORC;
-                                               if (rand_int(100) < 20)
-                                               {
-                                                       o_ptr->name2 = EGO_KILL_ORC;
-                                               }
-                                               break;
-                                       }
-
-                                       case 18: case 19: case 20:
-                                       {
-                                               o_ptr->name2 = EGO_SLAY_TROLL;
-                                               if (rand_int(100) < 20)
-                                               {
-                                                       o_ptr->name2 = EGO_KILL_TROLL;
-                                               }
-                                               break;
-                                       }
-
-                                       case 21: case 22: case 23:
-                                       {
-                                               o_ptr->name2 = EGO_SLAY_GIANT;
-                                               if (rand_int(100) < 20)
-                                               {
-                                                       o_ptr->name2 = EGO_KILL_GIANT;
-                                               }
-                                               break;
-                                       }
-
-                                       case 24: case 25:
-                                       {
-                                               o_ptr->name2 = EGO_SLAY_DEMON;
-                                               if (rand_int(100) < 20)
-                                               {
-                                                       o_ptr->name2 = EGO_KILL_DEMON;
-                                               }
-                                               break;
-                                       }
-
-                                       case 26:
-                                       {
-                                               o_ptr->name2 = EGO_PRISM;
-                                               break;
-                                       }
-
-                                       case 27:
-                                       {
-                                               o_ptr->name2 = EGO_WEST;
-                                               if (randint(3) == 1) o_ptr->art_flags2 |= TR2_RES_FEAR;
-                                               break;
-                                       }
-
-                                       case 28:
-                                       {
-                                               o_ptr->name2 = EGO_BLESS_BLADE;
-                                               break;
-                                       }
-
-                                       case 29: case 30:
-                                       {
-                                               o_ptr->name2 = EGO_ATTACKS;
-                                               break;
-                                       }
+                                       create_artifact(o_ptr, FALSE);
+                                       break;
+                               }
+                               while (1)
+                               {
+                                       /* Roll for an ego-item */
+                                       o_ptr->name2 = get_random_ego(INVEN_RARM, TRUE, level);
+                                       if (o_ptr->name2 == EGO_SHARPNESS && o_ptr->tval != TV_SWORD)
+                                               continue;
+                                       if (o_ptr->name2 == EGO_EARTHQUAKES && o_ptr->tval != TV_HAFTED)
+                                               continue;
+                                       break;
+                               }
 
-                                       case 31: case 32:
-                                       {
-                                               o_ptr->name2 = EGO_VAMPIRIC;
-                                               break;
-                                       }
-                                       case 33:
-                                       {
-                                               o_ptr->name2 = EGO_BRAND_POIS;
-                                               break;
-                                       }
-                                       case 34:
-                                       {
-                                               o_ptr->name2 = EGO_CHAOTIC;
-                                               random_resistance(o_ptr, FALSE, (randint(34) + 4));
-                                               break;
-                                       }
-                                       case 35:
-                                       {
-                                               create_artifact(o_ptr, FALSE);
-                                               break;
-                                       }
-                                       case 36: case 37:
+                               switch (o_ptr->name2)
+                               {
+                               case EGO_HA:
+                                       if ((randint(4) == 1) && (level > 40))
+                                               o_ptr->art_flags1 |= TR1_BLOWS;
+                                       break;
+                               case EGO_DF:
+                                       if (randint(3) == 1)
+                                               o_ptr->art_flags2 |= TR2_RES_POIS;
+                                       random_resistance(o_ptr, FALSE, randint(22)+16);
+                                       break;
+                               case EGO_SLAY_DRAGON:
+                                       random_resistance(o_ptr, FALSE, randint(12) + 4);
+                                       break;
+                               case EGO_KILL_DRAGON:
+                                       random_resistance(o_ptr, FALSE, randint(12) + 4);
+                                       if (randint(3) == 1)
+                                               o_ptr->art_flags2 |= TR2_RES_POIS;
+                                       random_resistance(o_ptr, FALSE, randint(14) + 4);
+                               case EGO_WEST:
+                                       if (randint(3) == 1)
+                                               o_ptr->art_flags2 |= TR2_RES_FEAR;
+                                       break;
+                               case EGO_CHAOTIC:
+                                       random_resistance(o_ptr, FALSE, (randint(34) + 4));
+                                       break;
+                               case EGO_SLAYING_WEAPON:
+                                       if (randint(3) == 1) /* double damage */
+                                               o_ptr->dd *= 2;
+                                       else
                                        {
-                                               o_ptr->name2 = EGO_SLAYING_WEAPON;
-                                               if (randint(3) == 1) /* double damage */
-                                                       o_ptr->dd *= 2;
-                                               else
-                                               {
-                                                       do
-                                                       {
-                                                               o_ptr->dd++;
-                                                       }
-                                                       while (randint(o_ptr->dd) == 1);
-
-                                                       do
-                                                       {
-                                                               o_ptr->ds++;
-                                                       }
-                                                       while (randint(o_ptr->ds) == 1);
-                                               }
-
-                                               if (randint(5) == 1)
+                                               do
                                                {
-                                                       o_ptr->art_flags1 |= TR1_BRAND_POIS;
+                                                       o_ptr->dd++;
                                                }
-                                               if (o_ptr->tval == TV_SWORD && (randint(3) == 1))
+                                               while (randint(o_ptr->dd) == 1);
+                                               
+                                               do
                                                {
-                                                       o_ptr->art_flags1 |= TR1_VORPAL;
+                                                       o_ptr->ds++;
                                                }
-                                               break;
+                                               while (randint(o_ptr->ds) == 1);
                                        }
-                                       case 38: case 39:
+                                       
+                                       if (randint(5) == 1)
                                        {
-                                               o_ptr->name2 = EGO_TRUMP;
-                                               random_resistance(o_ptr, FALSE, (randint(22) + 16));
-                                               if (randint(5) == 1) o_ptr->art_flags1 |= TR1_SLAY_DEMON;
-                                               break;
+                                               o_ptr->art_flags1 |= TR1_BRAND_POIS;
                                        }
-                                       case 40:
+                                       if (o_ptr->tval == TV_SWORD && (randint(3) == 1))
                                        {
-                                               o_ptr->name2 = EGO_PATTERN;
-                                               if (randint(3) == 1) o_ptr->art_flags2 |= TR2_HOLD_LIFE;
-                                               if (randint(3) == 1) o_ptr->art_flags1 |= TR1_DEX;
-                                               if (randint(5) == 1) o_ptr->art_flags2 |= TR2_RES_FEAR;
-                                               random_resistance(o_ptr, FALSE, (randint(22) + 16));
-                                               break;
-                                       }
-                                       case 41: case 42:
-                                       {
-                                               o_ptr->name2 = EGO_FORCE_WEPON;
-                                               break;
-                                       }
-                                       default: /* 2 slots for TV_SWORD and TV_HAFTED */
-                                       {
-                                               if (o_ptr->tval == TV_SWORD)
-                                               {
-                                                       o_ptr->name2 = EGO_SHARPNESS;
-                                                       o_ptr->pval = m_bonus(5, level) + 1;
-                                               }
-                                               else /* Hafted */
-                                               {
-                                                       o_ptr->name2 = EGO_EARTHQUAKES;
-                                                       if ((randint(3) == 1) && (level > 60)) o_ptr->art_flags1 |= TR1_BLOWS;
-                                                       else o_ptr->pval = m_bonus(3, level);
-                                               }
+                                               o_ptr->art_flags1 |= TR1_VORPAL;
                                        }
+                                       break;
+                               case EGO_TRUMP:
+                                       random_resistance(o_ptr, FALSE, (randint(22) + 16));
+                                       if (randint(5) == 1)
+                                               o_ptr->art_flags1 |= TR1_SLAY_DEMON;
+                                       break;
+                               case EGO_PATTERN:
+                                       if (randint(3) == 1)
+                                               o_ptr->art_flags2 |= TR2_HOLD_LIFE;
+                                       if (randint(3) == 1)
+                                               o_ptr->art_flags1 |= TR1_DEX;
+                                       if (randint(5) == 1)
+                                               o_ptr->art_flags2 |= TR2_RES_FEAR;
+                                       random_resistance(o_ptr, FALSE, (randint(22) + 16));
+                                       break;
+                               case EGO_SHARPNESS:
+                                       o_ptr->pval = m_bonus(5, level) + 1;
+                                       break;
+                               case EGO_EARTHQUAKES:
+                                       if ((randint(3) == 1) && (level > 60))
+                                               o_ptr->art_flags1 |= TR1_BLOWS;
+                                       else
+                                               o_ptr->pval = m_bonus(3, level);
+                                       break;
                                }
 
                                if (!o_ptr->art_name)
@@ -2528,8 +2419,12 @@ static void a_m_aux_1(object_type *o_ptr, int level, int power)
                                /* Roll for ego-item */
                                if (rand_int(MAX_DEPTH) < level)
                                {
-                                       o_ptr->name2 = EGO_MORGUL;
-                                       if (randint(6) == 1) o_ptr->art_flags3 |= TR3_TY_CURSE;
+                                       o_ptr->name2 = get_random_ego(INVEN_RARM, FALSE, level);
+                                       switch (o_ptr->name2)
+                                       {
+                                       case EGO_MORGUL:
+                                               if (one_in_(6)) o_ptr->art_flags3 |= TR3_TY_CURSE;
+                                       }
                                }
                        }
 
@@ -2542,39 +2437,18 @@ static void a_m_aux_1(object_type *o_ptr, int level, int power)
                        /* Very good */
                        if (power > 1)
                        {
-                               /* Roll for ego-item */
-                               switch (randint(21))
+                               if (one_in_(21))
                                {
-                                       case 1: case 11:
-                                       {
-                                               o_ptr->name2 = EGO_EXTRA_MIGHT;
-                                               random_resistance(o_ptr, FALSE, (randint(34) + 4));
-                                               break;
-                                       }
-
-                                       case 2: case 12:
-                                       {
-                                               o_ptr->name2 = EGO_EXTRA_SHOTS;
-                                               break;
-                                       }
-
-                                       case 3: case 4: case 5: case 6:
-                                       case 13: case 14: case 15: case 16:
-                                       {
-                                               o_ptr->name2 = EGO_VELOCITY;
-                                               break;
-                                       }
+                                       create_artifact(o_ptr, FALSE);
+                                       break;
+                               }
+                               o_ptr->name2 = get_random_ego(INVEN_BOW, TRUE, level);
 
-                                       case 7: case 8: case 9: case 10:
-                                       case 17: case 18: case 19: case 20:
-                                       {
-                                               o_ptr->name2 = EGO_ACCURACY;
-                                               break;
-                                       }
-                                       default:
-                                       {
-                                               create_artifact(o_ptr, FALSE);
-                                       }
+                               switch (o_ptr->name2)
+                               {
+                               case EGO_EXTRA_MIGHT:
+                                       random_resistance(o_ptr, FALSE, rand_range(5, 38));
+                                       break;
                                }
                        }
 
@@ -2589,57 +2463,13 @@ static void a_m_aux_1(object_type *o_ptr, int level, int power)
                        /* Very good */
                        if (power > 1)
                        {
-                               /* Roll for ego-item */
-                               switch (randint(12))
-                               {
-                                       case 1: case 2: case 3:
-                                       {
-                                               o_ptr->name2 = EGO_WOUNDING;
-                                               break;
-                                       }
-
-                                       case 4:
-                                       {
-                                               o_ptr->name2 = EGO_FLAME;
-                                               break;
-                                       }
-
-                                       case 5:
-                                       {
-                                               o_ptr->name2 = EGO_FROST;
-                                               break;
-                                       }
-
-                                       case 6: case 7:
-                                       {
-                                               o_ptr->name2 = EGO_HURT_ANIMAL;
-                                               break;
-                                       }
-
-                                       case 8: case 9:
-                                       {
-                                               o_ptr->name2 = EGO_HURT_EVIL;
-                                               break;
-                                       }
-
-                                       case 10:
-                                       {
-                                               o_ptr->name2 = EGO_HURT_DRAGON;
-                                               break;
-                                       }
+                               o_ptr->name2 = get_random_ego(INVEN_AMMO, TRUE, level);
 
-                                       case 11:
-                                       {
-                                               o_ptr->name2 = EGO_LIGHTNING_BOLT;
-                                               break;
-                                       }
-
-                                       case 12:
-                                       {
-                                               o_ptr->name2 = EGO_SLAYING_BOLT;
-                                               o_ptr->dd++;
-                                               break;
-                                       }
+                               switch (o_ptr->name2)
+                               {
+                               case EGO_SLAYING_BOLT:
+                                       o_ptr->dd++;
+                                       break;
                                }
 
                                /* Hack -- super-charge the damage dice */
@@ -2655,7 +2485,7 @@ static void a_m_aux_1(object_type *o_ptr, int level, int power)
                                /* Roll for ego-item */
                                if (rand_int(MAX_DEPTH) < level)
                                {
-                                       o_ptr->name2 = EGO_BACKBITING;
+                                       o_ptr->name2 = get_random_ego(INVEN_AMMO, FALSE, level);
                                }
                        }
 
@@ -2766,57 +2596,41 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                        break;
                                }
 
-                               /* Roll for ego-item */
-                               switch ((o_ptr->tval == TV_HARD_ARMOR) ? randint(21) : randint(19))
+                               if (one_in_((o_ptr->tval == TV_HARD_ARMOR) ? 21 : 19))
                                {
-                                       case 1: case 2: case 3:
-                                       {
-                                               o_ptr->name2 = EGO_RESIST_ACID;
-                                               break;
-                                       }
-
-                                       case 4: case 5: case 6:
-                                       {
-                                               o_ptr->name2 = EGO_RESIST_ELEC;
-                                               break;
-                                       }
+                                       create_artifact(o_ptr, FALSE);
+                                       break;
+                               }
 
-                                       case 7: case 8: case 9: case 10:
-                                       {
-                                               o_ptr->name2 = EGO_RESIST_FIRE;
-                                               break;
-                                       }
+                               while (1)
+                               {
+                                       bool okay_flag = TRUE;
 
-                                       case 11: case 12: case 13: case 14:
-                                       {
-                                               o_ptr->name2 = EGO_RESIST_COLD;
-                                               break;
-                                       }
+                                       o_ptr->name2 = get_random_ego(INVEN_BODY, TRUE, level);
 
-                                       case 15: case 16:
+                                       switch (o_ptr->name2)
                                        {
-                                               o_ptr->name2 = EGO_RESISTANCE;
-                                               if (randint(4) == 1) o_ptr->art_flags2 |= TR2_RES_POIS;
+                                       case EGO_RESISTANCE:
+                                               if (one_in_(4))
+                                                       o_ptr->art_flags2 |= TR2_RES_POIS;
                                                random_resistance(o_ptr, FALSE, (randint(22) + 16));
                                                break;
+                                       case EGO_DWARVEN:
+                                               if (o_ptr->tval != TV_HARD_ARMOR)
+                                               {
+                                                       okay_flag = FALSE;
+                                                       break;
+                                               }
+                                               else
+                                               {
+                                                       if (randint(4) == 1)
+                                                               o_ptr->art_flags1 |= TR1_CON;
+                                                       break;
+                                               }
                                        }
 
-                                       case 17: case 18:
-                                       {
-                                               o_ptr->name2 = EGO_ELVENKIND;
-                                               break;
-                                       }
-
-                                       case 19:
-                                       {
-                                               create_artifact(o_ptr, FALSE);
-                                       }
-                                       default:
-                                       {
-                                               o_ptr->name2 = EGO_DWARVEN;
-                                               if (randint(4) == 1) o_ptr->art_flags1 |= TR1_CON;
+                                       if (okay_flag)
                                                break;
-                                       }
                                }
                        }
 
@@ -2834,65 +2648,29 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                /* Mention the item */
                                if (cheat_peek) object_mention(o_ptr);
                                dragon_resist(o_ptr);
-                               if (randint(3) != 1) break;
-                       }
-                       {
-                               /* Very good */
-                               if (power > 1)
-                               {
-                                       /* Roll for ego-item */
-                                       switch (randint(23))
-                                       {
-                                               case 1: case 11:
-                                               {
-                                                       o_ptr->name2 = EGO_ENDURE_ACID;
-                                                       break;
-                                               }
-
-                                               case 2: case 3:
-                                               case 12: case 13: case 14:
-                                               {
-                                                       o_ptr->name2 = EGO_ENDURE_ELEC;
-                                                       break;
-                                               }
-
-                                               case 5: case 6:
-                                               case 15: case 16:
-                                               {
-                                                       o_ptr->name2 = EGO_ENDURE_FIRE;
-                                                       break;
-                                               }
-
-                                               case 7: case 8:
-                                               case 17: case 18: case 19:
-                                               {
-                                                       o_ptr->name2 = EGO_ENDURE_COLD;
-                                                       break;
-                                               }
-
-                                               case 10: case 20:
-                                               {
-                                                       random_resistance(o_ptr, FALSE, (randint(34) + 4));
-                                                       if (randint(4) == 1) o_ptr->art_flags2 |= TR2_RES_POIS;
-                                                       o_ptr->name2 = EGO_ENDURANCE;
-                                                       break;
-                                               }
-                                               case 21: case 22:
-                                               {
-                                                       if (o_ptr->sval != SV_SHIELD_OF_DEFLECTION) o_ptr->name2 = EGO_REFLECTION;
-                                                       break;
-                                               }
-                                               case 4: case 9:
-                                               {
-                                                       o_ptr->name2 = EGO_NIGHT_DAY;
-                                                       break;
-                                               }
+                               if (randint(3) != 1) break;
+                       }
 
-                                               default:
-                                               {
-                                                       create_artifact(o_ptr, FALSE);
-                                               }
-                                       }
+                       /* Very good */
+                       if (power > 1)
+                       {
+                               if (one_in_(23))
+                               {
+                                       create_artifact(o_ptr, FALSE);
+                                       break;
+                               }
+                               o_ptr->name2 = get_random_ego(INVEN_LARM, TRUE, level);
+                               
+                               switch (o_ptr->name2)
+                               {
+                               case EGO_ENDURANCE:
+                                       random_resistance(o_ptr, FALSE, (randint(34) + 4));
+                                       if (one_in_(4)) o_ptr->art_flags2 |= TR2_RES_POIS;
+                                       break;
+                               case EGO_REFLECTION:
+                                       if (o_ptr->sval == SV_SHIELD_OF_DEFLECTION)
+                                               o_ptr->name2 = 0;
+                                       break;
                                }
                        }
                        break;
@@ -2910,76 +2688,28 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                dragon_resist(o_ptr);
                                if (randint(3) != 1) break;
                        }
+                       if (power > 1)
                        {
-                               /* Very good */
-                               if (power > 1)
+                               if (one_in_(20))
                                {
-                                       if (randint(20) == 1)
-                                               create_artifact(o_ptr, FALSE);
-                                       else
-                                       {
-                                               /* Roll for ego-item */
-                                               switch (randint(28))
-                                               {
-                                                       case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10:
-                                                       {
-                                                               o_ptr->name2 = EGO_FREE_ACTION;
-                                                               break;
-                                                       }
-
-                                                       case 11: case 12: case 13: case 14: case 15: case 16:
-                                                       {
-                                                               o_ptr->name2 = EGO_SLAYING;
-                                                               break;
-                                                       }
-
-                                                       case 17: case 18: case 19: case 20: case 21:
-                                                       {
-                                                               o_ptr->name2 = EGO_MAGIC_MASTERY;
-                                                               break;
-                                                       }
-
-                                                       case 22: case 23: case 24: case 25:
-                                                       {
-                                                               o_ptr->name2 = EGO_AGILITY;
-                                                               break;
-                                                       }
-
-                                                       case 26: case 27:
-                                                       {
-                                                               o_ptr->name2 = EGO_POWER;
-                                                               random_resistance(o_ptr, FALSE, (randint(22) + 16));
-                                                               break;
-                                                       }
-
-                                                       case 28:
-                                                       {
-                                                               o_ptr->name2 = EGO_2HAND;
-                                                               break;
-                                                       }
-                                               }
-                                       }
+                                       create_artifact(o_ptr, FALSE);
+                                       break;
                                }
+                               o_ptr->name2 = get_random_ego(INVEN_HANDS, TRUE, level);
 
-                               /* Very cursed */
-                               else if (power < -1)
+                               switch (o_ptr->name2)
                                {
-                                       /* Roll for ego-item */
-                                       switch (randint(2))
-                                       {
-                                               case 1:
-                                               {
-                                                       o_ptr->name2 = EGO_CLUMSINESS;
-                                                       break;
-                                               }
-                                               default:
-                                               {
-                                                       o_ptr->name2 = EGO_WEAKNESS;
-                                                       break;
-                                               }
-                                       }
+                               case EGO_POWER:
+                                       random_resistance(o_ptr, FALSE, (randint(22) + 16));
+                                       break;
                                }
                        }
+                       
+                       /* Very cursed */
+                       else if (power < -1)
+                       {
+                               o_ptr->name2 = get_random_ego(INVEN_HANDS, FALSE, level);
+                       }
 
                        break;
                }
@@ -2996,80 +2726,31 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                dragon_resist(o_ptr);
                                if (randint(3) != 1) break;
                        }
+                       /* Very good */
+                       if (power > 1)
                        {
-                               /* Very good */
-                               if (power > 1)
+                               if (one_in_(20))
                                {
-                                       if (randint(20) == 1)
-                                               create_artifact(o_ptr, FALSE);
-                                       else
-                                       {
-                                               /* Roll for ego-item */
-                                               switch (randint(24))
-                                               {
-                                                       case 1:
-                                                       {
-                                                               o_ptr->name2 = EGO_SPEED;
-                                                               break;
-                                                       }
-
-                                                       case 2: case 3: case 4: case 5:
-                                                       {
-                                                               o_ptr->name2 = EGO_MOTION;
-                                                               break;
-                                                       }
-
-                                                       case 6: case 7: case 8: case 9:
-                                                       case 10: case 11:
-                                                       {
-                                                               o_ptr->name2 = EGO_QUIET;
-                                                               break;
-                                                       }
-
-                                                       case 12: case 13: case 14: case 15:
-                                                       {
-                                                               o_ptr->name2 = EGO_JUMP;
-                                                               break;
-                                                       }
-
-                                                       default:
-                                                       {
-                                                               o_ptr->name2 = EGO_SLOW_DESCENT;
-
-                                                               if (randint(2) == 1)
-                                                               {
-                                                                       random_resistance(o_ptr, FALSE, (randint(22) + 16));
-                                                               }
-                                                               break;
-                                                       }
-                                               }
-                                       }
+                                       create_artifact(o_ptr, FALSE);
+                                       break;
                                }
+                               o_ptr->name2 = get_random_ego(INVEN_FEET, TRUE, level);
 
-                               /* Very cursed */
-                               else if (power < -1)
+                               switch (o_ptr->name2)
                                {
-                                       /* Roll for ego-item */
-                                       switch (randint(3))
+                               case EGO_SLOW_DESCENT:
+                                       if (one_in_(2))
                                        {
-                                               case 1:
-                                               {
-                                                       o_ptr->name2 = EGO_NOISE;
-                                                       break;
-                                               }
-                                               case 2:
-                                               {
-                                                       o_ptr->name2 = EGO_SLOWNESS;
-                                                       break;
-                                               }
-                                               case 3:
-                                               {
-                                                       o_ptr->name2 = EGO_ANNOYANCE;
-                                                       break;
-                                               }
+                                               random_resistance(o_ptr, FALSE, (randint(22) + 16));
                                        }
+                                       break;
                                }
                        }
+                       /* Very cursed */
+                       else if (power < -1)
+                       {
+                               o_ptr->name2 = get_random_ego(INVEN_FEET, FALSE, level);
+                       }
 
                        break;
                }
@@ -3079,83 +2760,46 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                        /* Very good */
                        if (power > 1)
                        {
-                               if (randint(20) == 1)
-                                       create_artifact(o_ptr, FALSE);
-                               else
+                               if (one_in_(20))
                                {
-                                       /* Roll for ego-item */
-                                       switch (randint(8))
-                                       {
-                                               case 1:
-                                               {
-                                                       o_ptr->name2 = EGO_MAGI;
-                                                       random_resistance(o_ptr, FALSE, (randint(22) + 16));
-                                                       break;
-                                               }
-                                               case 2:
-                                               {
-                                                       o_ptr->name2 = EGO_MIGHT;
-                                                       random_resistance(o_ptr, FALSE, (randint(22) + 16));
-                                                       break;
-                                               }
-                                               case 3:
-                                               {
-                                                       o_ptr->name2 = EGO_TELEPATHY;
-                                                       break;
-                                               }
-                                               case 4:
-                                               {
-                                                       o_ptr->name2 = EGO_REGENERATION;
-                                                       break;
-                                               }
-                                               case 5: case 6:
-                                               {
-                                                       o_ptr->name2 = EGO_LORDLINESS;
-                                                       random_resistance(o_ptr, FALSE, (randint(22) + 16));
-                                                       break;
-                                               }
-                                               default:
-                                               {
-                                                       o_ptr->name2 = EGO_SEEING;
-                                                       if (randint(3) == 1) o_ptr->art_flags3 |= TR3_TELEPATHY;
-                                                       break;
-                                               }
-                                       }
+                                       create_artifact(o_ptr, FALSE);
+                                       break;
                                }
-                       }
-
-                       /* Very cursed */
-                       else if (power < -1)
-                       {
-                               /* Roll for ego-item */
-                               switch (randint(7))
+                               while (1)
                                {
-                                       case 1: case 2:
+                                       bool ok_flag = TRUE;
+                                       o_ptr->name2 = get_random_ego(INVEN_HEAD, TRUE, level);
+
+                                       switch (o_ptr->name2)
                                        {
-                                               o_ptr->name2 = EGO_STUPIDITY;
+                                       case EGO_MAGI:
+                                               random_resistance(o_ptr, FALSE, (randint(22) + 16));
                                                break;
-                                       }
-                                       case 3: case 4:
-                                       {
-                                               o_ptr->name2 = EGO_NAIVETY;
+                                       case EGO_MIGHT:
+                                               random_resistance(o_ptr, FALSE, (randint(22) + 16));
                                                break;
-                                       }
-                                       case 5:
-                                       {
-                                               o_ptr->name2 = EGO_UGLINESS;
+                                       case EGO_TELEPATHY:
+                                       case EGO_REGENERATION:
                                                break;
-                                       }
-                                       case 6:
-                                       {
-                                               o_ptr->name2 = EGO_SICKLINESS;
+                                       case EGO_LORDLINESS:
+                                               random_resistance(o_ptr, FALSE, (randint(22) + 16));
                                                break;
-                                       }
-                                       case 7:
-                                       {
-                                               o_ptr->name2 = EGO_TELEPORTATION;
+                                       case EGO_SEEING:
+                                               if (one_in_(3)) o_ptr->art_flags3 |= TR3_TELEPATHY;
                                                break;
+                                       default:/* not existing crown (wisdom,lite, etc...) */
+                                               ok_flag = FALSE;
                                        }
+                                       if (ok_flag)
+                                               break; /* while (1) */
                                }
+                               break;
+                       }
+
+                       /* Very cursed */
+                       else if (power < -1)
+                       {
+                               o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE, level);
                        }
 
                        break;
@@ -3173,90 +2817,43 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                                dragon_resist(o_ptr);
                                if (randint(3) != 1) break;
                        }
+
+                       /* Very good */
+                       if (power > 1)
                        {
-                               /* Very good */
-                               if (power > 1)
+                               if (one_in_(20))
                                {
-                                       if (randint(20) == 1)
-                                               create_artifact(o_ptr, FALSE);
-                                       else
-                                       {
-                                               /* Roll for ego-item */
-                                               switch (randint(24))
-                                               {
-                                                       case 1: case 2: case 3:
-                                                       {
-                                                               o_ptr->name2 = EGO_INTELLIGENCE;
-                                                               break;
-                                                       }
-                                                       case 4: case 5: case 6:
-                                                       {
-                                                               o_ptr->name2 = EGO_WISDOM;
-                                                               break;
-                                                       }
-                                                       case 7: case 8: case 9:
-                                                       {
-                                                               o_ptr->name2 = EGO_BEAUTY;
-                                                               break;
-                                                       }
-                                                       case 10: case 11: case 12:
-                                                       {
-                                                               o_ptr->name2 = EGO_SEEING;
-                                                               if (randint(7) == 1) o_ptr->art_flags3 |= TR3_TELEPATHY;
-                                                               break;
-                                                       }
-                                                       case 13: case 14: case 15:
-                                                       {
-                                                               o_ptr->name2 = EGO_LITE;
-                                                               break;
-                                                       }
-                                                       case 16: case 17: case 18:
-                                                       {
-                                                               o_ptr->name2 = EGO_DARK;
-                                                               break;
-                                                       }
-                                                       default:
-                                                       {
-                                                               o_ptr->name2 = EGO_INFRAVISION;
-                                                               break;
-                                                       }
-                                               }
-                                       }
+                                       create_artifact(o_ptr, FALSE);
+                                       break;
                                }
-
-                               /* Very cursed */
-                               else if (power < -1)
+                               while (1)
                                {
-                                       /* Roll for ego-item */
-                                       switch (randint(7))
+                                       bool ok_flag = TRUE;
+                                       o_ptr->name2 = get_random_ego(INVEN_HEAD, TRUE, level);
+
+                                       switch (o_ptr->name2)
                                        {
-                                               case 1: case 2:
-                                               {
-                                                       o_ptr->name2 = EGO_STUPIDITY;
-                                                       break;
-                                               }
-                                               case 3: case 4:
-                                               {
-                                                       o_ptr->name2 = EGO_NAIVETY;
-                                                       break;
-                                               }
-                                               case 5:
-                                               {
-                                                       o_ptr->name2 = EGO_UGLINESS;
-                                                       break;
-                                               }
-                                               case 6:
-                                               {
-                                                       o_ptr->name2 = EGO_SICKLINESS;
-                                                       break;
-                                               }
-                                               case 7:
-                                               {
-                                                       o_ptr->name2 = EGO_TELEPORTATION;
-                                                       break;
-                                               }
+                                       case EGO_INTELLIGENCE:
+                                       case EGO_WISDOM:
+                                       case EGO_BEAUTY:
+                                       case EGO_LITE:
+                                       case EGO_INFRAVISION:
+                                               break;
+                                       case EGO_SEEING:
+                                               if (one_in_(7)) o_ptr->art_flags3 |= TR3_TELEPATHY;
+                                               break;
+                                       default:/* not existing helm (Magi, Might, etc...)*/
+                                               ok_flag = FALSE;
                                        }
+                                       if (ok_flag)
+                                               break; /* while (1) */
                                }
+                               break;
+                       }
+                       /* Very cursed */
+                       else if (power < -1)
+                       {
+                               o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE, level);
                        }
                        break;
                }
@@ -3269,77 +2866,27 @@ static void a_m_aux_2(object_type *o_ptr, int level, int power)
                        /* Very good */
                        if (power > 1)
                        {
-                               if (randint(20) == 1)
+                               if (one_in_(20))
+                               {
                                        create_artifact(o_ptr, FALSE);
-                               else
+                                       break;
+                               }
+                               o_ptr->name2 = get_random_ego(INVEN_OUTER, TRUE, level);
+
+                               switch (o_ptr->name2)
                                {
-                                       /* Roll for ego-item */
-                                       switch (randint(20))
-                                       {
-                                               case 1: case 2: case 3: case 4:
-                                               case 5: case 6: case 7: case 8:
-                                               {
-                                                       o_ptr->name2 = EGO_PROTECTION;
-                                                       break;
-                                               }
-                                               case 9: case 10: case 11: case 12:
-                                               case 13: case 14: case 15:
-                                               {
-                                                       o_ptr->name2 = EGO_STEALTH;
-                                                       break;
-                                               }
-                                               case 16:
-                                               {
-                                                       o_ptr->name2 = EGO_BAT;
-                                                       o_ptr->to_d -= 6;
-                                                       o_ptr->to_h -= 6;
-                                                       break;
-                                               }
-                                               case 17:
-                                               {
-                                                       o_ptr->name2 = EGO_AMAN;
-                                                       break;
-                                               }
-                                               case 18:
-                                               {
-                                                       o_ptr->name2 = EGO_AURA_ELEC;
-                                                       break;
-                                               }
-                                               case 19:
-                                               {
-                                                       o_ptr->name2 = EGO_AURA_COLD;
-                                                       break;
-                                               }
-                                               default:
-                                               {
-                                                       o_ptr->name2 = EGO_AURA_FIRE;
-                                               }
-                                       }
+                               case EGO_BAT:
+                                       o_ptr->to_d -= 6;
+                                       o_ptr->to_h -= 6;
+                                       break;
                                }
+
                        }
 
                        /* Very cursed */
                        else if (power < -1)
                        {
-                               /* Choose some damage */
-                               switch (randint(3))
-                               {
-                                       case 1:
-                                       {
-                                               o_ptr->name2 = EGO_IRRITATION;
-                                               break;
-                                       }
-                                       case 2:
-                                       {
-                                               o_ptr->name2 = EGO_VULNERABILITY;
-                                               break;
-                                       }
-                                       case 3:
-                                       {
-                                               o_ptr->name2 = EGO_ENVELOPING;
-                                               break;
-                                       }
-                               }
+                               o_ptr->name2 = get_random_ego(INVEN_OUTER, FALSE, level);
                        }
 
                        break;
@@ -4225,34 +3772,33 @@ static void a_m_aux_4(object_type *o_ptr, int level, int power)
                        {
                                while (!o_ptr->name2)
                                {
-                                       switch(randint(13))
+                                       while (1)
                                        {
-                                       case 1: case 2: case 3: case 4:
-                                               o_ptr->name2 = EGO_LITE_SHINE;
-                                               break;
-                                       case 5:
-                                               o_ptr->name2 = EGO_LITE_ILLUMINATION;
-                                               break;
-                                       case 6:
-                                               o_ptr->name2 = EGO_LITE_AURA_FIRE;
-                                               break;
-                                       case 7: case 8:
-                                               o_ptr->name2 = EGO_LITE_INFRA;
-                                               break;
-                                       case 9: case 10: case 11: case 12:
-                                               if (o_ptr->sval == SV_LITE_FEANOR) break;
-                                               o_ptr->name2 = EGO_LITE_LONG;
-                                               break;
-                                       case 13:
-                                               o_ptr->name2 = EGO_LITE_EYE;
-                                               break;
+                                               bool okay_flag = TRUE;
+
+                                               o_ptr->name2 = get_random_ego(INVEN_LITE, TRUE, level);
+
+                                               switch (o_ptr->name2)
+                                               {
+                                               case EGO_LITE_LONG:
+                                                       if (o_ptr->sval == SV_LITE_FEANOR)
+                                                               okay_flag = FALSE;
+                                               }
+                                               if (okay_flag)
+                                                       break;
                                        }
                                }
                        }
                        else if (power == -2)
                        {
-                               o_ptr->name2 = EGO_LITE_DARKNESS;
-                               o_ptr->xtra4 = 0;
+                               o_ptr->name2 = get_random_ego(INVEN_LITE, FALSE, level);
+
+                               switch (o_ptr->name2)
+                               {
+                               case EGO_LITE_DARKNESS:
+                                       o_ptr->xtra4 = 0;
+                                       break;
+                               }
                        }
 
                        break;