public Boardable[] entrances() {
    if (entrances != null) return entrances ;
    entrances = new Boardable[4] ;
    final Tile o = origin() ;
    final World world = o.world ;
    final int h = size / 2, s = size ;
    
    entrance = null ;
    entrances[0] = world.tileAt(o.x + h, o.y + s) ;
    entrances[1] = world.tileAt(o.x + s, o.y + h) ;
    entrances[2] = world.tileAt(o.x + h, o.y - 1) ;
    entrances[3] = world.tileAt(o.x - 1, o.y + h) ;
    
    for (int i = 4 ; i-- > 0 ;) {
      final Tile t = (Tile) entrances[i] ;
      if (t == null) continue ;
      if (t.owner() instanceof ShieldWall) {
        entrances[i] = (ShieldWall) t.owner() ;
      }
      else if (type == TYPE_DOORS && ! t.blocked()) {
        entrances[i] = entrance = t ;
      }
      else entrances[i] = null ;
    }
    return entrances ;
  }