name: Beetrooper
card_text: Fusion Summon 1 Insect Fusion Monster from your Extra Deck, using monsters from your hand or field as Fusion Material. If this card is in your GY, except the turn it was sent there: You can banish 2 Insect monsters from your GY; add this card to your hand. You can only use this effect of "Beetrooper Landing" once per turn.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--fusion summon
  	FusionSpell.RegisterSummonEffect(c, {
  		fusfilter = s.fusfilter,
  	})
  	--recycle
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_TOHAND)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id)
  	e2:SetCondition(aux.exccon)
  	e2:SetCost(s.thcost)
  	e2:SetTarget(s.thtg)
  	e2:SetOperation(s.thop)
  	c:RegisterEffect(e2)
  end
  
  function s.fusfilter(c)
  	return c:IsRace(RACE_INSECT)
  end
  
  function s.cfilter(c)
  	return c:IsRace(RACE_INSECT) and c:IsAbleToRemoveAsCost()
  end
  
  function s.thcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_GRAVE, 0, 2, e:GetHandler())
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
  	local g = Duel.SelectMatchingCard(tp, s.cfilter, tp, LOCATION_GRAVE, 0, 2, 2, e:GetHandler())
  	Duel.Remove(g, POS_FACEUP, REASON_COST)
  end
  
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return c:IsAbleToHand()
  	end
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, c, 1, 0, 0)
  end
  
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) then
  		Duel.SendtoHand(c, nil, REASON_EFFECT)
  	end
  end
  
  
source_text: Beetrooper
  Fusion Summon 1 Insect Fusion Monster from your Extra Deck, using monsters from your hand or field as Fusion Material. If this card is in your GY, except the turn it was sent there: You can banish 2 Insect monsters from your GY; add this card to your hand. You can only use this effect of "Beetrooper Landing" once per turn.
target_text: -- Beetrooper
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--fusion summon
  	FusionSpell.RegisterSummonEffect(c, {
  		fusfilter = s.fusfilter,
  	})
  	--recycle
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_TOHAND)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id)
  	e2:SetCondition(aux.exccon)
  	e2:SetCost(s.thcost)
  	e2:SetTarget(s.thtg)
  	e2:SetOperation(s.thop)
  	c:RegisterEffect(e2)
  end
  
  function s.fusfilter(c)
  	return c:IsRace(RACE_INSECT)
  end
  
  function s.cfilter(c)
  	return c:IsRace(RACE_INSECT) and c:IsAbleToRemoveAsCost()
  end
  
  function s.thcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_GRAVE, 0, 2, e:GetHandler())
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_REMOVE)
  	local g = Duel.SelectMatchingCard(tp, s.cfilter, tp, LOCATION_GRAVE, 0, 2, 2, e:GetHandler())
  	Duel.Remove(g, POS_FACEUP, REASON_COST)
  end
  
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return c:IsAbleToHand()
  	end
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, c, 1, 0, 0)
  end
  
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if c:IsRelateToEffect(e) then
  		Duel.SendtoHand(c, nil, REASON_EFFECT)
  	end
  end
  
  