name: Miracle
card_text: Pendulum Scale = 0
  [ Pendulum Effect ]
  Once per turn, during your Main Phase: You can Ritual Summon this card, by Tributing monsters from your hand or field whose total Levels equal or exceed 1.
  ----------------------------------------
  [ Monster Effect ]
  You can Ritual Summon this card with "Miracle Raven". Must be Ritual Summoned. This Ritual Summoned card is unaffected by your opponent's activated effects. If you Ritual Summon exactly 1 Ritual Monster with a card effect that requires use of monsters, this card you control can be used as the entire Tribute. If this card is Tributed for a Ritual Summon: You can add 1 Ritual Monster from your Deck to your hand. You can only use this effect of "Miracle Raven" once per turn.
lua: local s, id = GetID()
  function s.initial_effect(c)
  	c:EnableReviveLimit()
  	aux.EnablePendulumAttribute(c)
  	--spsummon limit
  	local e0 = Effect.CreateEffect(c)
  	e0:SetType(EFFECT_TYPE_SINGLE)
  	e0:SetCode(EFFECT_SPSUMMON_CONDITION)
  	e0:SetProperty(EFFECT_FLAG_CANNOT_DISABLE + EFFECT_FLAG_UNCOPYABLE)
  	e0:SetValue(aux.ritlimit)
  	c:RegisterEffect(e0)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_PZONE)
  	e1:SetCountLimit(1)
  	e1:SetTarget(s.pztg)
  	e1:SetOperation(s.pzop)
  	c:RegisterEffect(e1)
  	--immune
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_SINGLE)
  	e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  	e2:SetCode(EFFECT_IMMUNE_EFFECT)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetCondition(s.ritcon)
  	e2:SetValue(s.efilter)
  	c:RegisterEffect(e2)
  	--ritual level
  	local e3 = Effect.CreateEffect(c)
  	e3:SetType(EFFECT_TYPE_SINGLE)
  	e3:SetCode(EFFECT_RITUAL_LEVEL)
  	e3:SetValue(s.rlevel)
  	c:RegisterEffect(e3)
  	--search
  	local e4 = Effect.CreateEffect(c)
  	e4:SetDescription(aux.Stringid(id, 1))
  	e4:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH)
  	e4:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e4:SetCode(EVENT_RELEASE)
  	e4:SetProperty(EFFECT_FLAG_DELAY)
  	e4:SetCountLimit(1, id)
  	e4:SetCondition(s.thcon)
  	e4:SetTarget(s.thtg)
  	e4:SetOperation(s.thop)
  	c:RegisterEffect(e4)
  end
  
  function s.ritcon(e)
  	local c = e:GetHandler()
  	return c:IsSummonType(SUMMON_TYPE_RITUAL)
  end
  function s.efilter(e, te)
  	return te:GetOwnerPlayer() ~= e:GetHandlerPlayer() and te:IsActivated()
  end
  function s.rlevel(e, c)
  	local ec = e:GetHandler()
  	local lv = aux.GetCappedLevel(ec)
  	if not ec:IsLocation(LOCATION_MZONE) then
  		return lv
  	end
  	local clv = c:GetLevel()
  	return (lv << 16) + clv
  end
  function s.thcon(e, tp, eg, ep, ev, re, r, rp)
  	return bit.band(r, REASON_RITUAL) ~= 0
  end
  function s.thfilter(c)
  	return c:IsAllTypes(TYPE_RITUAL + TYPE_MONSTER) and c:IsAbleToHand()
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.thfilter, tp, LOCATION_DECK, 0, 1, nil)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.SelectMatchingCard(tp, s.thfilter, tp, LOCATION_DECK, 0, 1, 1, nil)
  	if g:GetCount() > 0 then
  		Duel.SendtoHand(g, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, g)
  	end
  end
  function s.pztg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		local mg = Duel.GetRitualMaterial(tp)
  		Auxiliary.GCheckAdditional = Auxiliary.RitualCheckAdditional(c, 1, "Greater")
  		local bool = mg:CheckSubGroup(Auxiliary.RitualCheck, 1, 1, tp, c, 1, "Greater")
  		Auxiliary.GCheckAdditional = nil
  		return bool
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, tp, LOCATION_PZONE)
  end
  function s.pzop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsRelateToEffect(e) then
  		return
  	end
  	local mg = Duel.GetRitualMaterial(tp)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RELEASE)
  	Auxiliary.GCheckAdditional = Auxiliary.RitualCheckAdditional(c, 1, "Greater")
  	local mat = mg:SelectSubGroup(tp, Auxiliary.RitualCheck, true, 1, 1, tp, c, 1, "Greater")
  	Auxiliary.GCheckAdditional = nil
  	if mat and mat:GetCount() > 0 then
  		c:SetMaterial(mat)
  		Duel.ReleaseRitualMaterial(mat)
  		Duel.SpecialSummon(c, SUMMON_TYPE_RITUAL, tp, tp, false, true, POS_FACEUP)
  		c:CompleteProcedure()
  	end
  end
  
  
