name: Evil★Twin
card_text: このカード名のカードは1ターンに1枚しか発動できない。
  1:自分フィールドに「キスキル」モンスター及び「リィラ」モンスターが存在する場合、以下の効果から1つを選択して発動できる。
  ●自分フィールドの「キスキル」モンスターまたは「リィラ」モンスター1体と、相手フィールドの表側表示モンスター1体を対象として発動できる。
  そのモンスター2体のコントロールを入れ替える。
  ●相手フィールドにセットされた魔法・罠カード1枚を対象として発動できる。
  そのカードを持ち主のデッキに戻す。
external_ids: local SETCARD_ID_0 = 0x152 --キスキル
  
lua: local SETCARD_ID_0 = 0x152 --キスキル
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_CONTROL)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.cfilter(c, setcode)
  	return c:IsSetCard(setcode) and c:IsFaceup()
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil, 0x152) and Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil, 0x153)
  end
  function s.tgfilter1a(c)
  	local tp = c:GetControler()
  	return c:IsSetCard(SETCARD_ID_0, 0x153) and c:IsFaceup() and c:IsAbleToChangeControler() and Duel.GetMZoneCount(tp, c, tp, LOCATION_REASON_CONTROL) > 0
  end
  function s.tgfilter1b(c)
  	local tp = c:GetControler()
  	return c:IsFaceup() and c:IsAbleToChangeControler() and Duel.GetMZoneCount(tp, c, tp, LOCATION_REASON_CONTROL) > 0
  end
  function s.tgfilter2(c)
  	return c:IsFacedown() and c:IsAbleToDeck()
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return e:GetLabel() == 1 and s.tgfilter1(chkc) and chkc:IsLocation(LOCATION_SZONE) and chkc:IsControler(1 - tp)
  	end
  	local b1 = Duel.IsExistingTarget(s.tgfilter1a, tp, LOCATION_MZONE, 0, 1, nil) and Duel.IsExistingTarget(s.tgfilter1b, tp, 0, LOCATION_MZONE, 1, nil)
  	local b2 = Duel.IsExistingTarget(s.tgfilter2, tp, 0, LOCATION_SZONE, 1, nil)
  	if chk == 0 then
  		return b1 or b2
  	end
  	local op = aux.SelectFromOptions(tp, { b1, aux.Stringid(id, 0), 0 }, { b2, aux.Stringid(id, 1), 1 })
  	e:SetLabel(op)
  	if op == 0 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CONTROL)
  		local g1 = Duel.SelectTarget(tp, s.tgfilter1a, tp, LOCATION_MZONE, 0, 1, 1, nil)
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CONTROL)
  		local g2 = Duel.SelectTarget(tp, s.tgfilter1b, tp, 0, LOCATION_MZONE, 1, 1, nil)
  		g1:Merge(g2)
  		Duel.SetOperationInfo(0, CATEGORY_CONTROL, g1, 2, 0, 0)
  	else
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TODECK)
  		local g = Duel.SelectTarget(tp, s.tgfilter2, tp, 0, LOCATION_SZONE, 1, 1, nil)
  		Duel.SetOperationInfo(0, CATEGORY_TODECK, g, 1, 0, 0)
  	end
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local op = e:GetLabel()
  	if op == 0 then
  		local g = Duel.GetChainInfo(0, CHAININFO_TARGET_CARDS)
  		local a = g:GetFirst()
  		local b = g:GetNext()
  		if a:IsRelateToEffect(e) and b:IsRelateToEffect(e) then
  			Duel.SwapControl(a, b)
  		end
  	else
  		local tc = Duel.GetFirstTarget()
  		if tc:IsRelateToEffect(e) then
  			Duel.SendtoDeck(tc, nil, SEQ_DECKSHUFFLE, REASON_EFFECT)
  		end
  	end
  end
  
  
