// 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
  tmpx = selfcontent
  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
        PlaySound
        tmpargument = 60
        SetReloadTime
     
      
      //It isn't a weapon!
      Else
      
        //Allow potions to be enchanted
        tmpargument = [POTI]
        IfTargetHasAnyID
          tmpargument = [ENCH]
          OrderTarget
          tmpargument = 0
          PlaySound
          tmpargument = 60
          SetReloadTime
          tmpargument = 4
          SendMessageNear
        
        // 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
