name: There
card_text: Each player can only control 1 monster of each Type. If a player controls 2 or more monsters of the same Type, they must send some to the GY so they control no more than 1 monster of that Type.
lua: local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetHintTiming(0, TIMINGS_CHECK_MONSTER)
  	c:RegisterEffect(e1)
  	--only one
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(id)
  	e2:SetRange(LOCATION_SZONE)
  	e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  	e2:SetTargetRange(1, 1)
  	c:RegisterEffect(e2)
  	--cannot summon,spsummon,flipsummon
  	local e4 = Effect.CreateEffect(c)
  	e4:SetType(EFFECT_TYPE_FIELD)
  	e4:SetRange(LOCATION_SZONE)
  	e4:SetCode(EFFECT_LIMIT_SPECIAL_SUMMON_POSITION)
  	e4:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  	e4:SetTargetRange(1, 1)
  	e4:SetTarget(s.sumlimit)
  	c:RegisterEffect(e4)
  	local e5 = e4:Clone()
  	e5:SetCode(EFFECT_CANNOT_SUMMON)
  	c:RegisterEffect(e5)
  	local e6 = e4:Clone()
  	e6:SetCode(EFFECT_CANNOT_FLIP_SUMMON)
  	c:RegisterEffect(e6)
  	if not s.global_check then
  		s.global_check = true
  		s.is_empty = true
  		s[0] = {}
  		s[1] = {}
  		local race = 1
  		while race < RACE_ALL do
  			s[0][race] = Group.CreateGroup()
  			s[0][race]:KeepAlive()
  			s[1][race] = Group.CreateGroup()
  			s[1][race]:KeepAlive()
  			race = race << 1
  		end
  		--adjust
  		local ge1 = Effect.CreateEffect(c)
  		ge1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
  		ge1:SetCode(EVENT_ADJUST)
  		ge1:SetOperation(s.adjustop)
  		Duel.RegisterEffect(ge1, 0)
  	end
  end
  function s.rmfilter(c, rc)
  	return c:IsFaceup() and c:IsRace(rc) and c:IsStatus(STATUS_EFFECT_ENABLED)
  end
  function s.sumlimit(e, c, sump, sumtype, sumpos, targetp)
  	if sumtype == SUMMON_TYPE_DUAL then
  		return false
  	end
  	if sumpos and bit.band(sumpos, POS_FACEDOWN) > 0 then
  		return false
  	end
  	local tp = sump
  	if targetp then
  		tp = targetp
  	end
  	return Duel.IsExistingMatchingCard(s.rmfilter, tp, LOCATION_MZONE, 0, 1, nil, c:GetRace())
  end
  function s.adjustop(e, tp, eg, ep, ev, re, r, rp)
  	if not Duel.IsPlayerAffectedByEffect(0, id) then
  		if not s.is_empty then
  			local race = 1
  			while race < RACE_ALL do
  				s[0][race]:Clear()
  				s[1][race]:Clear()
  				race = race << 1
  			end
  			s.is_empty = true
  		end
  		return
  	end
  	s.is_empty = false
  	local phase = Duel.GetCurrentPhase()
  	if (phase == PHASE_DAMAGE and not Duel.IsDamageCalculated()) or phase == PHASE_DAMAGE_CAL then
  		return
  	end
  	local sg = Group.CreateGroup()
  	for p = 0, 1 do
  		local g = Duel.GetMatchingGroup(Card.IsFaceup, p, LOCATION_MZONE, 0, nil)
  		local race = 1
  		while race < RACE_ALL do
  			local rg = g:Filter(Card.IsRace, nil, race)
  			local rc = rg:GetCount()
  			if rc > 1 then
  				rg:Sub(s[p][race]:Filter(Card.IsRace, nil, race))
  				Duel.Hint(HINT_SELECTMSG, p, HINTMSG_TOGRAVE)
  				local dg = rg:Select(p, rc - 1, rc - 1, nil)
  				sg:Merge(dg)
  			end
  			race = race << 1
  		end
  	end
  	if sg:GetCount() > 0 then
  		Duel.SendtoGrave(sg, REASON_RULE)
  		Duel.Readjust()
  	end
  	for p = 0, 1 do
  		local g = Duel.GetMatchingGroup(Card.IsFaceup, p, LOCATION_MZONE, 0, nil)
  		local race = 1
  		while race < RACE_ALL do
  			s[p][race]:Clear()
  			s[p][race]:Merge(g:Filter(Card.IsRace, nil, race))
  			race = race << 1
  		end
  	end
  end
  
  
source_text: There
  Each player can only control 1 monster of each Type. If a player controls 2 or more monsters of the same Type, they must send some to the GY so they control no more than 1 monster of that Type.
