fix monster field infliction logic. Fix #765
This commit is contained in:
@@ -815,53 +815,44 @@ void monst_inflict_fields(short which_monst) {
|
||||
if(univ.town.monst[which_monst].is_alive()) {
|
||||
where_check.x = univ.town.monst[which_monst].cur_loc.x + i;
|
||||
where_check.y = univ.town.monst[which_monst].cur_loc.y + j;
|
||||
// TODO: If the goal is to damage the monster by any fields it's on, why all the break statements?
|
||||
if(univ.town.is_quickfire(where_check.x,where_check.y)) {
|
||||
r1 = get_ran(2,1,8);
|
||||
damage_monst(*which_m,7,r1,eDamageType::FIRE);
|
||||
break;
|
||||
}
|
||||
if(univ.town.is_blade_wall(where_check.x,where_check.y)) {
|
||||
r1 = get_ran(6,1,8);
|
||||
if(have_radiate && which_radiate != eFieldType::WALL_BLADES)
|
||||
if(!have_radiate || which_radiate != eFieldType::WALL_BLADES)
|
||||
damage_monst(*which_m,7,r1,eDamageType::WEAPON);
|
||||
break;
|
||||
}
|
||||
if(univ.town.is_force_wall(where_check.x,where_check.y)) {
|
||||
r1 = get_ran(3,1,6);
|
||||
if(have_radiate && which_radiate != eFieldType::WALL_FORCE)
|
||||
if(!have_radiate || which_radiate != eFieldType::WALL_FORCE)
|
||||
damage_monst(*which_m,7,r1,eDamageType::MAGIC);
|
||||
break;
|
||||
}
|
||||
if(univ.town.is_sleep_cloud(where_check.x,where_check.y)) {
|
||||
if(have_radiate && which_radiate != eFieldType::CLOUD_SLEEP)
|
||||
if(!have_radiate || which_radiate != eFieldType::CLOUD_SLEEP)
|
||||
which_m->sleep(eStatus::ASLEEP,3,0);
|
||||
break;
|
||||
}
|
||||
if(univ.town.is_ice_wall(where_check.x,where_check.y)) {
|
||||
r1 = get_ran(3,1,6);
|
||||
if(have_radiate && which_radiate != eFieldType::WALL_ICE)
|
||||
if(!have_radiate || which_radiate != eFieldType::WALL_ICE)
|
||||
damage_monst(*which_m,7,r1,eDamageType::COLD);
|
||||
break;
|
||||
}
|
||||
if(univ.town.is_scloud(where_check.x,where_check.y)) {
|
||||
r1 = get_ran(1,2,3);
|
||||
if(have_radiate && which_radiate != eFieldType::CLOUD_STINK)
|
||||
if(!have_radiate || which_radiate != eFieldType::CLOUD_STINK)
|
||||
which_m->curse(r1);
|
||||
break;
|
||||
}
|
||||
if(univ.town.is_web(where_check.x,where_check.y) && which_m->m_type != eRace::BUG) {
|
||||
which_m->spell_note(eSpellNote::WEBBED);
|
||||
r1 = get_ran(1,2,3);
|
||||
which_m->web(r1);
|
||||
univ.town.set_web(where_check.x,where_check.y,false);
|
||||
break;
|
||||
}
|
||||
if(univ.town.is_fire_wall(where_check.x,where_check.y)) {
|
||||
r1 = get_ran(2,1,6);
|
||||
if(have_radiate && which_radiate != eFieldType::WALL_FIRE)
|
||||
if(!have_radiate || which_radiate != eFieldType::WALL_FIRE)
|
||||
damage_monst(*which_m,7,r1,eDamageType::FIRE);
|
||||
break;
|
||||
}
|
||||
if(univ.town.is_force_cage(where_check.x,where_check.y))
|
||||
process_force_cage(where_check, univ.get_target_i(*which_m));
|
||||
|
Reference in New Issue
Block a user