diff --git a/src/monmove.cpp b/src/monmove.cpp index c8e8c3421e605..076c5b763aab8 100644 --- a/src/monmove.cpp +++ b/src/monmove.cpp @@ -1482,7 +1482,10 @@ bool monster::attack_at( const tripoint &p ) } Character &player_character = get_player_character(); - if( p == player_character.pos() && sees( player_character ) ) { + map &here = get_map(); + if( p == player_character.pos() && ( sees( player_character ) || + here.has_flag( TFLAG_RAMP_UP, p ) || here.has_flag( TFLAG_RAMP_DOWN, p ) || + here.has_flag( TFLAG_GOES_UP, p ) || here.has_flag( TFLAG_GOES_DOWN, p ) ) ) { return melee_attack( player_character ); } diff --git a/src/monster.cpp b/src/monster.cpp index a002a3a05fa12..488e47f2cd6ef 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -1502,8 +1502,10 @@ bool monster::melee_attack( Creature &target, float accuracy ) if( /*This happens sometimes*/ this == &target || !is_adjacent( &target, true ) ) { return false; } - - if( posz() != target.posz() && !sees( target ) ) { + map &here = get_map(); + if( !sees( target ) && !here.has_flag( TFLAG_RAMP_UP, target.pos() ) && + !here.has_flag( TFLAG_RAMP_DOWN, target.pos() ) && !here.has_flag( TFLAG_GOES_UP, target.pos() ) && + !here.has_flag( TFLAG_GOES_DOWN, target.pos() ) ) { debugmsg( "Z-Level view violation: %s tried to attack %s.", disp_name(), target.disp_name() ); }