}
}
+/*
+ * Choose one random activation
+ */
+void one_activation(object_type *o_ptr)
+{
+ int type = 0;
+ int chance = 0;
+
+ while (randint1(100) >= chance)
+ {
+ type = randint1(255);
+ switch (type)
+ {
+ case ACT_SUNLIGHT:
+ case ACT_BO_MISS_1:
+ case ACT_BA_POIS_1:
+ case ACT_BO_ELEC_1:
+ case ACT_BO_ACID_1:
+ case ACT_BO_COLD_1:
+ case ACT_BO_FIRE_1:
+ case ACT_CONFUSE:
+ case ACT_SLEEP:
+ case ACT_QUAKE:
+ case ACT_CURE_LW:
+ case ACT_CURE_MW:
+ case ACT_CURE_POISON:
+ case ACT_BERSERK:
+ case ACT_LIGHT:
+ case ACT_MAP_LIGHT:
+ case ACT_DEST_DOOR:
+ case ACT_STONE_MUD:
+ case ACT_TELEPORT:
+ chance = 101;
+ break;
+ case ACT_BA_COLD_1:
+ case ACT_BA_FIRE_1:
+ case ACT_DRAIN_1:
+ case ACT_TELE_AWAY:
+ case ACT_ESP:
+ case ACT_RESIST_ALL:
+ case ACT_DETECT_ALL:
+ case ACT_RECALL:
+ case ACT_SATIATE:
+ case ACT_RECHARGE:
+ chance = 85;
+ break;
+ case ACT_TERROR:
+ case ACT_PROT_EVIL:
+ case ACT_ID_PLAIN:
+ chance = 75;
+ break;
+ case ACT_DRAIN_2:
+ case ACT_VAMPIRE_1:
+ case ACT_BO_MISS_2:
+ case ACT_BA_FIRE_2:
+ case ACT_REST_LIFE:
+ chance = 66;
+ break;
+ case ACT_BA_FIRE_3:
+ case ACT_BA_COLD_3:
+ case ACT_BA_ELEC_3:
+ case ACT_WHIRLWIND:
+ case ACT_VAMPIRE_2:
+ case ACT_CHARM_ANIMAL:
+ chance = 50;
+ break;
+ case ACT_SUMMON_ANIMAL:
+ chance = 40;
+ break;
+ case ACT_DISP_EVIL:
+ case ACT_BA_MISS_3:
+ case ACT_DISP_GOOD:
+ case ACT_BANISH_EVIL:
+ case ACT_GENOCIDE:
+ case ACT_MASS_GENO:
+ case ACT_CHARM_UNDEAD:
+ case ACT_CHARM_OTHER:
+ case ACT_SUMMON_PHANTOM:
+ case ACT_REST_ALL:
+ case ACT_RUNE_EXPLO:
+ chance = 33;
+ break;
+ case ACT_CALL_CHAOS:
+ case ACT_ROCKET:
+ case ACT_CHARM_ANIMALS:
+ case ACT_CHARM_OTHERS:
+ case ACT_SUMMON_ELEMENTAL:
+ case ACT_CURE_700:
+ case ACT_SPEED:
+ case ACT_ID_FULL:
+ case ACT_RUNE_PROT:
+ chance = 25;
+ break;
+ case ACT_CURE_1000:
+ case ACT_XTRA_SPEED:
+ case ACT_DETECT_XTRA:
+ case ACT_DIM_DOOR:
+ chance = 10;
+ break;
+ case ACT_SUMMON_UNDEAD:
+ case ACT_SUMMON_DEMON:
+ case ACT_WRAITH:
+ case ACT_INVULN:
+ case ACT_ALCHEMY:
+ chance = 5;
+ break;
+ default:
+ chance = 0;
+ }
+ }
+
+ /* A type was chosen... */
+ o_ptr->xtra2 = type;
+ add_flag(o_ptr->art_flags, TR_ACTIVATE);
+ o_ptr->timeout = 0;
+}
static void curse_artifact(object_type * o_ptr)
{
break;
}
- while (!type || (randint1(100) >= chance))
+ if (!type || (randint1(100) >= chance))
{
- type = randint1(255);
- switch (type)
- {
- case ACT_SUNLIGHT:
- case ACT_BO_MISS_1:
- case ACT_BA_POIS_1:
- case ACT_BO_ELEC_1:
- case ACT_BO_ACID_1:
- case ACT_BO_COLD_1:
- case ACT_BO_FIRE_1:
- case ACT_CONFUSE:
- case ACT_SLEEP:
- case ACT_QUAKE:
- case ACT_CURE_LW:
- case ACT_CURE_MW:
- case ACT_CURE_POISON:
- case ACT_BERSERK:
- case ACT_LIGHT:
- case ACT_MAP_LIGHT:
- case ACT_DEST_DOOR:
- case ACT_STONE_MUD:
- case ACT_TELEPORT:
- chance = 101;
- break;
- case ACT_BA_COLD_1:
- case ACT_BA_FIRE_1:
- case ACT_DRAIN_1:
- case ACT_TELE_AWAY:
- case ACT_ESP:
- case ACT_RESIST_ALL:
- case ACT_DETECT_ALL:
- case ACT_RECALL:
- case ACT_SATIATE:
- case ACT_RECHARGE:
- chance = 85;
- break;
- case ACT_TERROR:
- case ACT_PROT_EVIL:
- case ACT_ID_PLAIN:
- chance = 75;
- break;
- case ACT_DRAIN_2:
- case ACT_VAMPIRE_1:
- case ACT_BO_MISS_2:
- case ACT_BA_FIRE_2:
- case ACT_REST_LIFE:
- chance = 66;
- break;
- case ACT_BA_FIRE_3:
- case ACT_BA_COLD_3:
- case ACT_BA_ELEC_3:
- case ACT_WHIRLWIND:
- case ACT_VAMPIRE_2:
- case ACT_CHARM_ANIMAL:
- chance = 50;
- break;
- case ACT_SUMMON_ANIMAL:
- chance = 40;
- break;
- case ACT_DISP_EVIL:
- case ACT_BA_MISS_3:
- case ACT_DISP_GOOD:
- case ACT_BANISH_EVIL:
- case ACT_GENOCIDE:
- case ACT_MASS_GENO:
- case ACT_CHARM_UNDEAD:
- case ACT_CHARM_OTHER:
- case ACT_SUMMON_PHANTOM:
- case ACT_REST_ALL:
- case ACT_RUNE_EXPLO:
- chance = 33;
- break;
- case ACT_CALL_CHAOS:
- case ACT_ROCKET:
- case ACT_CHARM_ANIMALS:
- case ACT_CHARM_OTHERS:
- case ACT_SUMMON_ELEMENTAL:
- case ACT_CURE_700:
- case ACT_SPEED:
- case ACT_ID_FULL:
- case ACT_RUNE_PROT:
- chance = 25;
- break;
- case ACT_CURE_1000:
- case ACT_XTRA_SPEED:
- case ACT_DETECT_XTRA:
- case ACT_DIM_DOOR:
- chance = 10;
- break;
- case ACT_SUMMON_UNDEAD:
- case ACT_SUMMON_DEMON:
- case ACT_WRAITH:
- case ACT_INVULN:
- case ACT_ALCHEMY:
- chance = 5;
- break;
- default:
- chance = 0;
- }
+ one_activation(o_ptr);
+ return;
}
/* A type was chosen... */
if (object_is_fixed_artifact(o_ptr))
{
- return a_info[o_ptr->name1].act_idx;
+ if (have_flag(a_info[o_ptr->name1].flags, TR_ACTIVATE))
+ {
+ return a_info[o_ptr->name1].act_idx;
+ }
}
if (object_is_ego(o_ptr))
{
- return e_info[o_ptr->name2].act_idx;
+ if (have_flag(e_info[o_ptr->name2].flags, TR_ACTIVATE))
+ {
+ return e_info[o_ptr->name2].act_idx;
+ }
}
if (!object_is_random_artifact(o_ptr))
{
- return k_info[o_ptr->k_idx].act_idx;
+ if (have_flag(k_info[o_ptr->k_idx].flags, TR_ACTIVATE))
+ {
+ return k_info[o_ptr->k_idx].act_idx;
+ }
}
return o_ptr->xtra2;