name: Moremarshmallon
card_text: While you control "Shining Sarcophagus", this card cannot be destroyed by battle, also your opponent's monsters cannot target monsters for attacks, except this one. You can only use each of the following effects of "Moremarshmallon" once per turn. During your opponent's turn, if you control "Shining Sarcophagus" (Quick Effect): You can Special Summon this card from your hand. If this card is destroyed by card effect: You can Special Summon 1 "Moremarshmallon" from your hand, Deck, GY, or banishment, except this card, and if you do, inflict 1000 damage to your opponent.
external_ids: local CARD_ID_0 = 79791878 --Shining Sarcophagus
  
lua: local CARD_ID_0 = 79791878 --Shining Sarcophagus
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--battle indestructable
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE)
  	e1:SetCode(EFFECT_INDESTRUCTABLE_BATTLE)
  	e1:SetCondition(s.indescon)
  	e1:SetValue(1)
  	c:RegisterEffect(e1)
  	--atk limit
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetTargetRange(0, LOCATION_MZONE)
  	e2:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
  	e2:SetCondition(s.indescon)
  	e2:SetValue(s.atlimit)
  	c:RegisterEffect(e2)
  	--self spsummon
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 0))
  	e3:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e3:SetType(EFFECT_TYPE_QUICK_O)
  	e3:SetCode(EVENT_FREE_CHAIN)
  	e3:SetRange(LOCATION_HAND)
  	e3:SetCountLimit(1, id)
  	e3:SetHintTiming(0, TIMINGS_CHECK_MONSTER + TIMING_MAIN_END)
  	e3:SetCondition(s.spcon)
  	e3:SetTarget(s.sptg)
  	e3:SetOperation(s.spop)
  	c:RegisterEffect(e3)
  	--special summon
  	local e4 = Effect.CreateEffect(c)
  	e4:SetDescription(aux.Stringid(id, 1))
  	e4:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e4:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e4:SetProperty(EFFECT_FLAG_DELAY)
  	e4:SetCode(EVENT_DESTROYED)
  	e4:SetCountLimit(1, id + o)
  	e4:SetCondition(s.spcon2)
  	e4:SetTarget(s.sptg2)
  	e4:SetOperation(s.spop2)
  	c:RegisterEffect(e4)
  end
  function s.indesfilter(c)
  	return c:IsFaceup() and c:IsCode(CARD_ID_0)
  end
  function s.indescon(e)
  	return Duel.IsExistingMatchingCard(s.indesfilter, e:GetHandlerPlayer(), LOCATION_ONFIELD, 0, 1, nil)
  end
  function s.atlimit(e, c)
  	return c ~= e:GetHandler()
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.indesfilter, e:GetHandlerPlayer(), LOCATION_ONFIELD, 0, 1, nil) and Duel.GetTurnPlayer() ~= tp
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return c:IsCanBeSpecialSummoned(e, 0, tp, false, false) and Duel.GetMZoneCount(tp) > 0
  	end
  	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()
  	if not c:IsRelateToEffect(e) then
  		return
  	end
  	Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  end
  function s.spcon2(e, tp, eg, ep, ev, re, r, rp)
  	return e:GetHandler():IsReason(REASON_EFFECT)
  end
  function s.spfilter2(c, e, tp)
  	return c:IsCode(id) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false) and (c:IsLocation(LOCATION_HAND + LOCATION_DECK) or c:IsFaceup())
  end
  function s.sptg2(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chk == 0 then
  		return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and Duel.IsExistingMatchingCard(
  			s.spfilter2,
  			tp,
  			LOCATION_HAND + LOCATION_DECK + LOCATION_GRAVE + LOCATION_REMOVED,
  			0,
  			1,
  			e:GetHandler(),
  			e,
  			tp
  		)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_HAND + LOCATION_DECK + LOCATION_GRAVE + LOCATION_REMOVED)
  end
  function s.spop2(e, tp, eg, ep, ev, re, r, rp)
  	if Duel.GetLocationCount(tp, LOCATION_MZONE) <= 0 then
  		return
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  	local g = Duel.SelectMatchingCard(tp, aux.NecroValleyFilter(s.spfilter2), tp, LOCATION_HAND + LOCATION_DECK + LOCATION_GRAVE + LOCATION_REMOVED, 0, 1, 1, e:GetHandler(), e, tp)
  	if g:GetCount() > 0 then
  		if Duel.SpecialSummon(g, 0, tp, tp, false, false, POS_FACEUP) then
  			Duel.Damage(1 - tp, 1000, REASON_EFFECT)
  		end
  	end
  end
  
  
source_text: Moremarshmallon
  While you control "Shining Sarcophagus", this card cannot be destroyed by battle, also your opponent's monsters cannot target monsters for attacks, except this one. You can only use each of the following effects of "Moremarshmallon" once per turn. During your opponent's turn, if you control "Shining Sarcophagus" (Quick Effect): You can Special Summon this card from your hand. If this card is destroyed by card effect: You can Special Summon 1 "Moremarshmallon" from your hand, Deck, GY, or banishment, except this card, and if you do, inflict 1000 damage to your opponent.
