Im 2k geht das auch nur wenn die Grafik aus dem Tileset stammt.

Aber hier mal eine Lösung für den XP (kann man mit Sicherheit noch schöner schreiben)
Code:
class Game_Event < Game_Character
  def name
    @event.name
  end
end

class Game_Player
  def passable?(x, y, d)
    # Get new coordinates
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    # If coordinates are outside of map
    unless $game_map.valid?(new_x, new_y)
      # Impassable
      return false
    end
    # If debug mode is ON and ctrl key was pressed
    if $DEBUG and Input.press?(Input::CTRL)
      # Passable
      return true
    end
    $game_map.events.each_value { |event|
      if event.x == new_x && event.y == new_y
        return true if event.through && event.name.include?('bridge')
      end
      if event.x == x && event.y == y
        return true if event.through && event.name.include?('bridge') && $game_map.passable?(new_x, new_y, 10 - d)
      end
    }
    super
  end
end
In ein neues Script über Main einfügen. Events die auf Trough gesetzt sind und "bridge" im Namen haben sind dann immer passierbar egal was für Tiles unter oder über ihnen sind.