lpc4/lib/
lpc4/lib/doc/efun/
lpc4/lib/doc/lfun/
lpc4/lib/doc/operators/
lpc4/lib/doc/simul_efuns/
lpc4/lib/doc/types/
lpc4/lib/etc/
lpc4/lib/include/
lpc4/lib/include/arpa/
lpc4/lib/obj/d/
lpc4/lib/save/
lpc4/lib/secure/
lpc4/lib/std/
lpc4/lib/std/living/
int size; /* meter */
int xpos,ypos;
object get_entrance_room(string from,int obj_size)
{
  object o;
  if(parted && obj_size/3<=size)
  {
    obj_size/=3;
    if(o=get_subroom(from)->get_entrance_room(from,obj_size)) return o;
    if(from=="n" || from=="s")
    {
      if(o=get_subroom(from+"w")->get_entrance_room(from,obj_size)) return o;
      return get_subroom(from+"e")->get_entrance_room(from,obj_size);
    }else{
      if(o=get_subroom(from+"n")->get_entrance_room(from,obj_size)) return o;
      return get_subroom(from+"s")->get_entrance_room(from,obj_size);
    }
  }else{
    if(exit_blocked(from)) return 0;
    return this_object();
  }
}

object get_room(int x,int y)
{
  if(x<xpos || y<ypos || x>=xpos+size || y>=ypos+size)
    return environment()->get_room(x,y);
  if(!parted) return this_object();
  if(x-xpos<size/3)
  {
    if(y-ypos<size/3)
    {
      return get_subroom("sw")->get_room(x,y);
    }else if(y-ypos<size/3*2){
      return get_subroom("w")->get_room(x,y);
    }else{
      return get_subroom("nw")->get_room(x,y);
    }
  }else if(x-xpos<size/3*2){
    if(y-ypos<size/3)
    {
      return get_subroom("s")->get_room(x,y);
    }else if(y-ypos<size/3*2){
      return get_subroom("")->get_room(x,y);
    }else{
      return get_subroom("n")->get_room(x,y);
    }
  }else{
    if(y-ypos<size/3)
    {
      return get_subroom("se")->get_room(x,y);
    }else if(y-ypos<size/3*2){
      return get_subroom("e")->get_room(x,y);
    }else{
      return get_subroom("ne")->get_room(x,y);
    }
  }
}

object get_room_to(string dir)
{
  switch(dir)
  {
  case "n": return get_room(x,y+1);
  case "s": return get_room(x,y-1);
  case "e": return get_room(x+1,y);
  case "w": return get_room(x-1,y);
  }
}