name: Ostinato
card_text: If you control no monsters: Fusion Summon 1 "Melodious" Fusion Monster from your Extra Deck, using 2 monsters from your hand and/or Deck as material. During the End Phase of this turn, destroy the monster Fusion Summoned by this effect, and if you do, if all the materials that were used for its Fusion Summon are in your GY, you can Special Summon all of them.
external_ids: local CARD_ID_0 = 59822133 --Blue-Eyes Spirit Dragon
  local SETCARD_ID_0 = 0x9b --Melodious
  
lua: local CARD_ID_0 = 59822133 --Blue-Eyes Spirit Dragon
  local SETCARD_ID_0 = 0x9b --Melodious
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = FusionSpell.CreateSummonEffect(c, {
  		fusfilter = s.fusfilter,
  		additional_fcheck = s.fcheck,
  		pre_select_mat_location = LOCATION_HAND | LOCATION_DECK,
  		stage_x_operation = s.stage_x_operation,
  	})
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON + CATEGORY_FUSION_SUMMON + CATEGORY_DECKDES + CATEGORY_GRAVE_SPSUMMON)
  	e1:SetCondition(s.condition)
  	c:RegisterEffect(e1)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetFieldGroupCount(tp, LOCATION_MZONE, 0) == 0
  end
  function s.fusfilter(c)
  	return c:IsSetCard(SETCARD_ID_0)
  end
  function s.fcheck(tp, mg, fc, mg_all)
  	return #mg_all <= 2
  end
  function s.stage_x_operation(e, tc, tp, stage)
  	if stage == FusionSpell.STAGE_BEFORE_SUMMON_COMPLETE then
  		tc:RegisterFlagEffect(id, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END, 0, 1)
  	elseif stage == FusionSpell.STAGE_AT_SUMMON_OPERATION_FINISH then
  		local e1 = Effect.CreateEffect(e:GetHandler())
  		e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
  		e1:SetCode(EVENT_PHASE + PHASE_END)
  		e1:SetCountLimit(1)
  		e1:SetLabelObject(tc)
  		e1:SetCondition(s.descon)
  		e1:SetOperation(s.desop)
  		e1:SetReset(RESET_PHASE + PHASE_END)
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.descon(e, tp, eg, ep, ev, re, r, rp)
  	local tc = e:GetLabelObject()
  	if tc:GetFlagEffect(id) ~= 0 then
  		return true
  	else
  		e:Reset()
  		return false
  	end
  end
  function s.mgfilter(c, e, tp, fusc, mg)
  	return c:IsControler(tp)
  		and c:IsLocation(LOCATION_GRAVE)
  		and c:GetReason() & (REASON_FUSION + REASON_MATERIAL) == (REASON_FUSION + REASON_MATERIAL)
  		and c:GetReasonCard() == fusc
  		and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  		and fusc:CheckFusionMaterial(mg, c, PLAYER_NONE, true)
  end
  function s.desop(e, tp, eg, ep, ev, re, r, rp)
  	local tc = e:GetLabelObject()
  	local mg = tc:GetMaterial()
  	local sumtype = tc:GetSummonType()
  	if
  		Duel.Destroy(tc, REASON_EFFECT) ~= 0
  		and bit.band(sumtype, SUMMON_TYPE_FUSION) == SUMMON_TYPE_FUSION
  		and mg:GetCount() > 0
  		and Duel.GetLocationCount(tp, LOCATION_MZONE) >= mg:GetCount()
  		and mg:IsExists(aux.NecroValleyFilter(s.mgfilter), mg:GetCount(), nil, e, tp, tc, mg)
  		and not Duel.IsPlayerAffectedByEffect(tp, CARD_ID_0)
  		and Duel.SelectYesNo(tp, aux.Stringid(id, 0))
  	then
  		Duel.SpecialSummon(mg, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  
  
source_text: Ostinato
  If you control no monsters: Fusion Summon 1 "Melodious" Fusion Monster from your Extra Deck, using 2 monsters from your hand and/or Deck as material. During the End Phase of this turn, destroy the monster Fusion Summoned by this effect, and if you do, if all the materials that were used for its Fusion Summon are in your GY, you can Special Summon all of them.
target_text: -- Ostinato
  local CARD_ID_0 = 59822133 --Blue-Eyes Spirit Dragon
  local SETCARD_ID_0 = 0x9b --Melodious
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = FusionSpell.CreateSummonEffect(c, {
  		fusfilter = s.fusfilter,
  		additional_fcheck = s.fcheck,
  		pre_select_mat_location = LOCATION_HAND | LOCATION_DECK,
  		stage_x_operation = s.stage_x_operation,
  	})
  	e1:SetCategory(CATEGORY_SPECIAL_SUMMON + CATEGORY_FUSION_SUMMON + CATEGORY_DECKDES + CATEGORY_GRAVE_SPSUMMON)
  	e1:SetCondition(s.condition)
  	c:RegisterEffect(e1)
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.GetFieldGroupCount(tp, LOCATION_MZONE, 0) == 0
  end
  function s.fusfilter(c)
  	return c:IsSetCard(SETCARD_ID_0)
  end
  function s.fcheck(tp, mg, fc, mg_all)
  	return #mg_all <= 2
  end
  function s.stage_x_operation(e, tc, tp, stage)
  	if stage == FusionSpell.STAGE_BEFORE_SUMMON_COMPLETE then
  		tc:RegisterFlagEffect(id, RESET_EVENT + RESETS_STANDARD + RESET_PHASE + PHASE_END, 0, 1)
  	elseif stage == FusionSpell.STAGE_AT_SUMMON_OPERATION_FINISH then
  		local e1 = Effect.CreateEffect(e:GetHandler())
  		e1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		e1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
  		e1:SetCode(EVENT_PHASE + PHASE_END)
  		e1:SetCountLimit(1)
  		e1:SetLabelObject(tc)
  		e1:SetCondition(s.descon)
  		e1:SetOperation(s.desop)
  		e1:SetReset(RESET_PHASE + PHASE_END)
  		Duel.RegisterEffect(e1, tp)
  	end
  end
  function s.descon(e, tp, eg, ep, ev, re, r, rp)
  	local tc = e:GetLabelObject()
  	if tc:GetFlagEffect(id) ~= 0 then
  		return true
  	else
  		e:Reset()
  		return false
  	end
  end
  function s.mgfilter(c, e, tp, fusc, mg)
  	return c:IsControler(tp)
  		and c:IsLocation(LOCATION_GRAVE)
  		and c:GetReason() & (REASON_FUSION + REASON_MATERIAL) == (REASON_FUSION + REASON_MATERIAL)
  		and c:GetReasonCard() == fusc
  		and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  		and fusc:CheckFusionMaterial(mg, c, PLAYER_NONE, true)
  end
  function s.desop(e, tp, eg, ep, ev, re, r, rp)
  	local tc = e:GetLabelObject()
  	local mg = tc:GetMaterial()
  	local sumtype = tc:GetSummonType()
  	if
  		Duel.Destroy(tc, REASON_EFFECT) ~= 0
  		and bit.band(sumtype, SUMMON_TYPE_FUSION) == SUMMON_TYPE_FUSION
  		and mg:GetCount() > 0
  		and Duel.GetLocationCount(tp, LOCATION_MZONE) >= mg:GetCount()
  		and mg:IsExists(aux.NecroValleyFilter(s.mgfilter), mg:GetCount(), nil, e, tp, tc, mg)
  		and not Duel.IsPlayerAffectedByEffect(tp, CARD_ID_0)
  		and Duel.SelectYesNo(tp, aux.Stringid(id, 0))
  	then
  		Duel.SpecialSummon(mg, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  
  