Shadow's
Target 1 DARK monster you control; Special Summon 1 LIGHT monster from your Deck or Extra Deck with the same original Type and Level. You can banish this card from your GY; during your Main Phase this turn, you can Normal Summon 1 LIGHT or DARK monster in addition to your Normal Summon/Set. (You can only gain this effect once per turn.) You can only use each effect of "Shadow's Light" once per turn. You cannot conduct your Battle Phase the turn you activate either of this card's effects.
local s, id, o = GetID()
function s.initial_effect(c)
	--Activate
	local e1 = Effect.CreateEffect(c)
	e1:SetDescription(aux.Stringid(id, 0))
	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
	e1:SetType(EFFECT_TYPE_ACTIVATE)
	e1:SetCode(EVENT_FREE_CHAIN)
	e1:SetCountLimit(1, id)
	e1:SetCost(s.cost1)
	e1:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
	--extra summon
	local e2 = Effect.CreateEffect(c)
	e2:SetDescription(aux.Stringid(id, 1))
	e2:SetType(EFFECT_TYPE_IGNITION)
	e2:SetRange(LOCATION_GRAVE)
	e2:SetCountLimit(1, id + 1)
	e2:SetCondition(s.sumcon)
	e2:SetCost(s.cost2)
	e2:SetTarget(s.sumtg)
	e2:SetOperation(s.sumop)
	c:RegisterEffect(e2)
end
function s.cost1(e, tp, eg, ep, ev, re, r, rp, chk)
	if chk == 0 then
		return Duel.GetActivityCount(tp, ACTIVITY_BATTLE_PHASE) == 0
	end
	local e1 = Effect.CreateEffect(e:GetHandler())
	e1:SetType(EFFECT_TYPE_FIELD)
	e1:SetCode(EFFECT_CANNOT_BP)
	e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET + EFFECT_FLAG_OATH)
	e1:SetTargetRange(1, 0)
	e1:SetReset(RESET_PHASE + PHASE_END)
	Duel.RegisterEffect(e1, tp)
end
function s.filter(c, e, tp)
	return c:IsFaceup() and c:IsAttribute(ATTRIBUTE_DARK) and c:GetOriginalLevel() > 0 and Duel.IsExistingMatchingCard(s.spfilter, tp, LOCATION_DECK + LOCATION_EXTRA, 0, 1, nil, e, tp, c)
end
function s.spfilter(c, e, tp, tc)
	local b1 = c:IsLocation(LOCATION_DECK) and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
	local b2 = c:IsLocation(LOCATION_EXTRA) and Duel.GetLocationCountFromEx(tp, tp, nil, c) > 0
	return c:IsAttribute(ATTRIBUTE_LIGHT)
		and c:GetOriginalRace() == tc:GetOriginalRace()
		and c:GetOriginalLevel() == tc:GetOriginalLevel()
		and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
		and (b1 or b2)
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.filter(chkc, e, tp)
	end
	if chk == 0 then
		return Duel.IsExistingTarget(s.filter, tp, LOCATION_MZONE, 0, 1, nil, e, tp)
	end
	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
	local g = Duel.SelectTarget(tp, s.filter, tp, LOCATION_MZONE, 0, 1, 1, nil, e, tp)
	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_DECK + LOCATION_EXTRA)
end
function s.activate(e, tp, eg, ep, ev, re, r, rp)
	local c = e:GetHandler()
	local tc = Duel.GetFirstTarget()
	if tc:IsRelateToEffect(e) and tc:IsFaceup() then
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
		local g = Duel.SelectMatchingCard(tp, s.spfilter, tp, LOCATION_DECK + LOCATION_EXTRA, 0, 1, 1, nil, e, tp, tc)
		if g:GetCount() > 0 then
			Duel.SpecialSummon(g, 0, tp, tp, false, false, POS_FACEUP)
		end
	end
end
function s.sumcon(e, tp, eg, ep, ev, re, r, rp)
	return Duel.GetFlagEffect(tp, id) == 0
end
function s.cost2(e, tp, eg, ep, ev, re, r, rp, chk)
	local c = e:GetHandler()
	if chk == 0 then
		return s.cost1(e, tp, eg, ep, ev, re, r, rp, 0) and c:IsAbleToRemove()
	end
	Duel.Remove(c, POS_FACEUP, REASON_COST)
	s.cost1(e, tp, eg, ep, ev, re, r, rp, 1)
end
function s.sumtg(e, tp, eg, ep, ev, re, r, rp, chk)
	if chk == 0 then
		return Duel.IsPlayerCanSummon(tp) and Duel.IsPlayerCanAdditionalSummon(tp)
	end
end
function s.sumop(e, tp, eg, ep, ev, re, r, rp)
	local e1 = Effect.CreateEffect(e:GetHandler())
	e1:SetDescription(aux.Stringid(id, 2))
	e1:SetType(EFFECT_TYPE_FIELD)
	e1:SetCode(EFFECT_EXTRA_SUMMON_COUNT)
	e1:SetTargetRange(LOCATION_HAND + LOCATION_MZONE, 0)
	e1:SetTarget(aux.TargetBoolFunction(Card.IsAttribute, ATTRIBUTE_LIGHT + ATTRIBUTE_DARK))
	e1:SetReset(RESET_PHASE + PHASE_END)
	Duel.RegisterEffect(e1, tp)
	Duel.RegisterFlagEffect(tp, id, RESET_PHASE + PHASE_END, 0, 1)
end


