Rank-Up-Magic
● During your turn: Target 1 "Raidraptor" Xyz Monster you control; Special Summon from your Extra Deck, 1 "Raidraptor" monster that is 1 Rank higher than that target, by using that target as the Xyz Material.
● During your opponent's turn: Target 1 Xyz Monster your opponent controls with no Xyz Materials; take control of that Xyz Monster, then Special Summon from your Extra Deck, 1 "Raidraptor" monster that is 1 Rank higher than that monster, by using it as the Xyz Material.
(These Special Summons are treated as Xyz Summons. Attached Xyz Materials also become Xyz Materials on the Summoned monster.)
local SETCARD_ID_0 = 0xba --Raidraptor

local SETCARD_ID_0 = 0xba --Raidraptor
local s, id, o = GetID()
function s.initial_effect(c)
	--Activate
	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:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
end
function s.filter1(c, e, tp)
	local rk = c:GetRank()
	return rk > 0
		and c:IsFaceup()
		and c:IsSetCard(SETCARD_ID_0)
		and Duel.IsExistingMatchingCard(s.filter3, tp, LOCATION_EXTRA, 0, 1, nil, e, tp, c, rk + 1)
		and aux.MustMaterialCheck(c, tp, EFFECT_MUST_BE_XMATERIAL)
end
function s.filter2(c, e, tp)
	local rk = c:GetRank()
	return rk > 0
		and c:IsFaceup()
		and c:GetOverlayCount() == 0
		and c:IsControlerCanBeChanged()
		and aux.MustMaterialCheck(c, 1 - tp, EFFECT_MUST_BE_XMATERIAL)
		and Duel.IsExistingMatchingCard(s.filter3, tp, LOCATION_EXTRA, 0, 1, nil, e, tp, c, rk + 1)
end
function s.filter3(c, e, tp, mc, rk)
	return c:IsRank(rk) and c:IsSetCard(SETCARD_ID_0) 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 Duel.GetTurnPlayer() == tp then
		if chkc then
			return chkc:IsControler(tp) and chkc:IsLocation(LOCATION_MZONE) and s.filter1(chkc, e, tp)
		end
		if chk == 0 then
			return Duel.IsExistingTarget(s.filter1, tp, LOCATION_MZONE, 0, 1, nil, e, tp)
		end
		e:SetCategory(CATEGORY_SPECIAL_SUMMON)
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
		Duel.SelectTarget(tp, s.filter1, tp, LOCATION_MZONE, 0, 1, 1, nil, e, tp)
	else
		if chkc then
			return chkc:IsControler(1 - tp) and chkc:IsLocation(LOCATION_MZONE) and s.filter2(chkc, e, tp)
		end
		if chk == 0 then
			return Duel.IsExistingTarget(s.filter2, tp, 0, LOCATION_MZONE, 1, nil, e, tp)
		end
		e:SetCategory(CATEGORY_SPECIAL_SUMMON + CATEGORY_CONTROL)
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
		local g = Duel.SelectTarget(tp, s.filter2, tp, 0, LOCATION_MZONE, 1, 1, nil, e, tp)
		Duel.SetOperationInfo(0, CATEGORY_CONTROL, g, 1, 0, 0)
	end
	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_EXTRA)
end
function s.activate(e, tp, eg, ep, ev, re, r, rp)
	local tc = Duel.GetFirstTarget()
	if Duel.GetTurnPlayer() ~= tp then
		if not tc:IsRelateToEffect(e) or tc:IsFacedown() then
			return
		end
		if Duel.GetControl(tc, tp) == 0 then
			return
		end
		Duel.BreakEffect()
	end
	if not aux.MustMaterialCheck(tc, tp, EFFECT_MUST_BE_XMATERIAL) then
		return
	end
	if tc:IsFacedown() or not tc:IsRelateToEffect(e) or tc:IsControler(1 - tp) or tc:IsImmuneToEffect(e) then
		return
	end
	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
	local g = Duel.SelectMatchingCard(tp, s.filter3, tp, LOCATION_EXTRA, 0, 1, 1, nil, e, tp, tc, tc:GetRank() + 1)
	local sc = g:GetFirst()
	if sc then
		local mg = tc:GetOverlayGroup()
		if mg:GetCount() ~= 0 then
			Duel.Overlay(sc, mg)
		end
		sc:SetMaterial(Group.FromCards(tc))
		Duel.Overlay(sc, Group.FromCards(tc))
		Duel.SpecialSummon(sc, SUMMON_TYPE_XYZ, tp, tp, false, false, POS_FACEUP)
		sc:CompleteProcedure()
	end
