/* Do not remove the headers from this file! see /USAGE for more info. */

private nosave string mount_msg;
private nosave string dismount_msg;

string the_short();
string short();


string show_exits()
{
    object env = environment();
    return (env ? env->show_exits() : "none");
}


protected void set_get_on_msg(string s)
{
  mount_msg = s;
}

protected void set_get_off_msg(string s)
{
  dismount_msg = s;
}

string query_get_on_msg()
{
  return mount_msg;
}

string query_get_off_msg()
{
  return dismount_msg;
}

string handle_exit_msgs(object last_loc)
{
  return query_get_on_msg() || "$N $vget on "+the_short()+".\n";
}

int direct_sit_on_obj()
{
  return 1;
}

private void mount_it_already()
{
  if(environment(this_body()) == this_object())
    {
      write("You are already there.\n");
      return;
    }
  this_body()->move_to(file_name(this_object()), short());
}

void sit()
{
  mount_it_already();
}

mixed stand()
{
  return query_get_off_msg() || "$N $vget off " + the_short() + ".\n";
}

int direct_mount_obj()
{
  return 1;
}

void mount()
{
  mount_it_already();
}

void get_on()
{
  mount_it_already();
}

int direct_dismount_obj()
{
  return 1;
}

int dismount()
{
  if(environment(this_body()) != this_object())
    return 0;
  
  return stand();
}

int get_off()
{
  if(environment(this_body()) != this_object())
    return 0;
  
  return stand();
}

// It doesn't make much sense to enter a horse.
int direct_enter_obj()
{
  return 0;
}

int direct_get_off_obj()
{
  return 1;
}

int direct_get_on_obj()
{
  return 1;
}