Shadow's
Target 1 DARK monster you control; Special Summon 1 LIGHT monster from your Deck or Extra Deck with the same original Type and Level. You can banish this card from your GY; during your Main Phase this turn, you can Normal Summon 1 LIGHT or DARK monster in addition to your Normal Summon/Set. (You can only gain this effect once per turn.) You can only use each effect of "Shadow's Light" once per turn. You cannot conduct your Battle Phase the turn you activate either of this card's effects.
-- Shadow's
local s, id, o = GetID()
function s.initial_effect(c)
	--Activate
	local e1 = Effect.CreateEffect(c)
	e1:SetDescription(aux.Stringid(id, 0))
	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
	e1:SetType(EFFECT_TYPE_ACTIVATE)
	e1:SetCode(EVENT_FREE_CHAIN)
	e1:SetCountLimit(1, id)
	e1:SetCost(s.cost1)
	e1:SetTarget(s.target)
	e1:SetOperation(s.activate)
	c:RegisterEffect(e1)
	--extra summon
	local e2 = Effect.CreateEffect(c)
	e2:SetDescription(aux.Stringid(id, 1))
	e2:SetType(EFFECT_TYPE_IGNITION)
	e2:SetRange(LOCATION_GRAVE)
	e2:SetCountLimit(1, id + 1)
	e2:SetCondition(s.sumcon)
	e2:SetCost(s.cost2)
	e2:SetTarget(s.sumtg)
	e2:SetOperation(s.sumop)
	c:RegisterEffect(e2)
end
function s.cost1(e, tp, eg, ep, ev, re, r, rp, chk)
	if chk == 0 then
		return Duel.GetActivityCount(tp, ACTIVITY_BATTLE_PHASE) == 0
	end
	local e1 = Effect.CreateEffect(e:GetHandler())
	e1:SetType(EFFECT_TYPE_FIELD)
	e1:SetCode(EFFECT_CANNOT_BP)
	e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET + EFFECT_FLAG_OATH)
	e1:SetTargetRange(1, 0)
	e1:SetReset(RESET_PHASE + PHASE_END)
	Duel.RegisterEffect(e1, tp)
end
function s.filter(c, e, tp)
	return c:IsFaceup() and c:IsAttribute(ATTRIBUTE_DARK) and c:GetOriginalLevel() > 0 and Duel.IsExistingMatchingCard(s.spfilter, tp, LOCATION_DECK + LOCATION_EXTRA, 0, 1, nil, e, tp, c)
end
function s.spfilter(c, e, tp, tc)
	local b1 = c:IsLocation(LOCATION_DECK) and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
	local b2 = c:IsLocation(LOCATION_EXTRA) and Duel.GetLocationCountFromEx(tp, tp, nil, c) > 0
	return c:IsAttribute(ATTRIBUTE_LIGHT)
		and c:GetOriginalRace() == tc:GetOriginalRace()
		and c:GetOriginalLevel() == tc:GetOriginalLevel()
		and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
		and (b1 or b2)
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.filter(chkc, e, tp)
	end
	if chk == 0 then
		return Duel.IsExistingTarget(s.filter, tp, LOCATION_MZONE, 0, 1, nil, e, tp)
	end
	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
	local g = Duel.SelectTarget(tp, s.filter, tp, LOCATION_MZONE, 0, 1, 1, nil, e, tp)
	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_DECK + LOCATION_EXTRA)
end
function s.activate(e, tp, eg, ep, ev, re, r, rp)
	local c = e:GetHandler()
	local tc = Duel.GetFirstTarget()
	if tc:IsRelateToEffect(e) and tc:IsFaceup() then
		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
		local g = Duel.SelectMatchingCard(tp, s.spfilter, tp, LOCATION_DECK + LOCATION_EXTRA, 0, 1, 1, nil, e, tp, tc)
		if g:GetCount() > 0 then
			Duel.SpecialSummon(g, 0, tp, tp, false, false, POS_FACEUP)
		end
	end
end
function s.sumcon(e, tp, eg, ep, ev, re, r, rp)
	return Duel.GetFlagEffect(tp, id) == 0
end
function s.cost2(e, tp, eg, ep, ev, re, r, rp, chk)
	local c = e:GetHandler()
	if chk == 0 then
		return s.cost1(e, tp, eg, ep, ev, re, r, rp, 0) and c:IsAbleToRemove()
	end
	Duel.Remove(c, POS_FACEUP, REASON_COST)
	s.cost1(e, tp, eg, ep, ev, re, r, rp, 1)
end
function s.sumtg(e, tp, eg, ep, ev, re, r, rp, chk)
	if chk == 0 then
		return Duel.IsPlayerCanSummon(tp) and Duel.IsPlayerCanAdditionalSummon(tp)
	end
end
function s.sumop(e, tp, eg, ep, ev, re, r, rp)
	local e1 = Effect.CreateEffect(e:GetHandler())
	e1:SetDescription(aux.Stringid(id, 2))
	e1:SetType(EFFECT_TYPE_FIELD)
	e1:SetCode(EFFECT_EXTRA_SUMMON_COUNT)
	e1:SetTargetRange(LOCATION_HAND + LOCATION_MZONE, 0)
	e1:SetTarget(aux.TargetBoolFunction(Card.IsAttribute, ATTRIBUTE_LIGHT + ATTRIBUTE_DARK))
	e1:SetReset(RESET_PHASE + PHASE_END)
	Duel.RegisterEffect(e1, tp)
	Duel.RegisterFlagEffect(tp, id, RESET_PHASE + PHASE_END, 0, 1)
end

