name: Mitsurugi
card_text: You can Special Summon this card (from your hand) by Tributing 1 other Reptile monster from your hand and 1 monster your opponent controls, but you cannot Special Summon nor activate monster effects for the rest of this turn, except Reptile monsters. You can only Special Summon "Mitsurugi no Miko, Wousu" once per turn this way. If this card is Tributed: You can discard 1 card, and if you do, add this card to your hand. You can only use this effect of "Mitsurugi no Miko, Wousu" once per turn.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--special summon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetCode(EFFECT_SPSUMMON_PROC)
  	e1:SetProperty(EFFECT_FLAG_UNCOPYABLE)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetCondition(s.spcon)
  	e1:SetTarget(s.sptg)
  	e1:SetOperation(s.spop)
  	c:RegisterEffect(e1)
  	--tohand
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_TOHAND + CATEGORY_HANDES)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetCode(EVENT_RELEASE)
  	e2:SetProperty(EFFECT_FLAG_DAMAGE_STEP + EFFECT_FLAG_DELAY)
  	e2:SetCountLimit(1, id)
  	e2:SetTarget(s.thtg)
  	e2:SetOperation(s.thop)
  	c:RegisterEffect(e2)
  end
  function s.spfilter(c)
  	return c:IsRace(RACE_REPTILE) and c:IsLocation(LOCATION_HAND)
  end
  function s.spfilter2(c)
  	return c:IsReleasable(REASON_SPSUMMON)
  end
  function s.spcon(e, c)
  	if c == nil then
  		return true
  	end
  	local tp = c:GetControler()
  	return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  		and Duel.CheckReleaseGroupEx(tp, s.spfilter, 1, REASON_SPSUMMON, true, c)
  		and Duel.IsExistingMatchingCard(s.spfilter2, tp, 0, LOCATION_MZONE, 1, nil)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk, c)
  	local g = Duel.GetReleaseGroup(tp, true, REASON_SPSUMMON):Filter(s.spfilter, e:GetHandler())
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RELEASE)
  	local tc = g:SelectUnselect(nil, tp, false, true, 1, 1)
  	if not tc then
  		return false
  	end
  	local g2 = Duel.GetMatchingGroup(s.spfilter2, tp, 0, LOCATION_MZONE, nil)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RELEASE)
  	local tc2 = g2:SelectUnselect(nil, tp, false, true, 1, 1)
  	if tc2 then
  		local sg = Group.FromCards(tc, tc2)
  		sg:KeepAlive()
  		e:SetLabelObject(sg)
  		return true
  	else
  		return false
  	end
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp, c)
  	local g = e:GetLabelObject()
  	Duel.Release(g, REASON_SPSUMMON)
  	g:DeleteGroup()
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
  	e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET + EFFECT_FLAG_OATH)
  	e1:SetTargetRange(1, 0)
  	e1:SetTarget(s.splimit)
  	e1:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e1, c:GetControler())
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_CANNOT_ACTIVATE)
  	e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET + EFFECT_FLAG_OATH)
  	e2:SetTargetRange(1, 0)
  	e2:SetValue(s.aclimit)
  	e2:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e2, c:GetControler())
  end
  function s.splimit(e, c)
  	return not c:IsRace(RACE_REPTILE)
  end
  function s.aclimit(e, re, tp)
  	local rc = re:GetHandler()
  	return re:IsActiveType(TYPE_MONSTER) and not rc:IsRace(RACE_REPTILE)
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return Duel.GetMatchingGroupCount(Card.IsDiscardable, tp, LOCATION_HAND, 0, nil, REASON_EFFECT) > 0 and c:IsAbleToHand()
  	end
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, c, 1, 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_HANDES, nil, 0, tp, 1)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local sg = Duel.GetMatchingGroup(Card.IsDiscardable, tp, LOCATION_HAND, 0, nil, REASON_EFFECT + REASON_DISCARD)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
  	local g = sg:Select(tp, 1, 1, nil)
  	if #g > 0 and Duel.SendtoGrave(g, REASON_EFFECT + REASON_DISCARD) > 0 and c:IsRelateToChain() and aux.NecroValleyFilter()(c) then
  		Duel.SendtoHand(c, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, c)
  	end
  end
  
  
source_text: Mitsurugi
  You can Special Summon this card (from your hand) by Tributing 1 other Reptile monster from your hand and 1 monster your opponent controls, but you cannot Special Summon nor activate monster effects for the rest of this turn, except Reptile monsters. You can only Special Summon "Mitsurugi no Miko, Wousu" once per turn this way. If this card is Tributed: You can discard 1 card, and if you do, add this card to your hand. You can only use this effect of "Mitsurugi no Miko, Wousu" once per turn.
