name: Void
card_text: Reveal 1 "Infernoid" monster or 1 "Void" Spell/Trap in your hand; discard your entire hand, then draw the same number of cards you discarded. If you control no monsters, or all monsters you control are Fiend monsters, except the turn this card was sent to the GY: You can banish this card from your GY, then target up to 11 of your banished "Infernoid" monsters with different names; return them to the GY. You can only use this effect of "Void Reignition" once per Duel.
external_ids: local SETCARD_ID_0 = 0xbb --Infernoid
  
lua: local SETCARD_ID_0 = 0xbb --Infernoid
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--draw
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_DRAW + CATEGORY_HANDES)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  	--to grave
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id + EFFECT_COUNT_CODE_DUEL)
  	e2:SetCondition(s.tgcon)
  	e2:SetCost(aux.bfgcost)
  	e2:SetTarget(s.tgtg)
  	e2:SetOperation(s.tgop)
  	c:RegisterEffect(e2)
  end
  function s.costfilter(c)
  	return (c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_MONSTER)) or (c:IsSetCard(0xc5) and c:IsType(TYPE_SPELL + TYPE_TRAP)) and not c:IsPublic()
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.costfilter, tp, LOCATION_HAND, 0, 1, e:GetHandler())
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CONFIRM)
  	local g = Duel.SelectMatchingCard(tp, s.costfilter, tp, LOCATION_HAND, 0, 1, 1, nil)
  	Duel.ConfirmCards(1 - tp, g)
  	Duel.ShuffleHand(tp)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		local h = Duel.GetFieldGroupCount(tp, LOCATION_HAND, 0)
  		if e:GetHandler():IsLocation(LOCATION_HAND) then
  			h = h - 1
  		end
  		return h > 0 and Duel.IsPlayerCanDraw(tp, h)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_HANDES, nil, 0, tp, 1)
  	Duel.SetOperationInfo(0, CATEGORY_DRAW, nil, 0, tp, 1)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetFieldGroup(tp, LOCATION_HAND, 0)
  	local ct = Duel.SendtoGrave(g, REASON_EFFECT + REASON_DISCARD)
  	if ct > 0 then
  		Duel.BreakEffect()
  		Duel.Draw(tp, ct, REASON_EFFECT)
  	end
  end
  function s.cfilter(c)
  	return c:IsFacedown() or not c:IsRace(RACE_FIEND)
  end
  function s.tgcon(e, tp, eg, ep, ev, re, r, rp)
  	return (Duel.GetFieldGroupCount(tp, LOCATION_MZONE, 0) == 0 or not Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil))
  		and (Duel.GetTurnCount() ~= e:GetHandler():GetTurnID() or e:GetHandler():IsReason(REASON_RETURN))
  end
  function s.tgfilter(c, e)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_MONSTER) and c:IsCanBeEffectTarget(e) and c:IsFaceup()
  end
  function s.tgtg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return false
  	end
  	local tg = Duel.GetMatchingGroup(s.tgfilter, tp, LOCATION_REMOVED, 0, nil, e)
  	if chk == 0 then
  		return #tg > 0
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_OPERATECARD)
  	aux.GCheckAdditional = aux.dncheck
  	local g = tg:SelectSubGroup(tp, aux.TRUE, false, 1, 11)
  	aux.GCheckAdditional = nil
  	Duel.SetTargetCard(g)
  	Duel.SetOperationInfo(0, CATEGORY_TOGRAVE, g, g:GetCount(), 0, 0)
  end
  function s.tgop(e, tp, eg, ep, ev, re, r, rp)
  	local tg = Duel.GetChainInfo(0, CHAININFO_TARGET_CARDS):Filter(Card.IsRelateToEffect, nil, e)
  	if tg:GetCount() > 0 then
  		Duel.SendtoGrave(tg, REASON_EFFECT + REASON_RETURN)
  	end
  end
  
  
