name: D-フォーメーション
card_text: 自分フィールド上に表側表示で存在する「D-HERO」と名のついたモンスターが破壊される度に、1体につき1つDカウンターをこのカードに置く。
  自分のメインフェイズ時にモンスターの召喚・特殊召喚に成功した時、Dカウンターが2つ以上乗ったこのカードを墓地に送る事で、召喚・特殊召喚したモンスターと同名カードを2枚まで自分のデッキ・墓地から手札に加える。
external_ids: local SETCARD_ID_0 = 0xc008 --D-HERO
  local COUNTER_ID_0 = 0x1c --Dカウンター
  
lua: local SETCARD_ID_0 = 0xc008 --D-HERO
  local COUNTER_ID_0 = 0x1c --Dカウンター
  local s, id, o = GetID()
  function s.initial_effect(c)
  	c:EnableCounterPermit(0x1c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	c:RegisterEffect(e1)
  	--counter
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e2:SetRange(LOCATION_SZONE)
  	e2:SetCode(EVENT_DESTROYED)
  	e2:SetOperation(s.ctop)
  	c:RegisterEffect(e2)
  	--search
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 0))
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e3:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH)
  	e3:SetRange(LOCATION_SZONE)
  	e3:SetCode(EVENT_SUMMON_SUCCESS)
  	e3:SetCondition(s.thcon)
  	e3:SetCost(s.thcost)
  	e3:SetTarget(s.thtg)
  	e3:SetOperation(s.thop)
  	c:RegisterEffect(e3)
  	local e4 = e3:Clone()
  	e4:SetCode(EVENT_SPSUMMON_SUCCESS)
  	c:RegisterEffect(e4)
  end
  function s.ctfilter(c, tp)
  	return c:IsPreviousControler(tp) and c:IsPreviousLocation(LOCATION_MZONE) and c:IsPreviousPosition(POS_FACEUP) and c:IsPreviousSetCard(SETCARD_ID_0)
  end
  function s.ctop(e, tp, eg, ep, ev, re, r, rp)
  	local ct = eg:FilterCount(s.ctfilter, nil, tp)
  	if ct > 0 then
  		e:GetHandler():AddCounter(COUNTER_ID_0, ct)
  	end
  end
  function s.thcon(e, tp, eg, ep, ev, re, r, rp)
  	local ph = Duel.GetCurrentPhase()
  	return Duel.GetTurnPlayer() == tp and (ph == PHASE_MAIN1 or ph == PHASE_MAIN2)
  end
  function s.thcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():IsAbleToGraveAsCost() and e:GetHandler():GetCounter(COUNTER_ID_0) >= 2
  	end
  	Duel.SendtoGrave(e:GetHandler(), REASON_COST)
  end
  function s.filter1(c, e, tp)
  	return c:IsFaceup() and (not e or c:IsRelateToEffect(e)) and Duel.IsExistingMatchingCard(s.filter2, tp, LOCATION_DECK + LOCATION_GRAVE, 0, 1, nil, c:GetCode())
  end
  function s.filter2(c, code)
  	return c:IsCode(code) and c:IsAbleToHand()
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return eg:IsExists(s.filter1, 1, nil, nil, tp)
  	end
  	Duel.SetTargetCard(eg)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK + LOCATION_GRAVE)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local g = eg:Filter(s.filter1, nil, e, tp)
  	if g:GetCount() == 0 then
  		return
  	end
  	if g:GetCount() > 1 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
  		g = g:Select(tp, 1, 1, nil)
  	end
  	local tc = g:GetFirst()
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  	local ag = Duel.SelectMatchingCard(tp, aux.NecroValleyFilter(s.filter2), tp, LOCATION_DECK + LOCATION_GRAVE, 0, 1, 2, nil, tc:GetCode())
  	Duel.SendtoHand(ag, nil, REASON_EFFECT)
  	Duel.ConfirmCards(1 - tp, ag)
  end
  
  
