name: 合成獣融合
card_text: このカード名の2の効果は1ターンに1度しか使用できない。
  1:自分・相手のメインフェイズに発動できる。
  獣族・悪魔族モンスターのいずれかを含む、自分の手札・フィールドのモンスターを融合素材とし、融合モンスター1体を融合召喚する。
  2:自分メインフェイズにこのカードが墓地に存在し、自分のフィールドか墓地に「有翼幻獣キマイラ」が存在する場合、以下から1つを選択して発動できる。
  ●このカードを手札に加える。
  ●このカードを除外し、自分のデッキ・墓地から「幻獣王ガゼル」1体と「バフォメット」1体を特殊召喚する。
external_ids: local CARD_ID_0 = 77207191 --バフォメット
  local CARD_ID_1 = 5818798 --幻獣王ガゼル
  local CARD_ID_2 = 4796100 --有翼幻獣キマイラ
  local CARD_ID_3 = 59822133 --青眼の精霊龍
  
lua: local CARD_ID_0 = 77207191 --バフォメット
  local CARD_ID_1 = 5818798 --幻獣王ガゼル
  local CARD_ID_2 = 4796100 --有翼幻獣キマイラ
  local CARD_ID_3 = 59822133 --青眼の精霊龍
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_2, CARD_ID_1, CARD_ID_0)
  	--Activate
  	local e1 = FusionSpell.CreateSummonEffect(c, {
  		additional_fcheck = s.fcheck,
  	})
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetHintTiming(0, TIMINGS_CHECK_MONSTER + TIMING_MAIN_END)
  	e1:SetCondition(s.fscon)
  	c:RegisterEffect(e1)
  	--move from gy
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id)
  	e2:SetCondition(s.gycon)
  	e2:SetTarget(s.gytg)
  	c:RegisterEffect(e2)
  end
  
  function s.fscon(e, tp, eg, ep, ev, re, r, rp)
  	local ph = Duel.GetCurrentPhase()
  	return ph == PHASE_MAIN1 or ph == PHASE_MAIN2
  end
  
  function s.fcheck(tp, mg, fc, mg_all)
  	return mg_all:IsExists(function(c)
  		return c:IsRace(RACE_BEAST | RACE_FIEND)
  	end, 1, nil)
  end
  
  function s.cfilter(c)
  	return c:IsFaceupEx() and c:IsCode(CARD_ID_2)
  end
  
  function s.gycon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_GRAVE + LOCATION_MZONE, 0, 1, nil)
  end
  
  function s.sfilter(c, e, tp)
  	return c:IsCode(CARD_ID_1, CARD_ID_0) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  end
  
  function s.gytg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	local b1 = c:IsAbleToHand()
  	local g = Duel.GetMatchingGroup(s.sfilter, tp, LOCATION_DECK + LOCATION_GRAVE, 0, nil, e, tp)
  	local b2 = c:IsAbleToRemove() and Duel.GetLocationCount(tp, LOCATION_MZONE) > 1 and not Duel.IsPlayerAffectedByEffect(tp, CARD_ID_3) and g:GetClassCount(Card.GetCode) > 1
  	if chk == 0 then
  		return b1 or b2
  	end
  	local op = aux.SelectFromOptions(tp, { b1, aux.Stringid(id, 2) }, { b2, aux.Stringid(id, 3) })
  	if op == 1 then
  		e:SetCategory(CATEGORY_TOHAND)
  		e:SetOperation(s.tohand)
  		Duel.SetOperationInfo(0, CATEGORY_TOHAND, c, 1, 0, 0)
  	else
  		e:SetCategory(CATEGORY_REMOVE + CATEGORY_SPECIAL_SUMMON)
  		e:SetOperation(s.banish)
  		Duel.SetOperationInfo(0, CATEGORY_REMOVE, c, 1, 0, 0)
  		Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 2, tp, LOCATION_DECK + LOCATION_GRAVE)
  	end
  end
  
  function s.tohand(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
  
  function s.banish(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsRelateToEffect(e) or Duel.Remove(c, POS_FACEUP, REASON_EFFECT) == 0 or Duel.GetLocationCount(tp, LOCATION_MZONE) < 2 or Duel.IsPlayerAffectedByEffect(tp, CARD_ID_3) then
  		return
  	end
  	local g = Duel.GetMatchingGroup(aux.NecroValleyFilter(s.sfilter), tp, LOCATION_DECK + LOCATION_GRAVE, 0, nil, e, tp)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  	local sg = g:SelectSubGroup(tp, aux.dncheck, false, 2, 2)
  	if sg then
  		Duel.SpecialSummon(sg, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  
  
source_text: 合成獣融合
  このカード名の2の効果は1ターンに1度しか使用できない。
  1:自分・相手のメインフェイズに発動できる。
  獣族・悪魔族モンスターのいずれかを含む、自分の手札・フィールドのモンスターを融合素材とし、融合モンスター1体を融合召喚する。
  2:自分メインフェイズにこのカードが墓地に存在し、自分のフィールドか墓地に「有翼幻獣キマイラ」が存在する場合、以下から1つを選択して発動できる。
  ●このカードを手札に加える。
  ●このカードを除外し、自分のデッキ・墓地から「幻獣王ガゼル」1体と「バフォメット」1体を特殊召喚する。
target_text: -- 合成獣融合
  local CARD_ID_0 = 77207191 --バフォメット
  local CARD_ID_1 = 5818798 --幻獣王ガゼル
  local CARD_ID_2 = 4796100 --有翼幻獣キマイラ
  local CARD_ID_3 = 59822133 --青眼の精霊龍
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_2, CARD_ID_1, CARD_ID_0)
  	--Activate
  	local e1 = FusionSpell.CreateSummonEffect(c, {
  		additional_fcheck = s.fcheck,
  	})
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetHintTiming(0, TIMINGS_CHECK_MONSTER + TIMING_MAIN_END)
  	e1:SetCondition(s.fscon)
  	c:RegisterEffect(e1)
  	--move from gy
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetRange(LOCATION_GRAVE)
  	e2:SetCountLimit(1, id)
  	e2:SetCondition(s.gycon)
  	e2:SetTarget(s.gytg)
  	c:RegisterEffect(e2)
  end
  
  function s.fscon(e, tp, eg, ep, ev, re, r, rp)
  	local ph = Duel.GetCurrentPhase()
  	return ph == PHASE_MAIN1 or ph == PHASE_MAIN2
  end
  
  function s.fcheck(tp, mg, fc, mg_all)
  	return mg_all:IsExists(function(c)
  		return c:IsRace(RACE_BEAST | RACE_FIEND)
  	end, 1, nil)
  end
  
  function s.cfilter(c)
  	return c:IsFaceupEx() and c:IsCode(CARD_ID_2)
  end
  
  function s.gycon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_GRAVE + LOCATION_MZONE, 0, 1, nil)
  end
  
  function s.sfilter(c, e, tp)
  	return c:IsCode(CARD_ID_1, CARD_ID_0) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  end
  
  function s.gytg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	local b1 = c:IsAbleToHand()
  	local g = Duel.GetMatchingGroup(s.sfilter, tp, LOCATION_DECK + LOCATION_GRAVE, 0, nil, e, tp)
  	local b2 = c:IsAbleToRemove() and Duel.GetLocationCount(tp, LOCATION_MZONE) > 1 and not Duel.IsPlayerAffectedByEffect(tp, CARD_ID_3) and g:GetClassCount(Card.GetCode) > 1
  	if chk == 0 then
  		return b1 or b2
  	end
  	local op = aux.SelectFromOptions(tp, { b1, aux.Stringid(id, 2) }, { b2, aux.Stringid(id, 3) })
  	if op == 1 then
  		e:SetCategory(CATEGORY_TOHAND)
  		e:SetOperation(s.tohand)
  		Duel.SetOperationInfo(0, CATEGORY_TOHAND, c, 1, 0, 0)
  	else
  		e:SetCategory(CATEGORY_REMOVE + CATEGORY_SPECIAL_SUMMON)
  		e:SetOperation(s.banish)
  		Duel.SetOperationInfo(0, CATEGORY_REMOVE, c, 1, 0, 0)
  		Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 2, tp, LOCATION_DECK + LOCATION_GRAVE)
  	end
  end
  
  function s.tohand(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
  
  function s.banish(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	if not c:IsRelateToEffect(e) or Duel.Remove(c, POS_FACEUP, REASON_EFFECT) == 0 or Duel.GetLocationCount(tp, LOCATION_MZONE) < 2 or Duel.IsPlayerAffectedByEffect(tp, CARD_ID_3) then
  		return
  	end
  	local g = Duel.GetMatchingGroup(aux.NecroValleyFilter(s.sfilter), tp, LOCATION_DECK + LOCATION_GRAVE, 0, nil, e, tp)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  	local sg = g:SelectSubGroup(tp, aux.dncheck, false, 2, 2)
  	if sg then
  		Duel.SpecialSummon(sg, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  
  