name: Dreaming
card_text: Gains 100 ATK for each face-down card in your Extra Deck. You can only use each of the following effects of "Dreaming Reality of Nemleria, Realized" once per turn. If this card is in your hand: You can target 1 monster you control; place it on the bottom of the Deck, and if you do, Special Summon this card. If this card is Special Summoned: You can activate 1 of these effects;
  ● Add 1 "Dreaming Nemleria" from your Deck to your face-up Extra Deck.
  ● Change 1 other face-up monster on the field to face-down Defense Position.
external_ids: local CARD_ID_0 = 70155677 --Dreaming Nemleria
  
lua: local CARD_ID_0 = 70155677 --Dreaming Nemleria
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--gain atk
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE)
  	e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  	e1:SetCode(EFFECT_UPDATE_ATTACK)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetValue(s.atkval)
  	c:RegisterEffect(e1)
  	--special summon
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 0))
  	e2:SetCategory(CATEGORY_TODECK + CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e2:SetRange(LOCATION_HAND)
  	e2:SetCountLimit(1, id)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	c:RegisterEffect(e2)
  	--activate effect
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 1))
  	e3:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e3:SetProperty(EFFECT_FLAG_DELAY)
  	e3:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e3:SetCountLimit(1, id + o)
  	e3:SetTarget(s.target)
  	e3:SetOperation(s.operation)
  	c:RegisterEffect(e3)
  end
  function s.atkval(e, c)
  	return Duel.GetMatchingGroupCount(Card.IsFacedown, c:GetControler(), LOCATION_EXTRA, 0, nil) * 100
  end
  function s.filter(c, tp)
  	return Duel.GetMZoneCount(tp, c) > 0 and c:IsAbleToDeck()
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	local c = e:GetHandler()
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and s.filter(chkc, tp)
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(s.filter, tp, LOCATION_MZONE, 0, 1, nil, tp) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false, POS_FACEUP)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TODECK)
  	local g = Duel.SelectTarget(tp, s.filter, tp, LOCATION_MZONE, 0, 1, 1, nil, tp)
  	Duel.SetOperationInfo(0, CATEGORY_TODECK, g, #g, 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = Duel.GetFirstTarget()
  	if
  		tc:IsRelateToEffect(e)
  		and Duel.SendtoDeck(tc, nil, SEQ_DECKBOTTOM, REASON_EFFECT) ~= 0
  		and tc:IsLocation(LOCATION_DECK + LOCATION_EXTRA)
  		and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  		and c:IsRelateToEffect(e)
  	then
  		Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  function s.edfilter(c)
  	return c:IsCode(CARD_ID_0) and c:IsType(TYPE_PENDULUM) and not c:IsForbidden()
  end
  function s.posfilter(c)
  	return c:IsFaceup() and c:IsCanTurnSet()
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	local g1 = Duel.GetMatchingGroup(s.edfilter, tp, LOCATION_DECK, 0, nil)
  	local g2 = Duel.GetMatchingGroup(s.posfilter, tp, LOCATION_MZONE, LOCATION_MZONE, e:GetHandler())
  	if chk == 0 then
  		return #g1 > 0 or #g2 > 0
  	end
  	e:SetCategory(0)
  	local off = 1
  	local ops = {}
  	local opval = {}
  	if #g1 > 0 then
  		ops[off] = aux.Stringid(id, 2)
  		opval[off] = 0
  		off = off + 1
  	end
  	if #g2 > 0 then
  		ops[off] = aux.Stringid(id, 3)
  		opval[off] = 1
  		off = off + 1
  	end
  	local op = Duel.SelectOption(tp, table.unpack(ops)) + 1
  	local sel = opval[op]
  	e:SetLabel(sel)
  	if sel == 0 then
  		e:SetCategory(CATEGORY_TOEXTRA)
  		Duel.SetOperationInfo(0, CATEGORY_TOEXTRA, nil, 1, tp, LOCATION_DECK)
  	elseif sel == 1 then
  		e:SetCategory(CATEGORY_POSITION)
  		Duel.SetOperationInfo(0, CATEGORY_POSITION, g2, 1, 0, 0)
  	end
  end
  function s.operation(e, tp, eg, ep, ev, re, r, rp)
  	local sel = e:GetLabel()
  	if sel == 0 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_OPERATECARD)
  		local g = Duel.SelectMatchingCard(tp, s.edfilter, tp, LOCATION_DECK, 0, 1, 1, nil)
  		if #g > 0 then
  			Duel.SendtoExtraP(g, nil, REASON_EFFECT)
  		end
  	elseif sel == 1 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_POSCHANGE)
  		local sg = Duel.SelectMatchingCard(tp, s.posfilter, tp, LOCATION_MZONE, LOCATION_MZONE, 1, 1, aux.ExceptThisCard(e))
  		if #sg > 0 then
  			Duel.HintSelection(sg)
  			Duel.ChangePosition(sg, POS_FACEDOWN_DEFENSE)
  		end
  	end
  end
  
  
source_text: Dreaming
  Gains 100 ATK for each face-down card in your Extra Deck. You can only use each of the following effects of "Dreaming Reality of Nemleria, Realized" once per turn. If this card is in your hand: You can target 1 monster you control; place it on the bottom of the Deck, and if you do, Special Summon this card. If this card is Special Summoned: You can activate 1 of these effects;
  ● Add 1 "Dreaming Nemleria" from your Deck to your face-up Extra Deck.
  ● Change 1 other face-up monster on the field to face-down Defense Position.
