// Parent spawner state
IfStateIs0
  IfTimeOut
    tmpargument = 50
    SetTime

    IfTargetIsSelf
      // First find the nearest chest
      tmpargument = [LOCK]
      tmpdistance = 14 // Items, friends and enemies
      SetTargetToNearestBlahID
    Else
      // Check the chest's state
      GetTargetState
      tmpx = tmpargument
      tmpy = 0
      IfXIsEqualToY
        GetState // NOP
      Else
        tmpx = 0
        tmpy = 0
        tmpargument = passage
        tmpdistance = 185 // Tile to find
        FindTileInPassage
          // Make a child
          tmpargument = 1
          tmpdistance = 0
          tmpturn = 0
          SpawnCharacter
            SetChildState
            tmpargument = ACTIONMC
            ChildDoActionOverride
            // Change the tile image
            tmpargument = 186
            SetTileXY
        Else
          GoPoof  // Out of children...

// Find an enemy state
IfStateIs1
  IfSpawned
    // Play the spawn sound
    tmpargument = 1
    tmpdistance = 22050
    PlaySound

    // Do misc setup
    SetTurnModeToSpin
    tmpargument = 60
    SetTime
  IfTimeOut
    SetTargetToNearestEnemy
      tmpx = targetx - selfx < 3 + targetx
      tmpy = targety - selfy < 3 + targety
      ClearWaypoints
      AddWaypoint
      tmpargument = 2
      SetState
      tmpargument = 20
      SetTime

// Chase an enemy state
IfStateIs2
  IfTimeOut
    SetTargetToSelf
    tmpx = targetspeedx < 6
    tmpy = targetspeedy < 6
    SetTargetToNearestEnemy
      tmpdistance = 600
      tmpturn = targetturnto
      Compass
      tmpx = tmpx + selfx
      tmpy = tmpy + selfy
      ClearWaypoints
      AddWaypoint
      tmpargument = 20
      SetTime
  tmpx = 0
  IfBumped
    SetOldTarget
    SetTargetToWhoeverBumped
    IfTargetIsOnHatedTeam
      IfTargetIsDefending
        // Check incoming direction
        tmpx = targetturnto + 49152 - targetturn & 65535
        tmpy = 32768
        IfXIsLessThanY
          // Hit shield
          tmpx = targetx
          tmpy = targety
          tmpdistance = targetz
          tmpargument = 0
          SpawnExactParticle
          tmpargument = 2
        Else
          // Hit character
          tmpargument = rand & 1023 + 512 // 2 - 6 damage
          DamageTarget
          tmpargument = 1
        tmpx = 1
      Else
        // Damage and break
        tmpargument = rand & 1023 + 512 // 2 - 6 damage
        DamageTarget
        tmpargument = 1
        tmpx = 1
    Else
      SetTargetToOldTarget
      tmpx = rand & 511 - 256 + selfx
      tmpy = rand & 511 - 256 + selfy
      ClearWaypoints
      AddWaypoint
      tmpargument = 10
      SetTime
      tmpx = 0
  IfHealed
    SetTargetToWhoeverHealed
    tmpargument = 0
    tmpx = 1
  tmpy = 0
  IfXIsMoreThanY // It was damaged or bumped
    // Message...  Argument set earlier
    SendMessageNear

    // Experience as a consolation prize
    tmpargument = 5
    tmpdistance = EXPSECRET
    GiveExperienceToTarget

    // Sound effect
    tmpargument = 0
    tmpdistance = rand & 1023 + 8000
    PlaySound

    // Death animation and alpha fade
    tmpargument = 0
    SetBumpHeight
    SetBumpSize
    tmpargument = ACTIONKA
    DoActionOverride
    KeepAction
    tmpargument = 3
    SetState
    tmpargument = 8
    SetTime
    tmpargument = 0
    SetContent
    tmpx = 250
    tmpargument = 0
    SetXY

// Dissolve state
IfStateIs3
  tmpargument = 0
  GetXY
  tmpx = tmpx - 7
  SetXY
  tmpargument = tmpx
  SetAlpha
  IfTimeOut
    GetContent
    tmpargument = tmpargument + 1
    tmpx = tmpargument
    tmpy = 3
    IfXIsMoreThanY
      GoPoof
    Else
      SetContent
      ChangeArmor
      tmpargument = 8
      SetTime

End					// Finished with this character
