name: Double
card_text: Target 1 Level 5 or lower monster you control; add 1 Level 10 monster from your Deck to your hand with the same original Type, then you can discard 1 card, and if you do, Special Summon 1 monster from your hand with that same Type, in Defense Position. You cannot Special Summon for the rest of this turn after this card resolves, except monsters with that original Type. You can only activate 1 "Double Wild" per turn.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH + CATEGORY_SPECIAL_SUMMON + CATEGORY_HANDES)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.cfilter(c, tp)
  	return c:IsFaceup() and c:IsLevelBelow(5) and Duel.IsExistingMatchingCard(s.thfilter, tp, LOCATION_DECK, 0, 1, nil, c:GetOriginalRace())
  end
  function s.thfilter(c, race)
  	return c:IsRace(race) and c:IsLevel(10) and c:IsAbleToHand()
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and s.cfilter(chkc, tp)
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil, tp)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
  	Duel.SelectTarget(tp, s.cfilter, tp, LOCATION_MZONE, 0, 1, 1, nil, tp)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
  end
  function s.hdfilter(c, e, tp, race)
  	return c:IsDiscardable() and Duel.IsExistingMatchingCard(s.spfilter, tp, LOCATION_HAND, 0, 1, c, e, tp, race)
  end
  function s.spfilter(c, e, tp, race)
  	return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and c:IsCanBeSpecialSummoned(e, 0, tp, false, false, POS_FACEUP_DEFENSE) and c:IsRace(race)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = Duel.GetFirstTarget()
  	if not tc:IsRelateToEffect(e) or not tc:IsFaceup() or not tc:IsType(TYPE_MONSTER) then
  		return
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  	local g = Duel.SelectMatchingCard(tp, s.thfilter, tp, LOCATION_DECK, 0, 1, 1, nil, tc:GetOriginalRace())
  	if g:GetCount() > 0 then
  		Duel.SendtoHand(g, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, g)
  		local rc = g:GetFirst()
  		if Duel.IsExistingMatchingCard(s.hdfilter, tp, LOCATION_HAND, 0, 1, nil, e, tp, rc:GetOriginalRace()) and Duel.SelectYesNo(tp, aux.Stringid(id, 1)) then
  			::cancel::
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
  			local dg = Duel.SelectMatchingCard(tp, s.hdfilter, tp, LOCATION_HAND, 0, 0, 1, nil, e, tp, rc:GetOriginalRace())
  			local sg = nil
  			if dg:GetCount() > 0 then
  				Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  				sg = Duel.SelectMatchingCard(tp, s.spfilter, tp, LOCATION_HAND, 0, 0, 1, dg, e, tp, rc:GetOriginalRace())
  				if #sg == 0 then
  					goto cancel
  				end
  			end
  			Duel.ShuffleHand(tp)
  			if dg:GetCount() > 0 then
  				Duel.SendtoGrave(dg, REASON_EFFECT + REASON_DISCARD)
  				if sg and sg:GetCount() > 0 then
  					Duel.SpecialSummon(sg, 0, tp, tp, false, false, POS_FACEUP_DEFENSE)
  				end
  			end
  		end
  	end
  	if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_FIELD)
  		e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
  		e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  		e1:SetTargetRange(1, 0)
  		e1:SetTarget(s.splimit(tc:GetOriginalRace()))
  		e1:SetReset(RESET_PHASE + PHASE_END)
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.splimit(race)
  	return function(e, c)
  		return not c:IsRace(race)
  	end
  end
  
  
source_text: Double
  Target 1 Level 5 or lower monster you control; add 1 Level 10 monster from your Deck to your hand with the same original Type, then you can discard 1 card, and if you do, Special Summon 1 monster from your hand with that same Type, in Defense Position. You cannot Special Summon for the rest of this turn after this card resolves, except monsters with that original Type. You can only activate 1 "Double Wild" per turn.
target_text: -- Double
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH + CATEGORY_SPECIAL_SUMMON + CATEGORY_HANDES)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.cfilter(c, tp)
  	return c:IsFaceup() and c:IsLevelBelow(5) and Duel.IsExistingMatchingCard(s.thfilter, tp, LOCATION_DECK, 0, 1, nil, c:GetOriginalRace())
  end
  function s.thfilter(c, race)
  	return c:IsRace(race) and c:IsLevel(10) and c:IsAbleToHand()
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and s.cfilter(chkc, tp)
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil, tp)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
  	Duel.SelectTarget(tp, s.cfilter, tp, LOCATION_MZONE, 0, 1, 1, nil, tp)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
  end
  function s.hdfilter(c, e, tp, race)
  	return c:IsDiscardable() and Duel.IsExistingMatchingCard(s.spfilter, tp, LOCATION_HAND, 0, 1, c, e, tp, race)
  end
  function s.spfilter(c, e, tp, race)
  	return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and c:IsCanBeSpecialSummoned(e, 0, tp, false, false, POS_FACEUP_DEFENSE) and c:IsRace(race)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = Duel.GetFirstTarget()
  	if not tc:IsRelateToEffect(e) or not tc:IsFaceup() or not tc:IsType(TYPE_MONSTER) then
  		return
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  	local g = Duel.SelectMatchingCard(tp, s.thfilter, tp, LOCATION_DECK, 0, 1, 1, nil, tc:GetOriginalRace())
  	if g:GetCount() > 0 then
  		Duel.SendtoHand(g, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, g)
  		local rc = g:GetFirst()
  		if Duel.IsExistingMatchingCard(s.hdfilter, tp, LOCATION_HAND, 0, 1, nil, e, tp, rc:GetOriginalRace()) and Duel.SelectYesNo(tp, aux.Stringid(id, 1)) then
  			::cancel::
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
  			local dg = Duel.SelectMatchingCard(tp, s.hdfilter, tp, LOCATION_HAND, 0, 0, 1, nil, e, tp, rc:GetOriginalRace())
  			local sg = nil
  			if dg:GetCount() > 0 then
  				Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  				sg = Duel.SelectMatchingCard(tp, s.spfilter, tp, LOCATION_HAND, 0, 0, 1, dg, e, tp, rc:GetOriginalRace())
  				if #sg == 0 then
  					goto cancel
  				end
  			end
  			Duel.ShuffleHand(tp)
  			if dg:GetCount() > 0 then
  				Duel.SendtoGrave(dg, REASON_EFFECT + REASON_DISCARD)
  				if sg and sg:GetCount() > 0 then
  					Duel.SpecialSummon(sg, 0, tp, tp, false, false, POS_FACEUP_DEFENSE)
  				end
  			end
  		end
  	end
  	if e:IsHasType(EFFECT_TYPE_ACTIVATE) then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_FIELD)
  		e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
  		e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  		e1:SetTargetRange(1, 0)
  		e1:SetTarget(s.splimit(tc:GetOriginalRace()))
  		e1:SetReset(RESET_PHASE + PHASE_END)
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.splimit(race)
  	return function(e, c)
  		return not c:IsRace(race)
  	end
  end
  
  