Sacrifice Resistance is {rF- rC-} and worth as much piety as sac hand.
Sacrifice an Eye gives you 2x inaccuracy, like the amulet*2. It stacks with
the amulet. It's worth 35 piety, like Sacrifice Skill.
0, 0, 0, 0, 0, ABFLAG_SACRIFICE },
{ ABIL_RU_SACRIFICE_SKILL, "Sacrifice Skill",
0, 0, 0, 0, 0, ABFLAG_SACRIFICE },
+ { ABIL_RU_SACRIFICE_EYE, "Sacrifice an Eye",
+ 0, 0, 0, 0, 0, ABFLAG_SACRIFICE },
+ { ABIL_RU_SACRIFICE_RESISTANCE, "Sacrifice Resistance",
+ 0, 0, 0, 0, 0, ABFLAG_SACRIFICE },
{ ABIL_RU_REJECT_SACRIFICES, "Reject Sacrifices",
0, 0, 0, 0, 0, ABFLAG_NONE },
case ABIL_RU_SACRIFICE_HAND:
case ABIL_RU_SACRIFICE_EXPERIENCE:
case ABIL_RU_SACRIFICE_SKILL:
+ case ABIL_RU_SACRIFICE_EYE:
+ case ABIL_RU_SACRIFICE_RESISTANCE:
case ABIL_RU_REJECT_SACRIFICES:
case ABIL_STOP_RECALL:
invoc = true;
case ABIL_RU_SACRIFICE_HAND:
case ABIL_RU_SACRIFICE_EXPERIENCE:
case ABIL_RU_SACRIFICE_SKILL:
+ case ABIL_RU_SACRIFICE_EYE:
+ case ABIL_RU_SACRIFICE_RESISTANCE:
fail_check();
if (!ru_do_sacrifice(abil.ability))
return SPRET_ABORT;
|| abil.ability == ABIL_RU_SACRIFICE_HAND
|| abil.ability == ABIL_RU_SACRIFICE_EXPERIENCE
|| abil.ability == ABIL_RU_SACRIFICE_SKILL
+ || abil.ability == ABIL_RU_SACRIFICE_EYE
+ || abil.ability == ABIL_RU_SACRIFICE_RESISTANCE
|| abil.ability == ABIL_RU_REJECT_SACRIFICES)
{
first_slot = letter_to_index('P');
}
}
-bool actor::inaccuracy() const
+int actor::inaccuracy() const
{
return wearing(EQ_AMULET, AMU_INACCURACY);
}
virtual int check_res_magic(int power);
virtual bool no_tele(bool calc_unid = true, bool permit_id = true,
bool blink = false) const = 0;
- virtual bool inaccuracy() const;
+ virtual int inaccuracy() const;
virtual bool antimagic_susceptible() const = 0;
virtual bool gourmand(bool calc_unid = true, bool items = true) const;
}
// Penalties for both players and monsters:
-
- if (attacker->inaccuracy())
- mhit -= 5;
+ mhit -= 5 * attacker->inaccuracy();
// If you can't see yourself, you're a little less accurate.
if (!attacker->visible_to(attacker))
else
{
pbolt.hit = (*zinfo->tohit)(power);
- if (you.inaccuracy() && pbolt.hit != AUTOMATIC_HIT)
- pbolt.hit = max(0, pbolt.hit - 5);
+ if (pbolt.hit != AUTOMATIC_HIT)
+ pbolt.hit = max(0, pbolt.hit - 5 * you.inaccuracy());
}
if (zinfo->damage)
Sacrifices cannot be taken back.
%%%%
+Sacrifice an Eye ability
+
+Adherents who choose to sacrifice their eye will have a much harder time hitting
+their targets, to the same degree as if they were wearing two amulets of
+inaccuracy at once.
+
+If you make this sacrifice, your powers granted by Ru will become stronger in
+proportion to the value of the sacrifice, and you may gain new powers as well.
+
+Sacrifices cannot be taken back.
+%%%%
+Sacrifice Resistance ability
+
+Adherents who choose to sacrifice their resistance will become vulnerable to
+extreme heat and cold.
+
+If you make this sacrifice, your powers granted by Ru will become stronger in
+proportion to the value of the sacrifice, and you may gain new powers as well.
+
+Sacrifices cannot be taken back.
+%%%%
Reject Sacrifices ability
Adherents who cannot bring themselves to make any offered sacrifice may reject
ABIL_RU_SACRIFICE_HAND,
ABIL_RU_SACRIFICE_EXPERIENCE,
ABIL_RU_SACRIFICE_SKILL,
- ABIL_FINAL_SACRIFICE = ABIL_RU_SACRIFICE_SKILL,
+ ABIL_RU_SACRIFICE_EYE,
+ ABIL_RU_SACRIFICE_RESISTANCE,
+ ABIL_FINAL_SACRIFICE = ABIL_RU_SACRIFICE_RESISTANCE,
ABIL_RU_REJECT_SACRIFICES,
// For both Yred and Beogh
MUT_MUMMY_RESTORATION,
MUT_CONSTRICTING_TAIL,
MUT_TENGU_FLIGHT,
+ MUT_MISSING_EYE,
+ MUT_TEMPERATURE_SENSITIVITY,
NUM_MUTATIONS,
RANDOM_MUTATION,
+ you.skill(SK_FIGHTING, 30);
your_to_hit /= 100;
- if (you.inaccuracy())
- your_to_hit -= 5;
+ your_to_hit -= 5 * you.inaccuracy();
if (player_mutation_level(MUT_EYEBALLS))
your_to_hit += 2 * player_mutation_level(MUT_EYEBALLS) + 1;
const float off = (coinflip() ? -1 : 1) * 0.25;
float tan = (random2(31) - 15) * 0.019; // approx from degrees
tan *= 75.0 / pow;
- if (caster && caster->inaccuracy())
- tan *= 2;
+ int inaccuracy = caster->inaccuracy();
+ if (caster && inaccuracy > 0)
+ tan *= 2 * inaccuracy;
// Cast either from left or right hand.
mon.props[IOOD_X] = x + vy*off;
"claws that catch",
},
+
+{ MUT_MISSING_EYE, 0, 1, MUTFLAG_RU, false,
+ "missing an eye",
+
+ {"You are missing an eye, making it more difficult to aim.", "", ""},
+ {"Your right eye vanishes! The world loses its depth.", "", ""},
+ {"Your right eye suddenly reappears! The world regains its depth.", "", ""},
+
+ "a missing eye",
+},
+
+{ MUT_TEMPERATURE_SENSITIVITY, 0, 1, MUTFLAG_RU, false,
+ "temperature sensitive",
+
+ {"You are sensitive to extremes of temperature (rF-, rC-).", "", ""},
+ {"You feel sensitive to extremes of temperature.", "", ""},
+ {"You no longer feel sensitive to extremes of temperature", "", ""},
+
+ "temperature sensitivity (rF-, rC-)",
+},
};
// mutations:
rf += player_mutation_level(MUT_HEAT_RESISTANCE, temp);
rf -= player_mutation_level(MUT_HEAT_VULNERABILITY, temp);
+ rf -= player_mutation_level(MUT_TEMPERATURE_SENSITIVITY, temp);
rf += player_mutation_level(MUT_MOLTEN_SCALES, temp) == 3 ? 1 : 0;
// spells:
// mutations:
rc += player_mutation_level(MUT_COLD_RESISTANCE, temp);
rc -= player_mutation_level(MUT_COLD_VULNERABILITY, temp);
+ rc -= player_mutation_level(MUT_TEMPERATURE_SENSITIVITY, temp);
rc += player_mutation_level(MUT_ICY_BLUE_SCALES, temp) == 3 ? 1 : 0;
rc += player_mutation_level(MUT_SHAGGY_FUR, temp) == 3 ? 1 : 0;
redraw_armour_class = true;
}
+
+int player::inaccuracy() const
+{
+ int degree = 0;
+ if (wearing(EQ_AMULET, AMU_INACCURACY))
+ degree++;
+ if (player_mutation_level(MUT_MISSING_EYE))
+ degree += 2;
+ return degree;
+}
int base_ac_from(const item_def &armour, int scale = 1) const;
void maybe_degrade_bone_armour(int mult);
+ int inaccuracy() const;
+
// actor
int mindex() const;
int get_hit_dice() const;
ru_sacrifice_hand ABILITY_RU_SACRIFICE_HAND
ru_sacrifice_experience ABILITY_RU_SACRIFICE_EXPERIENCE
ru_sacrifice_skill ABILITY_RU_SACRIFICE_SKILL
+ru_sacrifice_eye ABILITY_RU_SACRIFICE_EYE
+ru_sacrifice_resistance ABILITY_RU_SACRIFICE_RESISTANCE
ru_reject_sacrifices ABILITY_RU_REJECT_SACRIFICES
sif_muna_amnesia ABILITY_SIF_MUNA_AMNESIA
sif_muna_channel ABILITY_SIF_MUNA_CHANNEL
nullptr,
nullptr,
},
+
+{ ABIL_RU_SACRIFICE_EYE, MUT_MISSING_EYE,
+ "sacrifice an eye",
+ "sacrificed an eye",
+
+ 45,
+ SK_NONE,
+ nullptr,
+ nullptr,
+},
+
+{ ABIL_RU_SACRIFICE_RESISTANCE, MUT_TEMPERATURE_SENSITIVITY,
+ "sacrifice your resistance to extreme temperatures",
+ "sacrificed resistance",
+
+ 70,
+ SK_NONE,
+ nullptr,
+ nullptr,
+},
};