source_text: Void
  Reveal 1 "Infernoid" monster or 1 "Void" Spell/Trap in your hand; discard your entire hand, then draw the same number of cards you discarded. If you control no monsters, or all monsters you control are Fiend monsters, except the turn this card was sent to the GY: You can banish this card from your GY, then target up to 11 of your banished "Infernoid" monsters with different names; return them to the GY. You can only use this effect of "Void Reignition" once per Duel.
target_text: -- Void
  local SETCARD_ID_0 = 0xbb --Infernoid
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--draw
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_DRAW + CATEGORY_HANDES)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetCost(s.cost)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  	--to grave
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id + EFFECT_COUNT_CODE_DUEL)
  	e2:SetCondition(s.tgcon)
  	e2:SetCost(aux.bfgcost)
  	e2:SetTarget(s.tgtg)
  	e2:SetOperation(s.tgop)
  	c:RegisterEffect(e2)
  end
  function s.costfilter(c)
  	return (c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_MONSTER)) or (c:IsSetCard(0xc5) and c:IsType(TYPE_SPELL + TYPE_TRAP)) and not c:IsPublic()
  end
  function s.cost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.costfilter, tp, LOCATION_HAND, 0, 1, e:GetHandler())
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CONFIRM)
  	local g = Duel.SelectMatchingCard(tp, s.costfilter, tp, LOCATION_HAND, 0, 1, 1, nil)
  	Duel.ConfirmCards(1 - tp, g)
  	Duel.ShuffleHand(tp)
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		local h = Duel.GetFieldGroupCount(tp, LOCATION_HAND, 0)
  		if e:GetHandler():IsLocation(LOCATION_HAND) then
  			h = h - 1
  		end
  		return h > 0 and Duel.IsPlayerCanDraw(tp, h)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_HANDES, nil, 0, tp, 1)
  	Duel.SetOperationInfo(0, CATEGORY_DRAW, nil, 0, tp, 1)
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.GetFieldGroup(tp, LOCATION_HAND, 0)
  	local ct = Duel.SendtoGrave(g, REASON_EFFECT + REASON_DISCARD)
  	if ct > 0 then
  		Duel.BreakEffect()
  		Duel.Draw(tp, ct, REASON_EFFECT)
  	end
  end
  function s.cfilter(c)
  	return c:IsFacedown() or not c:IsRace(RACE_FIEND)
  end
  function s.tgcon(e, tp, eg, ep, ev, re, r, rp)
  	return (Duel.GetFieldGroupCount(tp, LOCATION_MZONE, 0) == 0 or not Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil))
  		and (Duel.GetTurnCount() ~= e:GetHandler():GetTurnID() or e:GetHandler():IsReason(REASON_RETURN))
  end
  function s.tgfilter(c, e)
  	return c:IsSetCard(SETCARD_ID_0) and c:IsType(TYPE_MONSTER) and c:IsCanBeEffectTarget(e) and c:IsFaceup()
  end
  function s.tgtg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return false
  	end
  	local tg = Duel.GetMatchingGroup(s.tgfilter, tp, LOCATION_REMOVED, 0, nil, e)
  	if chk == 0 then
  		return #tg > 0
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_OPERATECARD)
  	aux.GCheckAdditional = aux.dncheck
  	local g = tg:SelectSubGroup(tp, aux.TRUE, false, 1, 11)
  	aux.GCheckAdditional = nil
  	Duel.SetTargetCard(g)
  	Duel.SetOperationInfo(0, CATEGORY_TOGRAVE, g, g:GetCount(), 0, 0)
  end
  function s.tgop(e, tp, eg, ep, ev, re, r, rp)
  	local tg = Duel.GetChainInfo(0, CHAININFO_TARGET_CARDS):Filter(Card.IsRelateToEffect, nil, e)
  	if tg:GetCount() > 0 then
  		Duel.SendtoGrave(tg, REASON_EFFECT + REASON_RETURN)
  	end
  end
  
  