source_text: Evil★Twin
  このカード名のカードは1ターンに1枚しか発動できない。
  1:自分フィールドに「キスキル」モンスター及び「リィラ」モンスターが存在する場合、以下の効果から1つを選択して発動できる。
  ●自分フィールドの「キスキル」モンスターまたは「リィラ」モンスター1体と、相手フィールドの表側表示モンスター1体を対象として発動できる。
  そのモンスター2体のコントロールを入れ替える。
  ●相手フィールドにセットされた魔法・罠カード1枚を対象として発動できる。
  そのカードを持ち主のデッキに戻す。
target_text: -- Evil★Twin
  local SETCARD_ID_0 = 0x152 --キスキル
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetCategory(CATEGORY_CONTROL)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetCondition(s.condition)
  	e1:SetTarget(s.target)
  	e1:SetOperation(s.activate)
  	c:RegisterEffect(e1)
  end
  function s.cfilter(c, setcode)
  	return c:IsSetCard(setcode) and c:IsFaceup()
  end
  function s.condition(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil, 0x152) and Duel.IsExistingMatchingCard(s.cfilter, tp, LOCATION_MZONE, 0, 1, nil, 0x153)
  end
  function s.tgfilter1a(c)
  	local tp = c:GetControler()
  	return c:IsSetCard(SETCARD_ID_0, 0x153) and c:IsFaceup() and c:IsAbleToChangeControler() and Duel.GetMZoneCount(tp, c, tp, LOCATION_REASON_CONTROL) > 0
  end
  function s.tgfilter1b(c)
  	local tp = c:GetControler()
  	return c:IsFaceup() and c:IsAbleToChangeControler() and Duel.GetMZoneCount(tp, c, tp, LOCATION_REASON_CONTROL) > 0
  end
  function s.tgfilter2(c)
  	return c:IsFacedown() and c:IsAbleToDeck()
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chkc then
  		return e:GetLabel() == 1 and s.tgfilter1(chkc) and chkc:IsLocation(LOCATION_SZONE) and chkc:IsControler(1 - tp)
  	end
  	local b1 = Duel.IsExistingTarget(s.tgfilter1a, tp, LOCATION_MZONE, 0, 1, nil) and Duel.IsExistingTarget(s.tgfilter1b, tp, 0, LOCATION_MZONE, 1, nil)
  	local b2 = Duel.IsExistingTarget(s.tgfilter2, tp, 0, LOCATION_SZONE, 1, nil)
  	if chk == 0 then
  		return b1 or b2
  	end
  	local op = aux.SelectFromOptions(tp, { b1, aux.Stringid(id, 0), 0 }, { b2, aux.Stringid(id, 1), 1 })
  	e:SetLabel(op)
  	if op == 0 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CONTROL)
  		local g1 = Duel.SelectTarget(tp, s.tgfilter1a, tp, LOCATION_MZONE, 0, 1, 1, nil)
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_CONTROL)
  		local g2 = Duel.SelectTarget(tp, s.tgfilter1b, tp, 0, LOCATION_MZONE, 1, 1, nil)
  		g1:Merge(g2)
  		Duel.SetOperationInfo(0, CATEGORY_CONTROL, g1, 2, 0, 0)
  	else
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TODECK)
  		local g = Duel.SelectTarget(tp, s.tgfilter2, tp, 0, LOCATION_SZONE, 1, 1, nil)
  		Duel.SetOperationInfo(0, CATEGORY_TODECK, g, 1, 0, 0)
  	end
  end
  function s.activate(e, tp, eg, ep, ev, re, r, rp)
  	local op = e:GetLabel()
  	if op == 0 then
  		local g = Duel.GetChainInfo(0, CHAININFO_TARGET_CARDS)
  		local a = g:GetFirst()
  		local b = g:GetNext()
  		if a:IsRelateToEffect(e) and b:IsRelateToEffect(e) then
  			Duel.SwapControl(a, b)
  		end
  	else
  		local tc = Duel.GetFirstTarget()
  		if tc:IsRelateToEffect(e) then
  			Duel.SendtoDeck(tc, nil, SEQ_DECKSHUFFLE, REASON_EFFECT)
  		end
  	end
  end
  
  