fix monster field infliction logic. Fix #765
This commit is contained in:
@@ -814,53 +814,44 @@ void monst_inflict_fields(short which_monst) {
|
|||||||
if(univ.town.monst[which_monst].is_alive()) {
|
if(univ.town.monst[which_monst].is_alive()) {
|
||||||
where_check.x = univ.town.monst[which_monst].cur_loc.x + i;
|
where_check.x = univ.town.monst[which_monst].cur_loc.x + i;
|
||||||
where_check.y = univ.town.monst[which_monst].cur_loc.y + j;
|
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)) {
|
if(univ.town.is_quickfire(where_check.x,where_check.y)) {
|
||||||
r1 = get_ran(2,1,8);
|
r1 = get_ran(2,1,8);
|
||||||
damage_monst(*which_m,7,r1,eDamageType::FIRE);
|
damage_monst(*which_m,7,r1,eDamageType::FIRE);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(univ.town.is_blade_wall(where_check.x,where_check.y)) {
|
if(univ.town.is_blade_wall(where_check.x,where_check.y)) {
|
||||||
r1 = get_ran(6,1,8);
|
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);
|
damage_monst(*which_m,7,r1,eDamageType::WEAPON);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(univ.town.is_force_wall(where_check.x,where_check.y)) {
|
if(univ.town.is_force_wall(where_check.x,where_check.y)) {
|
||||||
r1 = get_ran(3,1,6);
|
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);
|
damage_monst(*which_m,7,r1,eDamageType::MAGIC);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(univ.town.is_sleep_cloud(where_check.x,where_check.y)) {
|
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);
|
which_m->sleep(eStatus::ASLEEP,3,0);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(univ.town.is_ice_wall(where_check.x,where_check.y)) {
|
if(univ.town.is_ice_wall(where_check.x,where_check.y)) {
|
||||||
r1 = get_ran(3,1,6);
|
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);
|
damage_monst(*which_m,7,r1,eDamageType::COLD);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(univ.town.is_scloud(where_check.x,where_check.y)) {
|
if(univ.town.is_scloud(where_check.x,where_check.y)) {
|
||||||
r1 = get_ran(1,2,3);
|
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);
|
which_m->curse(r1);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(univ.town.is_web(where_check.x,where_check.y) && which_m->m_type != eRace::BUG) {
|
if(univ.town.is_web(where_check.x,where_check.y) && which_m->m_type != eRace::BUG) {
|
||||||
which_m->spell_note(19);
|
which_m->spell_note(19);
|
||||||
r1 = get_ran(1,2,3);
|
r1 = get_ran(1,2,3);
|
||||||
which_m->web(r1);
|
which_m->web(r1);
|
||||||
univ.town.set_web(where_check.x,where_check.y,false);
|
univ.town.set_web(where_check.x,where_check.y,false);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(univ.town.is_fire_wall(where_check.x,where_check.y)) {
|
if(univ.town.is_fire_wall(where_check.x,where_check.y)) {
|
||||||
r1 = get_ran(2,1,6);
|
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);
|
damage_monst(*which_m,7,r1,eDamageType::FIRE);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
if(univ.town.is_force_cage(where_check.x,where_check.y))
|
if(univ.town.is_force_cage(where_check.x,where_check.y))
|
||||||
process_force_cage(where_check, univ.get_target_i(*which_m));
|
process_force_cage(where_check, univ.get_target_i(*which_m));
|
||||||
|
Reference in New Issue
Block a user