name: オスティナート
card_text: 1:自分フィールドにモンスターが存在しない場合に発動できる。
  自分の手札・デッキから、「幻奏」融合モンスターカードによって決められた融合素材モンスター2体を墓地へ送り、その融合モンスター1体をEXデッキから融合召喚する。
  このターンのエンドフェイズに、この効果で融合召喚したモンスターを破壊し、その融合素材モンスター一組が自分の墓地に揃っていれば、その一組を特殊召喚できる。
external_ids: local CARD_ID_0 = 59822133 --青眼の精霊龍
  local SETCARD_ID_0 = 0x9b --幻奏
  
lua: local CARD_ID_0 = 59822133 --青眼の精霊龍
  local SETCARD_ID_0 = 0x9b --幻奏
  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: オスティナート
  1:自分フィールドにモンスターが存在しない場合に発動できる。
  自分の手札・デッキから、「幻奏」融合モンスターカードによって決められた融合素材モンスター2体を墓地へ送り、その融合モンスター1体をEXデッキから融合召喚する。
  このターンのエンドフェイズに、この効果で融合召喚したモンスターを破壊し、その融合素材モンスター一組が自分の墓地に揃っていれば、その一組を特殊召喚できる。
target_text: -- オスティナート
  local CARD_ID_0 = 59822133 --青眼の精霊龍
  local SETCARD_ID_0 = 0x9b --幻奏
  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
  
  