if (have_flag(flgs, TR_HIDE_TYPE)) total += 0;
if (have_flag(flgs, TR_SHOW_MODS)) total += 0;
if (have_flag(flgs, TR_LEVITATION)) total += 1250;
- if (have_flag(flgs, TR_LITE)) total += 1250;
+ if (have_flag(flgs, TR_LITE_1)) total += 1500;
+ if (have_flag(flgs, TR_LITE_2)) total += 2500;
+ if (have_flag(flgs, TR_LITE_3)) total += 4000;
+ if (have_flag(flgs, TR_LITE_M1)) total -= 1500;
+ if (have_flag(flgs, TR_LITE_M2)) total -= 2500;
+ if (have_flag(flgs, TR_LITE_M3)) total -= 4000;
if (have_flag(flgs, TR_SEE_INVIS)) total += 2000;
if (have_flag(flgs, TR_TELEPATHY)) total += 20000;
if (have_flag(flgs, TR_ESP_ANIMAL)) total += 1000;
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_CALL_ANIMAL)) total -= 12500;
+ if (have_flag(flgs, TR_CALL_DEMON)) total -= 10000;
+ if (have_flag(flgs, TR_CALL_DRAGON)) total -= 10000;
+ if (have_flag(flgs, TR_CALL_UNDEAD)) total -= 10000;
+ if (have_flag(flgs, TR_COWARDICE)) total -= 5000;
+ if (have_flag(flgs, TR_LOW_MELEE)) total -= 5000;
+ if (have_flag(flgs, TR_LOW_AC)) total -= 5000;
+ if (have_flag(flgs, TR_LOW_MAGIC)) total -= 15000;
+ if (have_flag(flgs, TR_FAST_DIGEST)) total -= 10000;
+ if (have_flag(flgs, TR_SLOW_REGEN)) total -= 10000;
if (have_flag(flgs, TR_TELEPORT))
{
if (object_is_cursed(o_ptr))
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)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ one_in_(3) ?
+ add_flag(o_ptr->art_flags, TR_DRAIN_EXP) :
+ one_in_(2) ?
+ add_flag(o_ptr->art_flags, TR_DRAIN_HP) :
+ 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);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_CALL_DEMON);
break;
}
{
case EGO_MORGUL:
if (one_in_(6)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_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);
switch (o_ptr->name2)
{
- case EGO_RESISTANCE:
- if (one_in_(4))
- add_flag(o_ptr->art_flags, TR_RES_POIS);
- break;
- case EGO_ELVENKIND:
- case EGO_URUKISH:
- break;
- case EGO_DWARVEN:
+ case EGO_DWARVEN:
if (o_ptr->tval != TV_HARD_ARMOR)
{
okay_flag = FALSE;
break;
}
- else
- {
- o_ptr->weight = (2 * k_info[o_ptr->k_idx].weight / 3);
- o_ptr->ac = k_info[o_ptr->k_idx].ac + 5;
- break;
- }
- case EGO_DRUID:
+ case EGO_DRUID:
if (o_ptr->tval != TV_SOFT_ARMOR)
{
okay_flag = FALSE;
break;
}
- else
- {
- break;
- }
+ default:
+ break;
}
if (okay_flag)
break;
}
+ switch (o_ptr->name2)
+ {
+ case EGO_RESISTANCE:
+ if (one_in_(4))
+ add_flag(o_ptr->art_flags, TR_RES_POIS);
+ break;
+ case EGO_DWARVEN:
+ o_ptr->weight = (2 * k_info[o_ptr->k_idx].weight / 3);
+ o_ptr->ac = k_info[o_ptr->k_idx].ac + 5;
+ break;
+
+ case EGO_A_DEMON:
+ if(one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ one_in_(3) ?
+ add_flag(o_ptr->art_flags, TR_DRAIN_EXP) :
+ one_in_(2) ?
+ add_flag(o_ptr->art_flags, TR_DRAIN_HP) :
+ add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_CALL_DEMON);
+ break;
+ case EGO_A_MORGUL:
+ if (one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ if (one_in_(9)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ if (one_in_(4)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+ if (one_in_(6)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+ if (one_in_(9)) add_flag(o_ptr->art_flags, TR_NO_MAGIC);
+ if (one_in_(9)) add_flag(o_ptr->art_flags, TR_NO_TELE);
+ break;
+ default:
+ break;
+ }
}
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;
case EGO_MIGHT:
case EGO_REGENERATION:
case EGO_LORDLINESS:
+ case EGO_BASILISK:
break;
case EGO_SEEING:
if (one_in_(3))
/* Very cursed */
else if (power < -1)
- {
- o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE);
+ {
+ while (1)
+ {
+ bool ok_flag = TRUE;
+ o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE);
+
+ switch (o_ptr->name2)
+ {
+ case EGO_ANCIENT_CURSE:
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_MAGIC);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_NO_TELE);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+ break;
+ }
+ if (ok_flag)
+ break; /* while (1) */
+ }
}
break;
switch (o_ptr->name2)
{
- case EGO_INTELLIGENCE:
- case EGO_WISDOM:
- case EGO_BEAUTY:
- case EGO_LITE:
+ case EGO_BRILLIANCE:
case EGO_DARK:
case EGO_INFRAVISION:
+ case EGO_H_PROTECTION:
break;
case EGO_SEEING:
if (one_in_(7))
else add_esp_weak(o_ptr, FALSE);
}
break;
+ case EGO_LITE:
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_LITE_1);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_LITE_2);
+ break;
+ case EGO_H_DEMON:
+ if(one_in_(3)) o_ptr->curse_flags |= (TRC_HEAVY_CURSE);
+ one_in_(3) ?
+ add_flag(o_ptr->art_flags, TR_DRAIN_EXP) :
+ one_in_(2) ?
+ add_flag(o_ptr->art_flags, TR_DRAIN_HP) :
+ add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_AGGRAVATE);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_ADD_L_CURSE);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_ADD_H_CURSE);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_HP);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_MANA);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_TY_CURSE);
+ if (one_in_(5)) add_flag(o_ptr->art_flags, TR_CALL_DEMON);
+ break;
default:/* not existing helm (Magi, Might, etc...)*/
ok_flag = FALSE;
}
/* Very cursed */
else if (power < -1)
{
- o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE);
+ while (1)
+ {
+ bool ok_flag = TRUE;
+ o_ptr->name2 = get_random_ego(INVEN_HEAD, FALSE);
+
+ switch (o_ptr->name2)
+ {
+ case EGO_ANCIENT_CURSE:
+ ok_flag = FALSE;
+ }
+ if (ok_flag)
+ break; /* while (1) */
+ }
}
break;
}
o_ptr->to_d -= 6;
o_ptr->to_h -= 6;
break;
+ case EGO_NAZGUL:
+ o_ptr->to_d -= 3;
+ o_ptr->to_h -= 3;
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_COWARDICE);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_CALL_UNDEAD);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_SLOW_REGEN);
+ if (one_in_(3)) add_flag(o_ptr->art_flags, TR_DRAIN_EXP);
+ break;
}
}
o_ptr->name2 = EGO_RING_REGEN;
break;
case 5: case 6:
- if (have_flag(k_ptr->flags, TR_LITE)) break;
+ if (have_flag(k_ptr->flags, TR_LITE_1)) break;
o_ptr->name2 = EGO_RING_LITE;
break;
case 7: case 8:
if (e_ptr->act_idx) o_ptr->xtra2 = e_ptr->act_idx;
/* Hack -- apply extra penalties if needed */
- if (object_is_cursed(o_ptr) || object_is_broken(o_ptr))
+ if ((object_is_cursed(o_ptr) || object_is_broken(o_ptr)) && !(e_ptr->gen_flags & (TRG_POWERFUL)))
{
/* Hack -- obtain bonuses */
if (e_ptr->max_to_h) o_ptr->to_h -= randint1(e_ptr->max_to_h);
o_ptr->to_a -= randint1(256-e_ptr->max_to_a);
else o_ptr->to_a += randint1(e_ptr->max_to_a);
}
+
+ /* Accuracy ego must have high to_h */
+ if(o_ptr->name2 == EGO_ACCURACY)
+ {
+ while(o_ptr->to_h < o_ptr->to_d + 10)
+ {
+ o_ptr->to_h += 5;
+ o_ptr->to_d -= 5;
+ }
+ o_ptr->to_h = MAX(o_ptr->to_h, 15);
+ }
+
+ /* Accuracy ego must have high to_h */
+ if(o_ptr->name2 == EGO_VELOCITY)
+ {
+ while(o_ptr->to_d < o_ptr->to_h + 10)
+ {
+ o_ptr->to_d += 5;
+ o_ptr->to_h -= 5;
+ }
+ o_ptr->to_d = MAX(o_ptr->to_d, 15);
+ }
+
+ /* Protection ego must have high to_a */
+ if((o_ptr->name2 == EGO_PROTECTION) || (o_ptr->name2 == EGO_S_PROTECTION) || (o_ptr->name2 == EGO_H_PROTECTION))
+ {
+ o_ptr->to_a = MAX(o_ptr->to_a, 15);
+ }
/* Hack -- obtain pval */
if (e_ptr->max_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);
o_ptr->pval = randint1(e_ptr->max_pval);
if (o_ptr->sval == SV_ELVEN_CLOAK) o_ptr->pval += randint1(2);
}
+ else if (o_ptr->name2 == EGO_A_DEMON || o_ptr->name2 == EGO_DRUID || o_ptr->name2 == EGO_OLOG)
+ {
+ o_ptr->pval = randint1(e_ptr->max_pval);
+ }
else
{
o_ptr->pval += randint1(e_ptr->max_pval);
}
+
+
}
if ((o_ptr->name2 == EGO_SPEED) && (lev < 50))
{
{TR_NO_MAGIC, "È¿ËâË¡", 3, TR_NO_MAGIC, 15},
{TR_WARNING, "·Ù¹ð", 3, TR_WARNING, 20},
{TR_LEVITATION, "ÉâÍ·", 3, TR_LEVITATION, 20},
- {TR_LITE, "±Êµ×¸÷¸»", 3, TR_LITE, 15},
+ {TR_LITE_1, "±Êµ×¸÷¸»", 3, TR_LITE_1, 15},
{TR_SEE_INVIS, "²Ä»ëÆ©ÌÀ", 3, TR_SEE_INVIS, 20},
{TR_TELEPATHY, "¥Æ¥ì¥Ñ¥·¡¼", 6, TR_TELEPATHY, 15},
{TR_SLOW_DIGEST, "Ãپò½", 3, TR_SLOW_DIGEST, 15},
{TR_NO_MAGIC, "anti magic", 3, TR_NO_MAGIC, 15},
{TR_WARNING, "warning", 3, TR_WARNING, 20},
{TR_LEVITATION, "levitation", 3, TR_LEVITATION, 20},
- {TR_LITE, "permanent light", 3, TR_LITE, 15},
+ {TR_LITE_1, "permanent light", 3, TR_LITE_1, 15},
{TR_SEE_INVIS, "see invisible", 3, TR_SEE_INVIS, 20},
{TR_TELEPATHY, "telepathy", 6, TR_TELEPATHY, 15},
{TR_SLOW_DIGEST, "slow digestion", 3, TR_SLOW_DIGEST, 15},
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_CALL_ANIMAL)) dec--;
+ if (have_flag(old_flgs, TR_CALL_DEMON)) dec--;
+ if (have_flag(old_flgs, TR_CALL_DRAGON)) dec--;
+ if (have_flag(old_flgs, TR_CALL_UNDEAD)) dec--;
+ if (have_flag(old_flgs, TR_COWARDICE)) dec--;
+ if (have_flag(old_flgs, TR_LOW_MELEE)) dec--;
+ if (have_flag(old_flgs, TR_LOW_AC)) dec--;
+ if (have_flag(old_flgs, TR_LOW_MAGIC)) dec--;
+ if (have_flag(old_flgs, TR_FAST_DIGEST)) dec--;
+ if (have_flag(old_flgs, TR_SLOW_REGEN)) dec--;
if (have_flag(old_flgs, TR_TY_CURSE)) dec--;
-
+
iy = o_ptr->iy;
ix = o_ptr->ix;
next_o_idx = o_ptr->next_o_idx;