end


Rank-Up-Magic
● During your turn: Target 1 "Raidraptor" Xyz Monster you control; Special Summon from your Extra Deck, 1 "Raidraptor" monster that is 1 Rank higher than that target, by using that target as the Xyz Material.
● During your opponent's turn: Target 1 Xyz Monster your opponent controls with no Xyz Materials; take control of that Xyz Monster, then Special Summon from your Extra Deck, 1 "Raidraptor" monster that is 1 Rank higher than that monster, by using it as the Xyz Material.
(These Special Summons are treated as Xyz Summons. Attached Xyz Materials also become Xyz Materials on the Summoned monster.)
-- Rank-Up-Magic
local SETCARD_ID_0 = 0xba --Raidraptor
local s, id, o = GetID()
function s.initial_effect(c)
	--Activate
	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:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
end
function s.filter1(c, e, tp)
	local rk = c:GetRank()
	return rk > 0
		and c:IsFaceup()
		and c:IsSetCard(SETCARD_ID_0)
		and Duel.IsExistingMatchingCard(s.filter3, tp, LOCATION_EXTRA, 0, 1, nil, e, tp, c, rk + 1)
		and aux.MustMaterialCheck(c, tp, EFFECT_MUST_BE_XMATERIAL)
end
function s.filter2(c, e, tp)
	local rk = c:GetRank()
	return rk > 0
		and c:IsFaceup()
		and c:GetOverlayCount() == 0
		and c:IsControlerCanBeChanged()
		and aux.MustMaterialCheck(c, 1 - tp, EFFECT_MUST_BE_XMATERIAL)
		and Duel.IsExistingMatchingCard(s.filter3, tp, LOCATION_EXTRA, 0, 1, nil, e, tp, c, rk + 1)
end
function s.filter3(c, e, tp, mc, rk)
	return c:IsRank(rk) and c:IsSetCard(SETCARD_ID_0) 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 Duel.GetTurnPlayer() == tp then
		if chkc then
			return chkc:IsControler(tp) and chkc:IsLocation(LOCATION_MZONE) and s.filter1(chkc, e, tp)
		end
		if chk == 0 then
			return Duel.IsExistingTarget(s.filter1, tp, LOCATION_MZONE, 0, 1, nil, e, tp)
		end
		e:SetCategory(CATEGORY_SPECIAL_SUMMON)
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
		Duel.SelectTarget(tp, s.filter1, tp, LOCATION_MZONE, 0, 1, 1, nil, e, tp)
	else
		if chkc then
			return chkc:IsControler(1 - tp) and chkc:IsLocation(LOCATION_MZONE) and s.filter2(chkc, e, tp)
		end
		if chk == 0 then
			return Duel.IsExistingTarget(s.filter2, tp, 0, LOCATION_MZONE, 1, nil, e, tp)
		end
		e:SetCategory(CATEGORY_SPECIAL_SUMMON + CATEGORY_CONTROL)
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
		local g = Duel.SelectTarget(tp, s.filter2, tp, 0, LOCATION_MZONE, 1, 1, nil, e, tp)
		Duel.SetOperationInfo(0, CATEGORY_CONTROL, g, 1, 0, 0)
	end
	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_EXTRA)
end
function s.activate(e, tp, eg, ep, ev, re, r, rp)
	local tc = Duel.GetFirstTarget()
	if Duel.GetTurnPlayer() ~= tp then
		if not tc:IsRelateToEffect(e) or tc:IsFacedown() then
			return
		end
		if Duel.GetControl(tc, tp) == 0 then
			return
		end
		Duel.BreakEffect()
	end
	if not aux.MustMaterialCheck(tc, tp, EFFECT_MUST_BE_XMATERIAL) then
		return
	end
	if tc:IsFacedown() or not tc:IsRelateToEffect(e) or tc:IsControler(1 - tp) or tc:IsImmuneToEffect(e) then
		return
	end
	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
	local g = Duel.SelectMatchingCard(tp, s.filter3, tp, LOCATION_EXTRA, 0, 1, 1, nil, e, tp, tc, tc:GetRank() + 1)
	local sc = g:GetFirst()
	if sc then
		local mg = tc:GetOverlayGroup()
		if mg:GetCount() ~= 0 then
			Duel.Overlay(sc, mg)
		end
		sc:SetMaterial(Group.FromCards(tc))
		Duel.Overlay(sc, Group.FromCards(tc))
		Duel.SpecialSummon(sc, SUMMON_TYPE_XYZ, tp, tp, false, false, POS_FACEUP)
		sc:CompleteProcedure()
	end
end

