name: Rank-Up-Magic
card_text: Target 1 Rank 4 Spellcaster Xyz Monster in your GY; Special Summon it (but negate its effects), then Special Summon 1 Rank 5 Spellcaster Xyz Monster from your Extra Deck, by using it as material, and if you do, attach this card to the Summoned monster (this is treated as an Xyz Summon). You can only activate 1 "Rank-Up-Magic Magical Force" per turn.
external_ids: local CARD_ID_0 = 59822133 --Blue-Eyes Spirit Dragon
  local CARD_ID_1 = 6165656 --Number C88: Gimmick Puppet Disaster Leo
  local CARD_ID_2 = 48995978 --Number 88: Gimmick Puppet of Leo
  
lua: local CARD_ID_0 = 59822133 --Blue-Eyes Spirit Dragon
  local CARD_ID_1 = 6165656 --Number C88: Gimmick Puppet Disaster Leo
  local CARD_ID_2 = 48995978 --Number 88: Gimmick Puppet of Leo
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetHintTiming(0, TIMING_END_PHASE)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.filter1(c, e, tp)
  	return c:IsRank(4)
  		and c:IsRace(RACE_SPELLCASTER)
  		and c:IsType(TYPE_XYZ)
  		and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  		and Duel.IsExistingMatchingCard(s.filter2, tp, LOCATION_EXTRA, 0, 1, nil, e, tp, c)
  end
  function s.filter2(c, e, tp, mc)
  	if c:GetOriginalCode() == CARD_ID_1 and not mc:IsCode(CARD_ID_2) then
  		return false
  	end
  	return c:IsRank(5)
  		and c:IsRace(RACE_SPELLCASTER)
  		and c:IsType(TYPE_XYZ)
  		and mc:IsCanBeXyzMaterial(c)
  		and c:IsCanBeSpecialSummoned(e, SUMMON_TYPE_XYZ, tp, false, false)
  		and Duel.GetLocationCountFromEx(tp, tp, mc, c) > 0
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return chkc:IsControler(tp) and chkc:IsLocation(LOCATION_GRAVE) and s.filter1(chkc, e, tp)
  	end
  	if chk == 0 then
  		return not Duel.IsPlayerAffectedByEffect(tp, CARD_ID_0)
  			and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  			and aux.MustMaterialCheck(nil, tp, EFFECT_MUST_BE_XMATERIAL)
  			and Duel.IsExistingTarget(s.filter1, tp, LOCATION_GRAVE, 0, 1, nil, e, tp)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  	local g = Duel.SelectTarget(tp, s.filter1, tp, LOCATION_GRAVE, 0, 1, 1, nil, e, tp)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, g, 2, tp, LOCATION_EXTRA)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if Duel.GetLocationCount(tp, LOCATION_MZONE) <= 0 then
  		return
  	end
  	local tc = Duel.GetFirstTarget()
  	if not tc:IsRelateToEffect(e) or tc:IsImmuneToEffect(e) then
  		return
  	end
  	if Duel.SpecialSummonStep(tc, 0, tp, tp, false, false, POS_FACEUP) then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_DISABLE)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  		tc:RegisterEffect(e1)
  		local e2 = Effect.CreateEffect(c)
  		e2:SetType(EFFECT_TYPE_SINGLE)
  		e2:SetCode(EFFECT_DISABLE_EFFECT)
  		e2:SetValue(RESET_TURN_SET)
  		e2:SetReset(RESET_EVENT + RESETS_STANDARD)
  		tc:RegisterEffect(e2)
  		if aux.MustMaterialCheck(tc, tp, EFFECT_MUST_BE_XMATERIAL) and not Duel.IsPlayerAffectedByEffect(tp, CARD_ID_0) then
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  			local g = Duel.SelectMatchingCard(tp, s.filter2, tp, LOCATION_EXTRA, 0, 1, 1, nil, e, tp, tc)
  			local sc = g:GetFirst()
  			if sc then
  				sc:SetMaterial(Group.FromCards(tc))
  				Duel.Overlay(sc, Group.FromCards(tc))
  				Duel.SpecialSummonStep(sc, SUMMON_TYPE_XYZ, tp, tp, false, false, POS_FACEUP)
  				sc:CompleteProcedure()
  				if c:IsRelateToEffect(e) and c:IsCanOverlay() then
  					c:CancelToGrave()
  					Duel.Overlay(sc, Group.FromCards(c))
  				end
  			end
  		end
  		Duel.SpecialSummonComplete()
  	end
  end
  
  