target_text: -- Moremarshmallon
  local CARD_ID_0 = 79791878 --Shining Sarcophagus
  local s, id, o = GetID()
  function s.initial_effect(c)
  	aux.AddCodeList(c, CARD_ID_0)
  	--battle indestructable
  	local e1 = Effect.CreateEffect(c)
  	e1:SetType(EFFECT_TYPE_SINGLE)
  	e1:SetCode(EFFECT_INDESTRUCTABLE_BATTLE)
  	e1:SetCondition(s.indescon)
  	e1:SetValue(1)
  	c:RegisterEffect(e1)
  	--atk limit
  	local e2 = Effect.CreateEffect(c)
  	e2:SetType(EFFECT_TYPE_FIELD)
  	e2:SetRange(LOCATION_MZONE)
  	e2:SetTargetRange(0, LOCATION_MZONE)
  	e2:SetCode(EFFECT_CANNOT_SELECT_BATTLE_TARGET)
  	e2:SetCondition(s.indescon)
  	e2:SetValue(s.atlimit)
  	c:RegisterEffect(e2)
  	--self spsummon
  	local e3 = Effect.CreateEffect(c)
  	e3:SetDescription(aux.Stringid(id, 0))
  	e3:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e3:SetType(EFFECT_TYPE_QUICK_O)
  	e3:SetCode(EVENT_FREE_CHAIN)
  	e3:SetRange(LOCATION_HAND)
  	e3:SetCountLimit(1, id)
  	e3:SetHintTiming(0, TIMINGS_CHECK_MONSTER + TIMING_MAIN_END)
  	e3:SetCondition(s.spcon)
  	e3:SetTarget(s.sptg)
  	e3:SetOperation(s.spop)
  	c:RegisterEffect(e3)
  	--special summon
  	local e4 = Effect.CreateEffect(c)
  	e4:SetDescription(aux.Stringid(id, 1))
  	e4:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e4:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e4:SetProperty(EFFECT_FLAG_DELAY)
  	e4:SetCode(EVENT_DESTROYED)
  	e4:SetCountLimit(1, id + o)
  	e4:SetCondition(s.spcon2)
  	e4:SetTarget(s.sptg2)
  	e4:SetOperation(s.spop2)
  	c:RegisterEffect(e4)
  end
  function s.indesfilter(c)
  	return c:IsFaceup() and c:IsCode(CARD_ID_0)
  end
  function s.indescon(e)
  	return Duel.IsExistingMatchingCard(s.indesfilter, e:GetHandlerPlayer(), LOCATION_ONFIELD, 0, 1, nil)
  end
  function s.atlimit(e, c)
  	return c ~= e:GetHandler()
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	return Duel.IsExistingMatchingCard(s.indesfilter, e:GetHandlerPlayer(), LOCATION_ONFIELD, 0, 1, nil) and Duel.GetTurnPlayer() ~= tp
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return c:IsCanBeSpecialSummoned(e, 0, tp, false, false) and Duel.GetMZoneCount(tp) > 0
  	end
  	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()
  	if not c:IsRelateToEffect(e) then
  		return
  	end
  	Duel.SpecialSummon(c, 0, tp, tp, false, false, POS_FACEUP)
  end
  function s.spcon2(e, tp, eg, ep, ev, re, r, rp)
  	return e:GetHandler():IsReason(REASON_EFFECT)
  end
  function s.spfilter2(c, e, tp)
  	return c:IsCode(id) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false) and (c:IsLocation(LOCATION_HAND + LOCATION_DECK) or c:IsFaceup())
  end
  function s.sptg2(e, tp, eg, ep, ev, re, r, rp, chk, chkc)
  	if chk == 0 then
  		return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and Duel.IsExistingMatchingCard(
  			s.spfilter2,
  			tp,
  			LOCATION_HAND + LOCATION_DECK + LOCATION_GRAVE + LOCATION_REMOVED,
  			0,
  			1,
  			e:GetHandler(),
  			e,
  			tp
  		)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_HAND + LOCATION_DECK + LOCATION_GRAVE + LOCATION_REMOVED)
  end
  function s.spop2(e, tp, eg, ep, ev, re, r, rp)
  	if Duel.GetLocationCount(tp, LOCATION_MZONE) <= 0 then
  		return
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_SPSUMMON)
  	local g = Duel.SelectMatchingCard(tp, aux.NecroValleyFilter(s.spfilter2), tp, LOCATION_HAND + LOCATION_DECK + LOCATION_GRAVE + LOCATION_REMOVED, 0, 1, 1, e:GetHandler(), e, tp)
  	if g:GetCount() > 0 then
  		if Duel.SpecialSummon(g, 0, tp, tp, false, false, POS_FACEUP) then
  			Duel.Damage(1 - tp, 1000, REASON_EFFECT)
  		end
  	end
  end
  
  