name: Ragnaraika
card_text: 2+ Insect, Plant, and/or Reptile monsters
  If a monster(s) is Special Summoned from your opponent's Deck and/or Extra Deck (except during the Damage Step): You can destroy 2 monsters on the field. If this card is in your GY: You can target 1 Insect, Plant, or Reptile monster you control; place it on the bottom of the Deck, and if you do, Special Summon this card, also you cannot Special Summon for the rest of this turn, except Insect, Plant, or Reptile monsters. You can only use each effect of "Ragnaraika Stag Sovereign" once per turn.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--link summon
  	aux.AddLinkProcedure(c, aux.FilterBoolFunction(Card.IsLinkRace, RACE_INSECT + RACE_PLANT + RACE_REPTILE), 2, 5)
  	c:EnableReviveLimit()
  	--destroy
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DESTROY)
  	e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e1:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e1:SetProperty(EFFECT_FLAG_DELAY)
  	e1:SetCountLimit(1, id)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCondition(s.decon)
  	e1:SetTarget(s.detg)
  	e1:SetOperation(s.deop)
  	c:RegisterEffect(e1)
  	--special summon
  	local e2 = Effect.CreateEffect(c)
  	e2:SetCategory(CATEGORY_TODECK + CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id + o)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	c:RegisterEffect(e2)
  end
  function s.defilter(c, tp)
  	return c:IsSummonLocation(LOCATION_DECK + LOCATION_EXTRA) and c:IsSummonPlayer(1 - tp)
  end
  function s.decon(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(s.defilter, 1, nil, tp)
  end
  function s.detg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(nil, tp, LOCATION_MZONE, LOCATION_MZONE, 2, nil)
  	end
  	local g = Duel.GetMatchingGroup(nil, tp, LOCATION_MZONE, LOCATION_MZONE, nil)
  	Duel.SetOperationInfo(0, CATEGORY_DESTROY, g, 2, 0, 0)
  end
  function s.deop(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetMatchingGroup(nil, tp, LOCATION_MZONE, LOCATION_MZONE, nil)
  	if g:GetCount() < 2 then
  		return
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DESTROY)
  	local sg = Duel.SelectMatchingCard(tp, nil, tp, LOCATION_MZONE, LOCATION_MZONE, 2, 2, nil)
  	if sg:GetCount() == 2 then
  		Duel.HintSelection(sg)
  		Duel.Destroy(sg, REASON_EFFECT)
  	end
  end
  function s.spfilter(c, tp)
  	return Duel.GetMZoneCount(tp, c) > 0 and c:IsFaceup() and c:IsRace(RACE_INSECT + RACE_PLANT + RACE_REPTILE) and c:IsAbleToDeck()
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	local c = e:GetHandler()
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and s.spfilter(chkc, tp)
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(s.spfilter, tp, LOCATION_MZONE, 0, 1, nil, tp) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false, POS_FACEUP)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TODECK)
  	local g = Duel.SelectTarget(tp, s.spfilter, tp, LOCATION_MZONE, 0, 1, 1, nil, tp)
  	Duel.SetOperationInfo(0, CATEGORY_TODECK, g, #g, 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = Duel.GetFirstTarget()
  	if
  		tc:IsRelateToEffect(e)
  		and tc:IsType(TYPE_MONSTER)
  		and Duel.SendtoDeck(tc, nil, SEQ_DECKBOTTOM, REASON_EFFECT) ~= 0
  		and tc:IsLocation(LOCATION_DECK + LOCATION_EXTRA)
  		and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  		and c:IsRelateToEffect(e)
  	then
  		Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  	end
  	local e1 = Effect.CreateEffect(e:GetHandler())
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET + EFFECT_FLAG_OATH)
  	e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
  	e1:SetTargetRange(1, 0)
  	e1:SetTarget(s.splimit)
  	e1:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e1, tp)
  end
  function s.splimit(e, c, sump, sumtype, sumpos, targetp, se)
  	return not c:IsRace(RACE_INSECT + RACE_PLANT + RACE_REPTILE)
  end
  
  
