creature_ptr->resist_fear = TRUE;
}
}
+
+void have_immune_acid(player_type *creature_ptr)
+{
+ object_type *o_ptr;
+ BIT_FLAGS flgs[TR_FLAG_SIZE];
+ creature_ptr->immune_acid = FALSE;
+
+ if (!creature_ptr->mimic_form && creature_ptr->prace == RACE_YEEK && creature_ptr->lev > 19)
+ creature_ptr->immune_acid = TRUE;
+
+ if (creature_ptr->ele_immune) {
+ if (creature_ptr->special_defense & DEFENSE_ACID)
+ creature_ptr->immune_acid = TRUE;
+ }
+
+ for (int i = INVEN_RARM; i < INVEN_TOTAL; i++) {
+ o_ptr = &creature_ptr->inventory_list[i];
+ if (!o_ptr->k_idx)
+ continue;
+
+ object_flags(creature_ptr, o_ptr, flgs);
+ if (have_flag(flgs, TR_IM_ACID))
+ creature_ptr->immune_acid = TRUE;
+ }
+}
*/
static void clear_creature_bonuses(player_type *creature_ptr)
{
- creature_ptr->immune_acid = FALSE;
creature_ptr->immune_elec = FALSE;
creature_ptr->immune_fire = FALSE;
creature_ptr->immune_cold = FALSE;
have_resist_neth(creature_ptr);
have_resist_time(creature_ptr);
have_resist_fear(creature_ptr);
+ have_immune_acid(creature_ptr);
calc_race_status(creature_ptr);
}
if (creature_ptr->ele_immune) {
- if (creature_ptr->special_defense & DEFENSE_ACID)
- creature_ptr->immune_acid = TRUE;
- else if (creature_ptr->special_defense & DEFENSE_ELEC)
+ if (creature_ptr->special_defense & DEFENSE_ELEC)
creature_ptr->immune_elec = TRUE;
else if (creature_ptr->special_defense & DEFENSE_FIRE)
creature_ptr->immune_fire = TRUE;
if (have_flag(flgs, TR_IM_FIRE))
creature_ptr->immune_fire = TRUE;
- if (have_flag(flgs, TR_IM_ACID))
- creature_ptr->immune_acid = TRUE;
if (have_flag(flgs, TR_IM_COLD))
creature_ptr->immune_cold = TRUE;
if (have_flag(flgs, TR_IM_ELEC))