target_text: -- There
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--Activate
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_ACTIVATE)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetHintTiming(0, TIMINGS_CHECK_MONSTER)
  	c:RegisterEffect(e1)
  	--only one
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetCode(id)
  	e2:SetRange(LOCATION_SZONE)
  	e2:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  	e2:SetTargetRange(1, 1)
  	c:RegisterEffect(e2)
  	--cannot summon,spsummon,flipsummon
  	local e4 = Effect.CreateEffect(c)
  	e4:SetType(EFFECT_TYPE_FIELD)
  	e4:SetRange(LOCATION_SZONE)
  	e4:SetCode(EFFECT_LIMIT_SPECIAL_SUMMON_POSITION)
  	e4:SetProperty(EFFECT_FLAG_PLAYER_TARGET)
  	e4:SetTargetRange(1, 1)
  	e4:SetTarget(s.sumlimit)
  	c:RegisterEffect(e4)
  	local e5 = e4:Clone()
  	e5:SetCode(EFFECT_CANNOT_SUMMON)
  	c:RegisterEffect(e5)
  	local e6 = e4:Clone()
  	e6:SetCode(EFFECT_CANNOT_FLIP_SUMMON)
  	c:RegisterEffect(e6)
  	if not s.global_check then
  		s.global_check = true
  		s.is_empty = true
  		s[0] = {}
  		s[1] = {}
  		local race = 1
  		while race < RACE_ALL do
  			s[0][race] = Group.CreateGroup()
  			s[0][race]:KeepAlive()
  			s[1][race] = Group.CreateGroup()
  			s[1][race]:KeepAlive()
  			race = race << 1
  		end
  		--adjust
  		local ge1 = Effect.CreateEffect(c)
  		ge1:SetType(EFFECT_TYPE_FIELD + EFFECT_TYPE_CONTINUOUS)
  		ge1:SetProperty(EFFECT_FLAG_IGNORE_IMMUNE)
  		ge1:SetCode(EVENT_ADJUST)
  		ge1:SetOperation(s.adjustop)
  		Duel.RegisterEffect(ge1, 0)
  	end
  end
  function s.rmfilter(c, rc)
  	return c:IsFaceup() and c:IsRace(rc) and c:IsStatus(STATUS_EFFECT_ENABLED)
  end
  function s.sumlimit(e, c, sump, sumtype, sumpos, targetp)
  	if sumtype == SUMMON_TYPE_DUAL then
  		return false
  	end
  	if sumpos and bit.band(sumpos, POS_FACEDOWN) > 0 then
  		return false
  	end
  	local tp = sump
  	if targetp then
  		tp = targetp
  	end
  	return Duel.IsExistingMatchingCard(s.rmfilter, tp, LOCATION_MZONE, 0, 1, nil, c:GetRace())
  end
  function s.adjustop(e, tp, eg, ep, ev, re, r, rp)
  	if not Duel.IsPlayerAffectedByEffect(0, id) then
  		if not s.is_empty then
  			local race = 1
  			while race < RACE_ALL do
  				s[0][race]:Clear()
  				s[1][race]:Clear()
  				race = race << 1
  			end
  			s.is_empty = true
  		end
  		return
  	end
  	s.is_empty = false
  	local phase = Duel.GetCurrentPhase()
  	if (phase == PHASE_DAMAGE and not Duel.IsDamageCalculated()) or phase == PHASE_DAMAGE_CAL then
  		return
  	end
  	local sg = Group.CreateGroup()
  	for p = 0, 1 do
  		local g = Duel.GetMatchingGroup(Card.IsFaceup, p, LOCATION_MZONE, 0, nil)
  		local race = 1
  		while race < RACE_ALL do
  			local rg = g:Filter(Card.IsRace, nil, race)
  			local rc = rg:GetCount()
  			if rc > 1 then
  				rg:Sub(s[p][race]:Filter(Card.IsRace, nil, race))
  				Duel.Hint(HINT_SELECTMSG, p, HINTMSG_TOGRAVE)
  				local dg = rg:Select(p, rc - 1, rc - 1, nil)
  				sg:Merge(dg)
  			end
  			race = race << 1
  		end
  	end
  	if sg:GetCount() > 0 then
  		Duel.SendtoGrave(sg, REASON_RULE)
  		Duel.Readjust()
  	end
  	for p = 0, 1 do
  		local g = Duel.GetMatchingGroup(Card.IsFaceup, p, LOCATION_MZONE, 0, nil)
  		local race = 1
  		while race < RACE_ALL do
  			s[p][race]:Clear()
  			s[p][race]:Merge(g:Filter(Card.IsRace, nil, race))
  			race = race << 1
  		end
  	end
  end
  
  