source_text: Ragnaraika
  2+ Insect, Plant, and/or Reptile monsters
  If a monster(s) is Special Summoned from your opponent's Deck and/or Extra Deck (except during the Damage Step): You can destroy 2 monsters on the field. If this card is in your GY: You can target 1 Insect, Plant, or Reptile monster you control; place it on the bottom of the Deck, and if you do, Special Summon this card, also you cannot Special Summon for the rest of this turn, except Insect, Plant, or Reptile monsters. You can only use each effect of "Ragnaraika Stag Sovereign" once per turn.
target_text: -- Ragnaraika
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--link summon
  	aux.AddLinkProcedure(c, aux.FilterBoolFunction(Card.IsLinkRace, RACE_INSECT + RACE_PLANT + RACE_REPTILE), 2, 5)
  	c:EnableReviveLimit()
  	--destroy
  	local e1 = Effect.CreateEffect(c)
  	e1:SetCategory(CATEGORY_DESTROY)
  	e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e1:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e1:SetProperty(EFFECT_FLAG_DELAY)
  	e1:SetCountLimit(1, id)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCondition(s.decon)
  	e1:SetTarget(s.detg)
  	e1:SetOperation(s.deop)
  	c:RegisterEffect(e1)
  	--special summon
  	local e2 = Effect.CreateEffect(c)
  	e2:SetCategory(CATEGORY_TODECK + CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id + o)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	c:RegisterEffect(e2)
  end
  function s.defilter(c, tp)
  	return c:IsSummonLocation(LOCATION_DECK + LOCATION_EXTRA) and c:IsSummonPlayer(1 - tp)
  end
  function s.decon(e, tp, eg, ep, ev, re, r, rp)
  	return eg:IsExists(s.defilter, 1, nil, tp)
  end
  function s.detg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(nil, tp, LOCATION_MZONE, LOCATION_MZONE, 2, nil)
  	end
  	local g = Duel.GetMatchingGroup(nil, tp, LOCATION_MZONE, LOCATION_MZONE, nil)
  	Duel.SetOperationInfo(0, CATEGORY_DESTROY, g, 2, 0, 0)
  end
  function s.deop(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetMatchingGroup(nil, tp, LOCATION_MZONE, LOCATION_MZONE, nil)
  	if g:GetCount() < 2 then
  		return
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DESTROY)
  	local sg = Duel.SelectMatchingCard(tp, nil, tp, LOCATION_MZONE, LOCATION_MZONE, 2, 2, nil)
  	if sg:GetCount() == 2 then
  		Duel.HintSelection(sg)
  		Duel.Destroy(sg, REASON_EFFECT)
  	end
  end
  function s.spfilter(c, tp)
  	return Duel.GetMZoneCount(tp, c) > 0 and c:IsFaceup() and c:IsRace(RACE_INSECT + RACE_PLANT + RACE_REPTILE) and c:IsAbleToDeck()
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	local c = e:GetHandler()
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and s.spfilter(chkc, tp)
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(s.spfilter, tp, LOCATION_MZONE, 0, 1, nil, tp) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false, POS_FACEUP)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TODECK)
  	local g = Duel.SelectTarget(tp, s.spfilter, tp, LOCATION_MZONE, 0, 1, 1, nil, tp)
  	Duel.SetOperationInfo(0, CATEGORY_TODECK, g, #g, 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = Duel.GetFirstTarget()
  	if
  		tc:IsRelateToEffect(e)
  		and tc:IsType(TYPE_MONSTER)
  		and Duel.SendtoDeck(tc, nil, SEQ_DECKBOTTOM, REASON_EFFECT) ~= 0
  		and tc:IsLocation(LOCATION_DECK + LOCATION_EXTRA)
  		and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  		and c:IsRelateToEffect(e)
  	then
  		Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  	end
  	local e1 = Effect.CreateEffect(e:GetHandler())
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET + EFFECT_FLAG_OATH)
  	e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
  	e1:SetTargetRange(1, 0)
  	e1:SetTarget(s.splimit)
  	e1:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e1, tp)
  end
  function s.splimit(e, c, sump, sumtype, sumpos, targetp, se)
  	return not c:IsRace(RACE_INSECT + RACE_PLANT + RACE_REPTILE)
  end
  
  