//////////////////////////////////////////////////////////////////
// offset_h - Provides an offset location based on a location
// By Deva Bryson Winblood. 04/27/2005
//////////////////////////////////////////////////////////////////

///////////////////////////
// PROTOTYPES
///////////////////////////


// FILE: offset_h               FUNCTION: GetOffsetLocation()
// This function will return a location a random direction from
// the start location within specified range.
location GetOffsetLocation(location lStart,float fRange=0.5);

///////////////////////////
// FUNCTIONS
///////////////////////////

vector fnGetNewVector(vector vStart,float fRange)
{ // PURPOSE: Return a vector
  vector vNew;
  int nR=d8();
  if (nR==1)
  { // north
    vNew.x=vStart.x;
    vNew.y=vStart.y+fRange;
  } // north
  else if (nR==2)
  { // east
    vNew.y=vStart.y;
    vNew.x=vStart.x+fRange;
  } // east
  else if (nR==3)
  { // south
    vNew.x=vStart.x;
    vNew.y=vStart.y-fRange;
  } // south
  else if (nR==4)
  { // west
    vNew.y=vStart.y;
    vNew.x=vStart.x-fRange;
  } // west
  else if (nR==5)
  { // north east
    vNew.y=vStart.y+(fRange/2.0);
    vNew.x=vStart.x+(fRange/2.0);
  } // north east
  else if (nR==6)
  { // south east
    vNew.y=vStart.y-(fRange/2.0);
    vNew.x=vStart.x+(fRange/2.0);
  } // south east
  else if (nR==7)
  { // south west
    vNew.y=vStart.y-(fRange/2.0);
    vNew.x=vStart.x-(fRange/2.0);
  } // south west
  else
  { // north west
    vNew.y=vStart.y+(fRange/2.0);
    vNew.x=vStart.x-(fRange/2.0);
  } // north west
  return vNew;
} // fnGetNewVector()

location GetOffsetLocation(location lStart,float fRange=0.5)
{
  vector vStart=GetPositionFromLocation(lStart);
  vector vNew;
  object oArea=GetAreaFromLocation(lStart);
  vNew=fnGetNewVector(vStart,fRange);
  while(vNew.x<0.0||vNew.y<0.0)
  { // get valid vector
    vNew=fnGetNewVector(vStart,fRange);
  } // get valid vector
  return Location(oArea,vNew,0.0);
} // GetOffsetLocation()

//void main(){}