name: Full
card_text: Tribute 1 DARK monster with 2000 or more DEF; look at your opponent's hand, all monsters they control, and all cards they draw until the end of their 3rd turn after this card resolves, and destroy all those monsters with 1500 or less DEF.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DESTROY)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetHintTiming(0, TIMING_TOHAND + TIMINGS_CHECK_MONSTER)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.costfilter(c)
  	return c:IsAttribute(ATTRIBUTE_DARK) and c:IsDefenseAbove(2000)
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.CheckReleaseGroup(tp, s.costfilter, 1, nil)
  	end
  	local g = Duel.SelectReleaseGroup(tp, s.costfilter, 1, 1, nil)
  	Duel.Release(g, REASON_COST)
  end
  function s.tgfilter(c)
  	return c:IsFaceup() and c:IsDefenseBelow(1500)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local g = Duel.GetMatchingGroup(s.tgfilter, tp, 0, LOCATION_MZONE, nil)
  	Duel.SetOperationInfo(0, CATEGORY_DESTROY, g, g:GetCount(), 0, 0)
  end
  function s.filter(c)
  	return c:IsType(TYPE_MONSTER) and c:IsDefenseBelow(1500)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local conf = Duel.GetFieldGroup(tp, 0, LOCATION_MZONE + LOCATION_HAND)
  	if conf:GetCount() > 0 then
  		Duel.ConfirmCards(tp, conf)
  		local dg = conf:Filter(s.filter, nil)
  		Duel.Destroy(dg, REASON_EFFECT)
  		Duel.ShuffleHand(1 - tp)
  	end
  	local e1 = Effect.CreateEffect(e:GetHandler())
  	e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e1:SetProperty(EFFECT_FLAG_DELAY)
  	e1:SetCode(EVENT_DRAW)
  	e1:SetOperation(s.desop)
  	e1:SetReset(RESET_PHASE + PHASE_END + RESET_OPPO_TURN, 3)
  	Duel.RegisterEffect(e1, tp)
  	local e2 = Effect.CreateEffect(e:GetHandler())
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e2:SetCode(EVENT_PHASE + PHASE_END)
  	e2:SetCountLimit(1)
  	e2:SetCondition(s.turncon)
  	e2:SetOperation(s.turnop)
  	e2:SetReset(RESET_PHASE + PHASE_END + RESET_OPPO_TURN, 3)
  	Duel.RegisterEffect(e2, tp)
  	e2:SetLabelObject(e1)
  	e:GetHandler():RegisterFlagEffect(1082946, RESET_PHASE + PHASE_END + RESET_OPPO_TURN, 0, 3)
  	s[e:GetHandler()] = e2
  end
  function s.desop(e, tp, eg, ep, ev, re, r, rp)
  	if ep == e:GetOwnerPlayer() then
  		return
  	end
  	local hg = eg:Filter(Card.IsLocation, nil, LOCATION_HAND)
  	if hg:GetCount() == 0 then
  		return
  	end
  	Duel.ConfirmCards(1 - ep, hg)
  	local dg = hg:Filter(s.filter, nil)
  	Duel.Destroy(dg, REASON_EFFECT)
  	Duel.ShuffleHand(ep)
  end
  function s.turncon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetTurnPlayer() ~= tp
  end
  function s.turnop(e, tp, eg, ep, ev, re, r, rp)
  	local ct = e:GetLabel()
  	ct = ct + 1
  	e:SetLabel(ct)
  	e:GetHandler():SetTurnCounter(ct)
  	if ct == 3 then
  		e:GetLabelObject():Reset()
  		e:GetOwner():ResetFlagEffect(1082946)
  	end
  end
  
  
source_text: Full
  Tribute 1 DARK monster with 2000 or more DEF; look at your opponent's hand, all monsters they control, and all cards they draw until the end of their 3rd turn after this card resolves, and destroy all those monsters with 1500 or less DEF.
target_text: -- Full
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DESTROY)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetHintTiming(0, TIMING_TOHAND + TIMINGS_CHECK_MONSTER)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.costfilter(c)
  	return c:IsAttribute(ATTRIBUTE_DARK) and c:IsDefenseAbove(2000)
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.CheckReleaseGroup(tp, s.costfilter, 1, nil)
  	end
  	local g = Duel.SelectReleaseGroup(tp, s.costfilter, 1, 1, nil)
  	Duel.Release(g, REASON_COST)
  end
  function s.tgfilter(c)
  	return c:IsFaceup() and c:IsDefenseBelow(1500)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return true
  	end
  	local g = Duel.GetMatchingGroup(s.tgfilter, tp, 0, LOCATION_MZONE, nil)
  	Duel.SetOperationInfo(0, CATEGORY_DESTROY, g, g:GetCount(), 0, 0)
  end
  function s.filter(c)
  	return c:IsType(TYPE_MONSTER) and c:IsDefenseBelow(1500)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local conf = Duel.GetFieldGroup(tp, 0, LOCATION_MZONE + LOCATION_HAND)
  	if conf:GetCount() > 0 then
  		Duel.ConfirmCards(tp, conf)
  		local dg = conf:Filter(s.filter, nil)
  		Duel.Destroy(dg, REASON_EFFECT)
  		Duel.ShuffleHand(1 - tp)
  	end
  	local e1 = Effect.CreateEffect(e:GetHandler())
  	e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e1:SetProperty(EFFECT_FLAG_DELAY)
  	e1:SetCode(EVENT_DRAW)
  	e1:SetOperation(s.desop)
  	e1:SetReset(RESET_PHASE + PHASE_END + RESET_OPPO_TURN, 3)
  	Duel.RegisterEffect(e1, tp)
  	local e2 = Effect.CreateEffect(e:GetHandler())
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e2:SetCode(EVENT_PHASE + PHASE_END)
  	e2:SetCountLimit(1)
  	e2:SetCondition(s.turncon)
  	e2:SetOperation(s.turnop)
  	e2:SetReset(RESET_PHASE + PHASE_END + RESET_OPPO_TURN, 3)
  	Duel.RegisterEffect(e2, tp)
  	e2:SetLabelObject(e1)
  	e:GetHandler():RegisterFlagEffect(1082946, RESET_PHASE + PHASE_END + RESET_OPPO_TURN, 0, 3)
  	s[e:GetHandler()] = e2
  end
  function s.desop(e, tp, eg, ep, ev, re, r, rp)
  	if ep == e:GetOwnerPlayer() then
  		return
  	end
  	local hg = eg:Filter(Card.IsLocation, nil, LOCATION_HAND)
  	if hg:GetCount() == 0 then
  		return
  	end
  	Duel.ConfirmCards(1 - ep, hg)
  	local dg = hg:Filter(s.filter, nil)
  	Duel.Destroy(dg, REASON_EFFECT)
  	Duel.ShuffleHand(ep)
  end
  function s.turncon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetTurnPlayer() ~= tp
  end
  function s.turnop(e, tp, eg, ep, ev, re, r, rp)
  	local ct = e:GetLabel()
  	ct = ct + 1
  	e:SetLabel(ct)
  	e:GetHandler():SetTurnCounter(ct)
  	if ct == 3 then
  		e:GetLabelObject():Reset()
  		e:GetOwner():ResetFlagEffect(1082946)
  	end
  end
  
  