target_text: -- Mitsurugi
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--special summon
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetCode(EFFECT_SPSUMMON_PROC)
  	e1:SetProperty(EFFECT_FLAG_UNCOPYABLE)
  	e1:SetRange(LOCATION_HAND)
  	e1:SetCountLimit(1, id + EFFECT_COUNT_CODE_OATH)
  	e1:SetCondition(s.spcon)
  	e1:SetTarget(s.sptg)
  	e1:SetOperation(s.spop)
  	c:RegisterEffect(e1)
  	--tohand
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_TOHAND + CATEGORY_HANDES)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetCode(EVENT_RELEASE)
  	e2:SetProperty(EFFECT_FLAG_DAMAGE_STEP + EFFECT_FLAG_DELAY)
  	e2:SetCountLimit(1, id)
  	e2:SetTarget(s.thtg)
  	e2:SetOperation(s.thop)
  	c:RegisterEffect(e2)
  end
  function s.spfilter(c)
  	return c:IsRace(RACE_REPTILE) and c:IsLocation(LOCATION_HAND)
  end
  function s.spfilter2(c)
  	return c:IsReleasable(REASON_SPSUMMON)
  end
  function s.spcon(e, c)
  	if c == nil then
  		return true
  	end
  	local tp = c:GetControler()
  	return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  		and Duel.CheckReleaseGroupEx(tp, s.spfilter, 1, REASON_SPSUMMON, true, c)
  		and Duel.IsExistingMatchingCard(s.spfilter2, tp, 0, LOCATION_MZONE, 1, nil)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk, c)
  	local g = Duel.GetReleaseGroup(tp, true, REASON_SPSUMMON):Filter(s.spfilter, e:GetHandler())
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RELEASE)
  	local tc = g:SelectUnselect(nil, tp, false, true, 1, 1)
  	if not tc then
  		return false
  	end
  	local g2 = Duel.GetMatchingGroup(s.spfilter2, tp, 0, LOCATION_MZONE, nil)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_RELEASE)
  	local tc2 = g2:SelectUnselect(nil, tp, false, true, 1, 1)
  	if tc2 then
  		local sg = Group.FromCards(tc, tc2)
  		sg:KeepAlive()
  		e:SetLabelObject(sg)
  		return true
  	else
  		return false
  	end
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp, c)
  	local g = e:GetLabelObject()
  	Duel.Release(g, REASON_SPSUMMON)
  	g:DeleteGroup()
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_FIELD)
  	e1:SetCode(EFFECT_CANNOT_SPECIAL_SUMMON)
  	e1:SetProperty(EFFECT_FLAG_PLAYER_TARGET + EFFECT_FLAG_OATH)
  	e1:SetTargetRange(1, 0)
  	e1:SetTarget(s.splimit)
  	e1:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e1, c:GetControler())
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(EFFECT_CANNOT_ACTIVATE)
  	e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET + EFFECT_FLAG_OATH)
  	e2:SetTargetRange(1, 0)
  	e2:SetValue(s.aclimit)
  	e2:SetReset(RESET_PHASE + PHASE_END)
  	Duel.RegisterEffect(e2, c:GetControler())
  end
  function s.splimit(e, c)
  	return not c:IsRace(RACE_REPTILE)
  end
  function s.aclimit(e, re, tp)
  	local rc = re:GetHandler()
  	return re:IsActiveType(TYPE_MONSTER) and not rc:IsRace(RACE_REPTILE)
  end
  function s.thtg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return Duel.GetMatchingGroupCount(Card.IsDiscardable, tp, LOCATION_HAND, 0, nil, REASON_EFFECT) > 0 and c:IsAbleToHand()
  	end
  	Duel.SetOperationInfo(0, CATEGORY_TOHAND, c, 1, 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_HANDES, nil, 0, tp, 1)
  end
  function s.thop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local sg = Duel.GetMatchingGroup(Card.IsDiscardable, tp, LOCATION_HAND, 0, nil, REASON_EFFECT + REASON_DISCARD)
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_DISCARD)
  	local g = sg:Select(tp, 1, 1, nil)
  	if #g > 0 and Duel.SendtoGrave(g, REASON_EFFECT + REASON_DISCARD) > 0 and c:IsRelateToChain() and aux.NecroValleyFilter()(c) then
  		Duel.SendtoHand(c, nil, REASON_EFFECT)
  		Duel.ConfirmCards(1 - tp, c)
  	end
  end
  
  