name: SPYRAL
card_text: If you have a "SPYRAL" card on your field or in your GY: You can Special Summon this card from your hand to your opponent's field in Defense Position (but it cannot be Tributed, nor be used as material for a Fusion, Synchro, Xyz, or Link Summon), then both players reveal the top card of their Deck. You can only use this effect of "SPYRAL Double Agent" once per turn. All "SPYRAL" monsters on the field gain 500 ATK, also "SPYRAL Super Agent" on the field can attack directly.
external_ids: local CARD_ID_0 = 41091257 --SPYRAL Super Agent
  local SETCARD_ID_0 = 0xee --SPYRAL
  
lua: local CARD_ID_0 = 41091257 --SPYRAL Super Agent
  local SETCARD_ID_0 = 0xee --SPYRAL
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(s.spcon)
  	e1:SetTarget(s.sptg)
  	e1:SetOperation(s.spop)
  	c:RegisterEffect(e1)
  	--direct attack
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_DIRECT_ATTACK)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetTargetRange(LOCATION_MZONE, LOCATION_MZONE)
  	e2:SetTarget(aux.TargetBoolFunction(Card.IsCode, CARD_ID_0))
  	c:RegisterEffect(e2)
  	--atk up
  	local e3 = e2:Clone()
  	e3:SetCode(EFFECT_UPDATE_ATTACK)
  	e3:SetTarget(aux.TargetBoolFunction(Card.IsSetCard, SETCARD_ID_0))
  	e3:SetValue(500)
  	c:RegisterEffect(e3)
  end
  function s.filter(c)
  	return c:IsFaceupEx() and c:IsSetCard(SETCARD_ID_0)
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.filter, tp, LOCATION_GRAVE + LOCATION_ONFIELD, 0, 1, nil)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return Duel.GetLocationCount(1 - tp, LOCATION_MZONE) > 0
  			and c:IsCanBeSpecialSummoned(e, 0, tp, false, false, POS_FACEUP_DEFENSE, 1 - tp)
  			and Duel.GetFieldGroupCount(tp, LOCATION_DECK, 0) > 0
  			and Duel.GetFieldGroupCount(tp, 0, LOCATION_DECK) > 0
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsRelateToEffect(e) then
  		return
  	end
  	local chk = Duel.SpecialSummonStep(c, 0, tp, 1 - tp, false, false, POS_FACEUP_DEFENSE)
  	if chk then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_UNRELEASABLE_SUM)
  		e1:SetRange(LOCATION_MZONE)
  		e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE + EFFECT_FLAG_SINGLE_RANGE)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  		e1:SetValue(1)
  		c:RegisterEffect(e1)
  		local e2 = e1:Clone()
  		e2:SetCode(EFFECT_UNRELEASABLE_NONSUM)
  		c:RegisterEffect(e2)
  		local e3 = e1:Clone()
  		e3:SetCode(EFFECT_CANNOT_BE_FUSION_MATERIAL)
  		e3:SetValue(s.lim)
  		c:RegisterEffect(e3)
  		local e4 = e1:Clone()
  		e4:SetCode(EFFECT_CANNOT_BE_SYNCHRO_MATERIAL)
  		c:RegisterEffect(e4)
  		local e5 = e1:Clone()
  		e5:SetCode(EFFECT_CANNOT_BE_XYZ_MATERIAL)
  		c:RegisterEffect(e5)
  		local e6 = e1:Clone()
  		e6:SetCode(EFFECT_CANNOT_BE_LINK_MATERIAL)
  		c:RegisterEffect(e6)
  	end
  	Duel.SpecialSummonComplete()
  	if chk then
  		Duel.BreakEffect()
  		Duel.ConfirmDecktop(tp, 1)
  		Duel.ConfirmDecktop(1 - tp, 1)
  	end
  end
  function s.lim(e, c, st)
  	return st == SUMMON_TYPE_FUSION
  end
  
  
source_text: SPYRAL
  If you have a "SPYRAL" card on your field or in your GY: You can Special Summon this card from your hand to your opponent's field in Defense Position (but it cannot be Tributed, nor be used as material for a Fusion, Synchro, Xyz, or Link Summon), then both players reveal the top card of their Deck. You can only use this effect of "SPYRAL Double Agent" once per turn. All "SPYRAL" monsters on the field gain 500 ATK, also "SPYRAL Super Agent" on the field can attack directly.
target_text: -- SPYRAL
  local CARD_ID_0 = 41091257 --SPYRAL Super Agent
  local SETCARD_ID_0 = 0xee --SPYRAL
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(s.spcon)
  	e1:SetTarget(s.sptg)
  	e1:SetOperation(s.spop)
  	c:RegisterEffect(e1)
  	--direct attack
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_DIRECT_ATTACK)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetTargetRange(LOCATION_MZONE, LOCATION_MZONE)
  	e2:SetTarget(aux.TargetBoolFunction(Card.IsCode, CARD_ID_0))
  	c:RegisterEffect(e2)
  	--atk up
  	local e3 = e2:Clone()
  	e3:SetCode(EFFECT_UPDATE_ATTACK)
  	e3:SetTarget(aux.TargetBoolFunction(Card.IsSetCard, SETCARD_ID_0))
  	e3:SetValue(500)
  	c:RegisterEffect(e3)
  end
  function s.filter(c)
  	return c:IsFaceupEx() and c:IsSetCard(SETCARD_ID_0)
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.filter, tp, LOCATION_GRAVE + LOCATION_ONFIELD, 0, 1, nil)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return Duel.GetLocationCount(1 - tp, LOCATION_MZONE) > 0
  			and c:IsCanBeSpecialSummoned(e, 0, tp, false, false, POS_FACEUP_DEFENSE, 1 - tp)
  			and Duel.GetFieldGroupCount(tp, LOCATION_DECK, 0) > 0
  			and Duel.GetFieldGroupCount(tp, 0, LOCATION_DECK) > 0
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsRelateToEffect(e) then
  		return
  	end
  	local chk = Duel.SpecialSummonStep(c, 0, tp, 1 - tp, false, false, POS_FACEUP_DEFENSE)
  	if chk then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_UNRELEASABLE_SUM)
  		e1:SetRange(LOCATION_MZONE)
  		e1:SetProperty(EFFECT_FLAG_CANNOT_DISABLE + EFFECT_FLAG_SINGLE_RANGE)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  		e1:SetValue(1)
  		c:RegisterEffect(e1)
  		local e2 = e1:Clone()
  		e2:SetCode(EFFECT_UNRELEASABLE_NONSUM)
  		c:RegisterEffect(e2)
  		local e3 = e1:Clone()
  		e3:SetCode(EFFECT_CANNOT_BE_FUSION_MATERIAL)
  		e3:SetValue(s.lim)
  		c:RegisterEffect(e3)
  		local e4 = e1:Clone()
  		e4:SetCode(EFFECT_CANNOT_BE_SYNCHRO_MATERIAL)
  		c:RegisterEffect(e4)
  		local e5 = e1:Clone()
  		e5:SetCode(EFFECT_CANNOT_BE_XYZ_MATERIAL)
  		c:RegisterEffect(e5)
  		local e6 = e1:Clone()
  		e6:SetCode(EFFECT_CANNOT_BE_LINK_MATERIAL)
  		c:RegisterEffect(e6)
  	end
  	Duel.SpecialSummonComplete()
  	if chk then
  		Duel.BreakEffect()
  		Duel.ConfirmDecktop(tp, 1)
  		Duel.ConfirmDecktop(1 - tp, 1)
  	end
  end
  function s.lim(e, c, st)
  	return st == SUMMON_TYPE_FUSION
  end
  
  