//Keep track if to enchant holder or not
IfDropped
  tmpargument = 0
  SetState
IfPutAway
  tmpargument = 0
  SetState
  UndoEnchant
IfStateIs0                  //state 0 is not held
  UndoEnchant
  IfGrabbed
    tmpargument = 1
    SetState
  IfTakenOut
    tmpargument = 1
    SetState

//Held, see if we need to enchant
IfStateIs1
  tmpargument = 2
  SetState
  IfNameIsKnown
    SetTargetToWhoeverIsHolding
    tmpargument = [PALA]
    IfTargetHasID
      SetOwnerToTarget
      EnchantTarget
      tmpargument = 3
      SendMessageNear
      SetState
    Else
      tmpargument = 2
      SendMessageNear

//Magical sparklies
IfStateIs3
  tmpx = rand & 100
  tmpy = 50
  IfXIsMoreThanY		//Dont spawn too many
    tmpargument = 1
    tmpx = selfx
    tmpy = selfy
    tmpdistance = selfz
    SpawnExactParticle

// ZZ> This function makes an item fall to the floor when spawned
IfSpawned				//
  tmpargument = ACTIONJB		  //
  DoAction				  //
  KeepAction				  //
  MakeCrushValid

  tmpargument = 1
  SetState

IfCrushed
  tmpx = selfx
  tmpy = selfy
  tmpdistance = selfz
  tmpargument = 0
  SpawnExactParticle
  SpawnExactParticle
  SpawnExactParticle
  SpawnExactParticle
  GoPoof
  tmpargument = 1
  SendMessageNear

IfGrabbed				// Tell them what they've won...
  SetTargetToWhoeverIsHolding
  tmpargument = 0
  SendMessageNear
  IfNameIsKnown
    DoNothing
  Else
    //Identify with high wisdom
    tmpx = rand & 31
    tmpy = rand & 31 + targetwis > 8
    IfXIsLessThanY
      tmpargument = 25
      tmpdistance = EXPSECRET
      GiveExperienceToTarget
      MakeNameKnown

IfTakenOut
  IfNameIsKnown
    DoNothing
  Else
    SetTargetToWhoeverIsHolding

    //Identify with high wisdom
    tmpx = rand & 31
    tmpy = rand & 31 + targetwis > 8
    IfXIsLessThanY
      tmpargument = 25
      tmpdistance = EXPSECRET
      GiveExperienceToTarget
      MakeNameKnown

IfHitGround				// Make a sound
  tmpargument = 0			  //
  PlaySound				  //

IfDropped				// Make it lie on floor
  KeepAction

End					// All done
