// Create the character
IfSpawned
  KeepAction



// Remove the charge
IfTakenOut
  tmpargument = 0
  SetContent
  SetTargetToWhoeverIsHolding
    IfTargetIsAPlayer
      tmpargument = 3
      SendMessageNear
// Allow it to be charged up
IfUsed
  // Does it have one going?
  UndoEnchant
    tmpargument = 60
    SetReloadTime
  // Nope, so charge
  Else
    SetTargetToWhoeverIsHolding
    tmpargument = [WMAG]
    IfTargetHasSkillID
      GetContent
      tmpx = tmpargument
      tmpy = 256
      IfXIsLessThanY
        tmpy = targetmanaflow
        IfXIsLessThanY
          tmpx = 4
          tmpargument = tmpx
          CostTargetMana
            GetContent
            tmpargument = tmpargument + 4
            SetContent
            tmpx = targetx
            tmpy = targety
            tmpdistance = targetz
            tmpargument = 0
            SpawnExactParticle


// Let it be cast
Else
  GetContent
  tmpx = tmpargument
  tmpy = 0
  IfXIsMoreThanY
    tmpy = 255
    IfXIsMoreThanY
      // Cast the spell...
      UndoEnchant  // There can be only one
      SetTargetToWhoeverIsHolding
      SetOwnerToTarget


      // Find the target
      // Spawn particles around target
      IfHeldInLeftHand
        SetTargetToTargetRightHand
      Else
        SetTargetToTargetLeftHand
      tmpargument = [XWEP]
      IfTargetHasAnyID
        // Do the spell
        EnchantTarget
          MakeUsageKnown
          MakeNameKnown
          UnkurseTarget
          tmpargument = BLUE
          SparkleIcon
          tmpargument = 2
          SendMessageNear
        Else
          tmpargument = 1
          SendMessageNear


        // Do flashy things
        tmpargument = 0
        tmpdistance = 11025
        PlaySound
        tmpargument = 60
        SetReloadTime
      // No valid target...
      Else
        tmpargument = 0
        SendMessageNear
    // Nothing happens...
    Else
      tmpargument = 0
      SendMessageNear


    // Reset the charge counter
    tmpargument = 0
    SetContent


// Return to spellbook, Do last!
IfDropped
  tmpargument = 0
  SetContent
  BecomeSpellbook
  DisaffirmCharacter
  tmpargument = ACTIONJB
  DoAction
  KeepAction
End