target_text: -- Dreaming
  local CARD_ID_0 = 70155677 --Dreaming Nemleria
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--gain atk
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE)
  	e1:SetProperty(EFFECT_FLAG_SINGLE_RANGE)
  	e1:SetCode(EFFECT_UPDATE_ATTACK)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetValue(s.atkval)
  	c:RegisterEffect(e1)
  	--special summon
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 0))
  	e2:SetCategory(CATEGORY_TODECK + CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_IGNITION)
  	e2:SetProperty(EFFECT_FLAG_CARD_TARGET)
  	e2:SetRange(LOCATION_HAND)
  	e2:SetCountLimit(1, id)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	c:RegisterEffect(e2)
  	--activate effect
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 1))
  	e3:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e3:SetProperty(EFFECT_FLAG_DELAY)
  	e3:SetCode(EVENT_SPSUMMON_SUCCESS)
  	e3:SetCountLimit(1, id + o)
  	e3:SetTarget(s.target)
  	e3:SetOperation(s.operation)
  	c:RegisterEffect(e3)
  end
  function s.atkval(e, c)
  	return Duel.GetMatchingGroupCount(Card.IsFacedown, c:GetControler(), LOCATION_EXTRA, 0, nil) * 100
  end
  function s.filter(c, tp)
  	return Duel.GetMZoneCount(tp, c) > 0 and c:IsAbleToDeck()
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	local c = e:GetHandler()
  	if chkc then
  		return chkc:IsLocation(LOCATION_MZONE) and chkc:IsControler(tp) and s.filter(chkc, tp)
  	end
  	if chk == 0 then
  		return Duel.IsExistingTarget(s.filter, tp, LOCATION_MZONE, 0, 1, nil, tp) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false, POS_FACEUP)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TODECK)
  	local g = Duel.SelectTarget(tp, s.filter, tp, LOCATION_MZONE, 0, 1, 1, nil, tp)
  	Duel.SetOperationInfo(0, CATEGORY_TODECK, g, #g, 0, 0)
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, c, 1, 0, 0)
  end
  function s.spop(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	local tc = Duel.GetFirstTarget()
  	if
  		tc:IsRelateToEffect(e)
  		and Duel.SendtoDeck(tc, nil, SEQ_DECKBOTTOM, REASON_EFFECT) ~= 0
  		and tc:IsLocation(LOCATION_DECK + LOCATION_EXTRA)
  		and Duel.GetLocationCount(tp, LOCATION_MZONE) > 0
  		and c:IsRelateToEffect(e)
  	then
  		Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  function s.edfilter(c)
  	return c:IsCode(CARD_ID_0) and c:IsType(TYPE_PENDULUM) and not c:IsForbidden()
  end
  function s.posfilter(c)
  	return c:IsFaceup() and c:IsCanTurnSet()
  end
  function s.target(e, tp, eg, ep, ev, re, r, rp, chk)
  	local g1 = Duel.GetMatchingGroup(s.edfilter, tp, LOCATION_DECK, 0, nil)
  	local g2 = Duel.GetMatchingGroup(s.posfilter, tp, LOCATION_MZONE, LOCATION_MZONE, e:GetHandler())
  	if chk == 0 then
  		return #g1 > 0 or #g2 > 0
  	end
  	e:SetCategory(0)
  	local off = 1
  	local ops = {}
  	local opval = {}
  	if #g1 > 0 then
  		ops[off] = aux.Stringid(id, 2)
  		opval[off] = 0
  		off = off + 1
  	end
  	if #g2 > 0 then
  		ops[off] = aux.Stringid(id, 3)
  		opval[off] = 1
  		off = off + 1
  	end
  	local op = Duel.SelectOption(tp, table.unpack(ops)) + 1
  	local sel = opval[op]
  	e:SetLabel(sel)
  	if sel == 0 then
  		e:SetCategory(CATEGORY_TOEXTRA)
  		Duel.SetOperationInfo(0, CATEGORY_TOEXTRA, nil, 1, tp, LOCATION_DECK)
  	elseif sel == 1 then
  		e:SetCategory(CATEGORY_POSITION)
  		Duel.SetOperationInfo(0, CATEGORY_POSITION, g2, 1, 0, 0)
  	end
  end
  function s.operation(e, tp, eg, ep, ev, re, r, rp)
  	local sel = e:GetLabel()
  	if sel == 0 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_OPERATECARD)
  		local g = Duel.SelectMatchingCard(tp, s.edfilter, tp, LOCATION_DECK, 0, 1, 1, nil)
  		if #g > 0 then
  			Duel.SendtoExtraP(g, nil, REASON_EFFECT)
  		end
  	elseif sel == 1 then
  		Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_POSCHANGE)
  		local sg = Duel.SelectMatchingCard(tp, s.posfilter, tp, LOCATION_MZONE, LOCATION_MZONE, 1, 1, aux.ExceptThisCard(e))
  		if #sg > 0 then
  			Duel.HintSelection(sg)
  			Duel.ChangePosition(sg, POS_FACEDOWN_DEFENSE)
  		end
  	end
  end
  
  