name: Dark
card_text: When a monster(s) would be Normal or Special Summoned: You can negate the Summon, and if you do, destroy that monster(s), then discard 1 Fiend monster. If a "Dark World" monster(s) you control would be destroyed by battle or an opponent's card effect, you can banish this card from your GY instead. You can only use each effect of "Dark World Punishment" once per turn.
external_ids: local SETCARD_ID_0 = 0x6 --Dark
  
lua: local SETCARD_ID_0 = 0x6 --Dark
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Negate Normal Summon or Special Summon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DISABLE_SUMMON + CATEGORY_DESTROY + CATEGORY_HANDES)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_SUMMON)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(aux.NegateSummonCondition)
  	e1:SetTarget(s.destg)
  	e1:SetOperation(s.desop)
  	c:RegisterEffect(e1)
  	local e2 = e1:Clone()
  	e2:SetCode(EVENT_SPSUMMON)
  	c:RegisterEffect(e2)
  	--Destroy Replace
  	local e3 = Effect.CreateEffect(c)
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e3:SetCode(EFFECT_DESTROY_REPLACE)
  	e3:SetRange(LOCATION_GRAVE)
  	e3:SetCountLimit(1, id + o)
  	e3:SetTarget(s.reptg)
  	e3:SetValue(s.repval)
  	e3:SetOperation(s.repop)
  	c:RegisterEffect(e3)
  end
  function s.tgfilter(c)
  	return c:IsRace(RACE_FIEND) and c:IsDiscardable(REASON_EFFECT)
  end
  function s.destg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.tgfilter, tp, LOCATION_HAND, 0, 1, nil)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_DISABLE_SUMMON, eg, eg:GetCount(), 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_DESTROY, eg, eg:GetCount(), 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_HANDES, nil, 1, tp, 1)
  end
  function s.desop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.NegateSummon(eg)
  	if Duel.Destroy(eg, REASON_EFFECT) == 0 then
  		return
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
  	local g = Duel.SelectMatchingCard(tp, s.tgfilter, tp, LOCATION_HAND, 0, 1, 1, nil)
  	if g:GetCount() > 0 then
  		Duel.BreakEffect()
  		Duel.SendtoGrave(g, REASON_EFFECT + REASON_DISCARD)
  	end
  end
  function s.repfilter(c, tp)
  	return c:IsFaceup()
  		and c:IsSetCard(SETCARD_ID_0)
  		and c:IsLocation(LOCATION_MZONE)
  		and c:IsControler(tp)
  		and not c:IsReason(REASON_REPLACE)
  		and (c:IsReason(REASON_BATTLE) or c:IsReason(REASON_EFFECT) and c:GetReasonPlayer() == 1 - tp)
  end
  function s.reptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():IsAbleToRemove() and eg:IsExists(s.repfilter, 1, nil, tp)
  	end
  	return Duel.SelectEffectYesNo(tp, e:GetHandler(), 96)
  end
  function s.repval(e, c)
  	return s.repfilter(c, e:GetHandlerPlayer())
  end
  function s.repop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.Remove(e:GetHandler(), POS_FACEUP, REASON_EFFECT)
  end
  
  
source_text: Dark
  When a monster(s) would be Normal or Special Summoned: You can negate the Summon, and if you do, destroy that monster(s), then discard 1 Fiend monster. If a "Dark World" monster(s) you control would be destroyed by battle or an opponent's card effect, you can banish this card from your GY instead. You can only use each effect of "Dark World Punishment" once per turn.
target_text: -- Dark
  local SETCARD_ID_0 = 0x6 --Dark
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Negate Normal Summon or Special Summon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DISABLE_SUMMON + CATEGORY_DESTROY + CATEGORY_HANDES)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_SUMMON)
  	e1:SetCountLimit(1, id)
  	e1:SetCondition(aux.NegateSummonCondition)
  	e1:SetTarget(s.destg)
  	e1:SetOperation(s.desop)
  	c:RegisterEffect(e1)
  	local e2 = e1:Clone()
  	e2:SetCode(EVENT_SPSUMMON)
  	c:RegisterEffect(e2)
  	--Destroy Replace
  	local e3 = Effect.CreateEffect(c)
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e3:SetCode(EFFECT_DESTROY_REPLACE)
  	e3:SetRange(LOCATION_GRAVE)
  	e3:SetCountLimit(1, id + o)
  	e3:SetTarget(s.reptg)
  	e3:SetValue(s.repval)
  	e3:SetOperation(s.repop)
  	c:RegisterEffect(e3)
  end
  function s.tgfilter(c)
  	return c:IsRace(RACE_FIEND) and c:IsDiscardable(REASON_EFFECT)
  end
  function s.destg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.tgfilter, tp, LOCATION_HAND, 0, 1, nil)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_DISABLE_SUMMON, eg, eg:GetCount(), 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_DESTROY, eg, eg:GetCount(), 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_HANDES, nil, 1, tp, 1)
  end
  function s.desop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.NegateSummon(eg)
  	if Duel.Destroy(eg, REASON_EFFECT) == 0 then
  		return
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
  	local g = Duel.SelectMatchingCard(tp, s.tgfilter, tp, LOCATION_HAND, 0, 1, 1, nil)
  	if g:GetCount() > 0 then
  		Duel.BreakEffect()
  		Duel.SendtoGrave(g, REASON_EFFECT + REASON_DISCARD)
  	end
  end
  function s.repfilter(c, tp)
  	return c:IsFaceup()
  		and c:IsSetCard(SETCARD_ID_0)
  		and c:IsLocation(LOCATION_MZONE)
  		and c:IsControler(tp)
  		and not c:IsReason(REASON_REPLACE)
  		and (c:IsReason(REASON_BATTLE) or c:IsReason(REASON_EFFECT) and c:GetReasonPlayer() == 1 - tp)
  end
  function s.reptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():IsAbleToRemove() and eg:IsExists(s.repfilter, 1, nil, tp)
  	end
  	return Duel.SelectEffectYesNo(tp, e:GetHandler(), 96)
  end
  function s.repval(e, c)
  	return s.repfilter(c, e:GetHandlerPlayer())
  end
  function s.repop(e, tp, eg, ep, ev, re, r, rp)
  	Duel.Remove(e:GetHandler(), POS_FACEUP, REASON_EFFECT)
  end
  
  