source_text: D-フォーメーション
  自分フィールド上に表側表示で存在する「D-HERO」と名のついたモンスターが破壊される度に、1体につき1つDカウンターをこのカードに置く。
  自分のメインフェイズ時にモンスターの召喚・特殊召喚に成功した時、Dカウンターが2つ以上乗ったこのカードを墓地に送る事で、召喚・特殊召喚したモンスターと同名カードを2枚まで自分のデッキ・墓地から手札に加える。
target_text: -- D-フォーメーション
  local SETCARD_ID_0 = 0xc008 --D-HERO
  local COUNTER_ID_0 = 0x1c --Dカウンター
  local s, id, o = GetID()
  function s.initial_effect(c)
  	c:EnableCounterPermit(0x1c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	c:RegisterEffect(e1)
  	--counter
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  	e2:SetRange(LOCATION_SZONE)
  	e2:SetCode(EVENT_DESTROYED)
  	e2:SetOperation(s.ctop)
  	c:RegisterEffect(e2)
  	--search
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 0))
  	e3:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_TRIGGER_O)
  	e3:SetCategory(CATEGORY_TOHAND + CATEGORY_SEARCH)
  	e3:SetRange(LOCATION_SZONE)
  	e3:SetCode(EVENT_SUMMON_SUCCESS)
  	e3:SetCondition(s.thcon)
  	e3:SetCost(s.thcost)
  	e3:SetTarget(s.thtg)
  	e3:SetOperation(s.thop)
  	c:RegisterEffect(e3)
  	local e4 = e3:Clone()
  	e4:SetCode(EVENT_SPSUMMON_SUCCESS)
  	c:RegisterEffect(e4)
  end
  function s.ctfilter(c, tp)
  	return c:IsPreviousControler(tp) and c:IsPreviousLocation(LOCATION_MZONE) and c:IsPreviousPosition(POS_FACEUP) and c:IsPreviousSetCard(SETCARD_ID_0)
  end
  function s.ctop(e, tp, eg, ep, ev, re, r, rp)
  	local ct = eg:FilterCount(s.ctfilter, nil, tp)
  	if ct > 0 then
  		e:GetHandler():AddCounter(COUNTER_ID_0, ct)
  	end
  end
  function s.thcon(e, tp, eg, ep, ev, re, r, rp)
  	local ph = Duel.GetCurrentPhase()
  	return Duel.GetTurnPlayer() == tp and (ph == PHASE_MAIN1 or ph == PHASE_MAIN2)
  end
  function s.thcost(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return e:GetHandler():IsAbleToGraveAsCost() and e:GetHandler():GetCounter(COUNTER_ID_0) >= 2
  	end
  	Duel.SendtoGrave(e:GetHandler(), REASON_COST)
  end
  function s.filter1(c, e, tp)
  	return c:IsFaceup() and (not e or c:IsRelateToEffect(e)) and Duel.IsExistingMatchingCard(s.filter2, tp, LOCATION_DECK + LOCATION_GRAVE, 0, 1, nil, c:GetCode())
  end
  function s.filter2(c, code)
  	return c:IsCode(code) and c:IsAbleToHand()
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return eg:IsExists(s.filter1, 1, nil, nil, tp)
  	end
  	Duel.SetTargetCard(eg)
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, nil, 1, tp, LOCATION_DECK + LOCATION_GRAVE)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local g = eg:Filter(s.filter1, nil, e, tp)
  	if g:GetCount() == 0 then
  		return
  	end
  	if g:GetCount() > 1 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TARGET)
  		g = g:Select(tp, 1, 1, nil)
  	end
  	local tc = g:GetFirst()
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_ATOHAND)
  	local ag = Duel.SelectMatchingCard(tp, aux.NecroValleyFilter(s.filter2), tp, LOCATION_DECK + LOCATION_GRAVE, 0, 1, 2, nil, tc:GetCode())
  	Duel.SendtoHand(ag, nil, REASON_EFFECT)
  	Duel.ConfirmCards(1 - tp, ag)
  end
  
  