// handle bunching + sticking
// handle spacing

// Find guy to protect
IfSpawned
  tmpx=0
  tmpy=1
  tmpargument=0
  SetXY
  SetState

tmpargument=0
GetXY
IfXIsLessThanY
  SetTargetToNearestFriend
    SetOwnerToTarget
    tmpx=2
    SetXY    

// Get mean if characters wanna be bad
IfAttacked
  SetTargetToWhoeverAttacked
    IfTargetIsAPlayer
      CallForHelp
      JoinEvilTeam
  SetTargetToOldTarget
IfCalledForHelp
  SetTargetToWhoeverCalledForHelp
    SetOwnerToTarget
    tmpargument=0
    SetState
    JoinEvilTeam

// Show the character's location
tmpx = selfx
tmpy = selfy
tmpargument = 4
ShowBlipXY

IfKilled				// This reduces the height of the char
  CallForHelp			//Alert friends
  tmpargument = 0			  // Last words...
  SetState				  //
  IfTargetIsOnSameTeam			  // Fragged!
    tmpargument = 3			    //
    IfTargetIsSelf			    // No, just a damage tile
      tmpargument = 4			      //
  SendMessage				  //
  tmpargument = 65535			  // Drop money
  DropMoney				  //
  tmpargument = 45			  //
  SetBumpHeight				  //
IfAttacked				// Attacked
  SetTargetToWhoeverAttacked		  //
    IfTargetIsAlive			    //
      tmpargument = 1			        //
      SetState			        //  
      tmpargument = tmpdistance & 1 + 4	// Ouch!
      PlaySound			        //
    Else				    //Attacker died already
      SetTargetToOldTarget		      //

IfTargetKilled				// Return to follow mode
  tmpargument = 0			  // State 0 ( Follow )
  SetState				  //

IfTimeOut				// This is done every so often
  SetTargetToWideEnemy		  // Look out for enemies
    tmpargument = 1			      //
    SetState				      // Change to combat mode
  tmpargument = 0			  // Check state
  IfStateIs				  // State 0 ( Follow )
    tmpx = ownerx			    //
    tmpy = ownery			    //
    GetContent
    tmpturn = tmpargument < 14    // Stand to side
    tmpdistance = 500			    //
    Compass				    //
  Else					  // State 1 ( Combat )
    tmpx = targetdistance		    // Close enough to attack?
    tmpy = 200				    //
    IfXIsLessThanY			    //
      tmpargument = LATCHRIGHT		      // Right Attack == 2
      PressLatchButton			      //
    tmpx = targetx			    // Move towards enemy
    tmpy = targety			    //
    tmpturn = targetturnto		    //
    tmpdistance = 200			    //
    Compass				    //
  ClearWaypoints			  //
  AddWaypoint				  //
  tmpargument = rand&20			  // Try again later
  SetTime				  //

IfBumped				// Bumped
  SetTargetToWhoeverBumped		  //
    tmpargument = 0			    // Return to follow state
    SetTargetToNearbyEnemy		    // Look out for enemies
      tmpargument = 1			      // Stay in combat state
    Else				    // Revert
      SetTargetToOldTarget		      //
    SetState				    //
    tmpx = rand&511+selfx-256		    //
    tmpy = rand&511+selfy-256		    //
    ClearWaypoints			    //
    AddWaypoint				    //
    tmpargument = 40			    // Try again soon
    SetTime				    //
End					// All done