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_DRAIN_HP)) total -= 12500;
+ if (have_flag(flgs, TR_DRAIN_MANA)) total -= 12500;
if (have_flag(flgs, TR_TELEPORT))
{
if (object_is_cursed(o_ptr))
void object_copy(object_type *o_ptr, object_type *j_ptr)
{
/* Copy the structure */
- COPY(o_ptr, j_ptr, object_type);
+ (void)COPY(o_ptr, j_ptr, object_type);
}
continue;
if (o_ptr->name2 == EGO_EARTHQUAKES && o_ptr->tval != TV_HAFTED)
continue;
+ if (o_ptr->name2 == EGO_WEIRD && o_ptr->tval != TV_SWORD)
+ continue;
break;
}
if (one_in_(5))
add_flag(o_ptr->art_flags, TR_SLAY_HUMAN);
break;
+ case EGO_DEMON:
+ if (one_in_(3)){
+ add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+ }
+ else if(one_in_(2))
+ {
+ add_flag(o_ptr->art_flags, TR_DRAIN_HP);
+ }
+ else
+ {
+ add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+ }
+
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_CHAOTIC);
+ if (one_in_(4)) add_flag(o_ptr->art_flags, TR_BLOWS);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+ break;
}
if (!o_ptr->art_name)
/* Roll for ego-item */
if (randint0(MAX_DEPTH) < level)
{
- o_ptr->name2 = get_random_ego(INVEN_RARM, FALSE);
+ while(1)
+ {
+ o_ptr->name2 = get_random_ego(INVEN_RARM, FALSE);
+ if (o_ptr->name2 == EGO_WEIRD && o_ptr->tval != TV_SWORD)
+ {
+ continue;
+ }
+ break;
+ }
switch (o_ptr->name2)
{
case EGO_MORGUL:
if (one_in_(6)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ case EGO_WEIRD:
+ if (one_in_(4)) add_flag(o_ptr->art_flags, TR_BRAND_POIS);
+ if (one_in_(4)) add_flag(o_ptr->art_flags, TR_RES_NETHER);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_MAGIC);
+ if (one_in_(6)) add_flag(o_ptr->art_flags, TR_NO_TELE);
+ if (one_in_(6)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ if (one_in_(6)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
}
}
}
add_flag(o_ptr->art_flags, TR_RES_POIS);
break;
case EGO_ELVENKIND:
+ case EGO_URUKISH:
break;
case EGO_DWARVEN:
if (o_ptr->tval != TV_HARD_ARMOR)
{
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))
- add_flag(o_ptr->art_flags, TR_CON);
+ break;
+ }
+ case EGO_DRUID:
+ if (o_ptr->tval != TV_SOFT_ARMOR)
+ {
+ okay_flag = FALSE;
+ break;
+ }
+ else
+ {
break;
}
}
create_artifact(o_ptr, FALSE);
break;
}
- o_ptr->name2 = get_random_ego(INVEN_LARM, TRUE);
+
+ while(1)
+ {
+ o_ptr->name2 = get_random_ego(INVEN_LARM, TRUE);
+ if (o_ptr->sval != SV_SMALL_METAL_SHIELD && o_ptr->sval != SV_LARGE_METAL_SHIELD
+ && o_ptr->name2 == EGO_S_DWARVEN)
+ {
+ continue;
+ }
+ break;
+ }
switch (o_ptr->name2)
{
if (o_ptr->sval == SV_MIRROR_SHIELD)
o_ptr->name2 = 0;
break;
+
+ case EGO_S_DWARVEN:
+ o_ptr->weight = (2 * k_info[o_ptr->k_idx].weight / 3);
+ o_ptr->ac = k_info[o_ptr->k_idx].ac + 3;
+ break;
}
}
break;
if (e_ptr->max_to_a > 127)
o_ptr->to_a -= randint1(256-e_ptr->max_to_a);
else o_ptr->to_a += randint1(e_ptr->max_to_a);
+
+ if((o_ptr->name2 == EGO_PROTECTION) || (o_ptr->name2 == EGO_S_PROTECTION))
+ {
+ o_ptr->to_a = MAX(o_ptr->to_a, 15);
+ }
}
/* Hack -- obtain pval */
o_ptr->pval++;
if ((lev > 60) && one_in_(3) && ((o_ptr->dd*(o_ptr->ds+1)) < 15)) o_ptr->pval++;
}
+ else if (o_ptr->name2 == EGO_DEMON)
+ {
+ o_ptr->curse_flags |= (TRC_CURSED);
+ if(one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ if(have_flag(o_ptr->art_flags, TR_BLOWS))
+ {
+ o_ptr->pval += randint1(2);
+ }
+ else
+ {
+ o_ptr->pval += randint1(e_ptr->max_pval);
+ }
+ }
else if (o_ptr->name2 == EGO_ATTACKS)
{
o_ptr->pval = randint1(e_ptr->max_pval*lev/100+1);
/* Cheat -- describe the item */
if (cheat_peek) object_mention(o_ptr);
-
+
/* Done */
return;
}
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_DRAIN_HP)) dec--;
+ if (have_flag(old_flgs, TR_DRAIN_MANA)) dec--;
if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
iy = o_ptr->iy;