source_text: Rank-Up-Magic
  Target 1 Rank 4 Spellcaster Xyz Monster in your GY; Special Summon it (but negate its effects), then Special Summon 1 Rank 5 Spellcaster Xyz Monster from your Extra Deck, by using it as material, and if you do, attach this card to the Summoned monster (this is treated as an Xyz Summon). You can only activate 1 "Rank-Up-Magic Magical Force" per turn.
target_text: -- Rank-Up-Magic
  local CARD_ID_0 = 59822133 --Blue-Eyes Spirit Dragon
  local CARD_ID_1 = 6165656 --Number C88: Gimmick Puppet Disaster Leo
  local CARD_ID_2 = 48995978 --Number 88: Gimmick Puppet of Leo
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetHintTiming(0, TIMING_END_PHASE)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.filter1(c, e, tp)
  	return c:IsRank(4)
  		and c:IsRace(RACE_SPELLCASTER)
  		and c:IsType(TYPE_XYZ)
  		and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  		and Duel.IsExistingMatchingCard(s.filter2, tp, LOCATION_EXTRA, 0, 1, nil, e, tp, c)
  end
  function s.filter2(c, e, tp, mc)
  	if c:GetOriginalCode() == CARD_ID_1 and not mc:IsCode(CARD_ID_2) then
  		return false
  	end
  	return c:IsRank(5)
  		and c:IsRace(RACE_SPELLCASTER)
  		and c:IsType(TYPE_XYZ)
  		and mc:IsCanBeXyzMaterial(c)
  		and c:IsCanBeSpecialSummoned(e, SUMMON_TYPE_XYZ, tp, false, false)
  		and Duel.GetLocationCountFromEx(tp, tp, mc, c) > 0
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return chkc:IsControler(tp) and chkc:IsLocation(LOCATION_GRAVE) and s.filter1(chkc, e, tp)
  	end
  	if chk == 0 then
  		return not Duel.IsPlayerAffectedByEffect(tp, CARD_ID_0)
  			and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  			and aux.MustMaterialCheck(nil, tp, EFFECT_MUST_BE_XMATERIAL)
  			and Duel.IsExistingTarget(s.filter1, tp, LOCATION_GRAVE, 0, 1, nil, e, tp)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  	local g = Duel.SelectTarget(tp, s.filter1, tp, LOCATION_GRAVE, 0, 1, 1, nil, e, tp)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, g, 2, tp, LOCATION_EXTRA)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if Duel.GetLocationCount(tp, LOCATION_MZONE) <= 0 then
  		return
  	end
  	local tc = Duel.GetFirstTarget()
  	if not tc:IsRelateToEffect(e) or tc:IsImmuneToEffect(e) then
  		return
  	end
  	if Duel.SpecialSummonStep(tc, 0, tp, tp, false, false, POS_FACEUP) then
  		local e1 = Effect.CreateEffect(c)
  		e1:SetType(EFFECT_TYPE_SINGLE)
  		e1:SetCode(EFFECT_DISABLE)
  		e1:SetReset(RESET_EVENT + RESETS_STANDARD)
  		tc:RegisterEffect(e1)
  		local e2 = Effect.CreateEffect(c)
  		e2:SetType(EFFECT_TYPE_SINGLE)
  		e2:SetCode(EFFECT_DISABLE_EFFECT)
  		e2:SetValue(RESET_TURN_SET)
  		e2:SetReset(RESET_EVENT + RESETS_STANDARD)
  		tc:RegisterEffect(e2)
  		if aux.MustMaterialCheck(tc, tp, EFFECT_MUST_BE_XMATERIAL) and not Duel.IsPlayerAffectedByEffect(tp, CARD_ID_0) then
  			Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  			local g = Duel.SelectMatchingCard(tp, s.filter2, tp, LOCATION_EXTRA, 0, 1, 1, nil, e, tp, tc)
  			local sc = g:GetFirst()
  			if sc then
  				sc:SetMaterial(Group.FromCards(tc))
  				Duel.Overlay(sc, Group.FromCards(tc))
  				Duel.SpecialSummonStep(sc, SUMMON_TYPE_XYZ, tp, tp, false, false, POS_FACEUP)
  				sc:CompleteProcedure()
  				if c:IsRelateToEffect(e) and c:IsCanOverlay() then
  					c:CancelToGrave()
  					Duel.Overlay(sc, Group.FromCards(c))
  				end
  			end
  		end
  		Duel.SpecialSummonComplete()
  	end
  end
  
  