void fnJump(object oDest)
{
  object oMe=OBJECT_SELF;
  if (GetArea(oMe)!=GetArea(oDest)||GetDistanceBetween(oMe,oDest)>1.0)
  { // jump
    AssignCommand(oMe,ClearAllActions(TRUE));
    AssignCommand(oMe,JumpToObject(oDest));
    DelayCommand(0.5,fnJump(oDest));
  } // jump
} // fnJump()


void main()
{
   object oMe=OBJECT_SELF;
   object oPC=GetLastUsedBy();
   object oDest;
   string sTag=GetTag(oMe);
   oDest=GetWaypointByTag("STAGE"+sTag+"_ARRIVE");
   AssignCommand(oPC,fnJump(oDest));
}