name: Performapal
card_text: When an opponent's monster declares a direct attack: Target that attacking monster; negate the attack, and if you do, add up to 2 "Performapal" monsters from your Deck to your hand, whose total DEF is less than or equal to the ATK of the targeted monster. Until the end of your next turn after this card resolves, you cannot Special Summon monsters from the Extra Deck.
external_ids: local SETCARD_ID_0 = 0x9f --Performapal
  
lua: local SETCARD_ID_0 = 0x9f --Performapal
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_ATTACK_ANNOUNCE)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetAttacker():IsControler(1 - tp) and Duel.GetAttackTarget() == nil
  end
  function s.filter(c, def)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsDefenseBelow(def) and c:IsAbleToHand()
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	local at = Duel.GetAttacker()
  	if chkc then
  		return chkc == at
  	end
  	if chk == 0 then
  		return at:IsOnField() and at:IsCanBeEffectTarget(e) and Duel.IsExistingMatchingCard(s.filter, tp, LOCATION_DECK, 0, 1, nil, at:GetAttack())
  	end
  	Duel.SetTargetCard(at)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local tc = Duel.GetFirstTarget()
  	if Duel.NegateAttack() then
  		local val = tc:GetAttack()
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  		local g1 = Duel.SelectMatchingCard(tp, s.filter, tp, LOCATION_DECK, 0, 1, 1, nil, val)
  		local sc = g1:GetFirst()
  		if sc then
  			val = val - sc:GetDefense()
  			if Duel.IsExistingMatchingCard(s.filter, tp, LOCATION_DECK, 0, 1, sc, val) and Duel.SelectYesNo(tp, aux.Stringid(id, 0)) then
  				Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  				local g2 = Duel.SelectMatchingCard(tp, s.filter, tp, LOCATION_DECK, 0, 1, 1, sc, val)
  				g1:Merge(g2)
  			end
  			Duel.SendtoHand(g1, nil, REASON_EFFECT)
  			Duel.ConfirmCards(1 - tp, g1)
  		end
  	end
  	if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
  		local e1 = Effect.CreateEffect(e:GetHandler())
  		e1:SetType(EFFECT_TYPE_FIELD)
  		e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  		e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
  		e1:SetTargetRange(1, 0)
  		e1:SetTarget(s.sumlimit)
  		if Duel.GetTurnPlayer() == tp then
  			e1:SetReset(RESET_PHASE + PHASE_END + RESET_SELF_TURN, 2)
  		else
  			e1:SetReset(RESET_PHASE + PHASE_END + RESET_SELF_TURN)
  		end
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.sumlimit(e, c, sump, sumtype, sumpos, targetp, se)
  	return c:IsLocation(LOCATION_EXTRA)
  end
  
  
source_text: Performapal
  When an opponent's monster declares a direct attack: Target that attacking monster; negate the attack, and if you do, add up to 2 "Performapal" monsters from your Deck to your hand, whose total DEF is less than or equal to the ATK of the targeted monster. Until the end of your next turn after this card resolves, you cannot Special Summon monsters from the Extra Deck.
target_text: -- Performapal
  local SETCARD_ID_0 = 0x9f --Performapal
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_ATTACK_ANNOUNCE)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetAttacker():IsControler(1 - tp) and Duel.GetAttackTarget() == nil
  end
  function s.filter(c, def)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsDefenseBelow(def) and c:IsAbleToHand()
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	local at = Duel.GetAttacker()
  	if chkc then
  		return chkc == at
  	end
  	if chk == 0 then
  		return at:IsOnField() and at:IsCanBeEffectTarget(e) and Duel.IsExistingMatchingCard(s.filter, tp, LOCATION_DECK, 0, 1, nil, at:GetAttack())
  	end
  	Duel.SetTargetCard(at)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local tc = Duel.GetFirstTarget()
  	if Duel.NegateAttack() then
  		local val = tc:GetAttack()
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  		local g1 = Duel.SelectMatchingCard(tp, s.filter, tp, LOCATION_DECK, 0, 1, 1, nil, val)
  		local sc = g1:GetFirst()
  		if sc then
  			val = val - sc:GetDefense()
  			if Duel.IsExistingMatchingCard(s.filter, tp, LOCATION_DECK, 0, 1, sc, val) and Duel.SelectYesNo(tp, aux.Stringid(id, 0)) then
  				Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  				local g2 = Duel.SelectMatchingCard(tp, s.filter, tp, LOCATION_DECK, 0, 1, 1, sc, val)
  				g1:Merge(g2)
  			end
  			Duel.SendtoHand(g1, nil, REASON_EFFECT)
  			Duel.ConfirmCards(1 - tp, g1)
  		end
  	end
  	if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
  		local e1 = Effect.CreateEffect(e:GetHandler())
  		e1:SetType(EFFECT_TYPE_FIELD)
  		e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  		e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
  		e1:SetTargetRange(1, 0)
  		e1:SetTarget(s.sumlimit)
  		if Duel.GetTurnPlayer() == tp then
  			e1:SetReset(RESET_PHASE + PHASE_END + RESET_SELF_TURN, 2)
  		else
  			e1:SetReset(RESET_PHASE + PHASE_END + RESET_SELF_TURN)
  		end
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.sumlimit(e, c, sump, sumtype, sumpos, targetp, se)
  	return c:IsLocation(LOCATION_EXTRA)
  end
  
  