source_text: Miracle
  Pendulum Scale = 0
  [ Pendulum Effect ]
  Once per turn, during your Main Phase: You can Ritual Summon this card, by Tributing monsters from your hand or field whose total Levels equal or exceed 1.
  ----------------------------------------
  [ Monster Effect ]
  You can Ritual Summon this card with "Miracle Raven". Must be Ritual Summoned. This Ritual Summoned card is unaffected by your opponent's activated effects. If you Ritual Summon exactly 1 Ritual Monster with a card effect that requires use of monsters, this card you control can be used as the entire Tribute. If this card is Tributed for a Ritual Summon: You can add 1 Ritual Monster from your Deck to your hand. You can only use this effect of "Miracle Raven" once per turn.
target_text: -- Miracle
  local s, id = GetID()
  function s.initial_effect(c)
  	c:EnableReviveLimit()
  	aux.EnablePendulumAttribute(c)
  	--spsummon limit
  	local e0 = Effect.CreateEffect(c)
  	e0:SetType(EFFECT_TYPE_SINGLE)
  	e0:SetCode(EFFECT_SPSUMMON_CONDITION)
  	e0:SetProperty(EFFECT_FLAG_CANNOT_DISABLE + EFFECT_FLAG_UNCOPYABLE)
  	e0:SetValue(aux.ritlimit)
  	c:RegisterEffect(e0)
  	--spsummon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e1:SetType(EFFECT_TYPE_IGNITION)
  	e1:SetRange(LOCATION_PZONE)
  	e1:SetCountLimit(1)
  	e1:SetTarget(s.pztg)
  	e1:SetOperation(s.pzop)
  	c:RegisterEffect(e1)
  	--immune
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_SINGLE)
  	e2:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  	e2:SetCode(EFFECT_IMMUNE_EFFECT)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetCondition(s.ritcon)
  	e2:SetValue(s.efilter)
  	c:RegisterEffect(e2)
  	--ritual level
  	local e3 = Effect.CreateEffect(c)
  	e3:SetType(EFFECT_TYPE_SINGLE)
  	e3:SetCode(EFFECT_RITUAL_LEVEL)
  	e3:SetValue(s.rlevel)
  	c:RegisterEffect(e3)
  	--search
  	local e4 = Effect.CreateEffect(c)
  	e4:SetDescription(aux.Stringid(id, 1))
  	e4:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH)
  	e4:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e4:SetCode(EVENT_RELEASE)
  	e4:SetProperty(EFFECT_FLAG_DELAY)
  	e4:SetCountLimit(1, id)
  	e4:SetCondition(s.thcon)
  	e4:SetTarget(s.thtg)
  	e4:SetOperation(s.thop)
  	c:RegisterEffect(e4)
  end
  
  function s.ritcon(e)
  	local c = e:GetHandler()
  	return c:IsSummonType(SUMMON_TYPE_RITUAL)
  end
  function s.efilter(e, te)
  	return te:GetOwnerPlayer() ~= e:GetHandlerPlayer() and te:IsActivated()
  end
  function s.rlevel(e, c)
  	local ec = e:GetHandler()
  	local lv = aux.GetCappedLevel(ec)
  	if not ec:IsLocation(LOCATION_MZONE) then
  		return lv
  	end
  	local clv = c:GetLevel()
  	return (lv << 16) + clv
  end
  function s.thcon(e, tp, eg, ep, ev, re, r, rp)
  	return bit.band(r, REASON_RITUAL) ~= 0
  end
  function s.thfilter(c)
  	return c:IsAllTypes(TYPE_RITUAL + TYPE_MONSTER) and c:IsAbleToHand()
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.IsExistingMatchingCard(s.thfilter, tp, LOCATION_DECK, 0, 1, nil)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local g = Duel.SelectMatchingCard(tp, s.thfilter, tp, LOCATION_DECK, 0, 1, 1, nil)
  	if g:GetCount() > 0 then
  		Duel.SendtoHand(g, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, g)
  	end
  end
  function s.pztg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		local mg = Duel.GetRitualMaterial(tp)
  		Auxiliary.GCheckAdditional = Auxiliary.RitualCheckAdditional(c, 1, "Greater")
  		local bool = mg:CheckSubGroup(Auxiliary.RitualCheck, 1, 1, tp, c, 1, "Greater")
  		Auxiliary.GCheckAdditional = nil
  		return bool
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, tp, LOCATION_PZONE)
  end
  function s.pzop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsRelateToEffect(e) then
  		return
  	end
  	local mg = Duel.GetRitualMaterial(tp)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RELEASE)
  	Auxiliary.GCheckAdditional = Auxiliary.RitualCheckAdditional(c, 1, "Greater")
  	local mat = mg:SelectSubGroup(tp, Auxiliary.RitualCheck, true, 1, 1, tp, c, 1, "Greater")
  	Auxiliary.GCheckAdditional = nil
  	if mat and mat:GetCount() > 0 then
  		c:SetMaterial(mat)
  		Duel.ReleaseRitualMaterial(mat)
  		Duel.SpecialSummon(c, SUMMON_TYPE_RITUAL, tp, tp, false, true, POS_FACEUP)
  		c:CompleteProcedure()
  	end
  end
  
  