name: Chasma,
card_text: 2 Level 7 Dragon monsters
  (Quick Effect): You can send 1 Level 7 "Dragon Ruler" monster from your Deck to the GY and detach 1 material from this card; this effect becomes that sent monster's effect that discards itself to activate. If this card is destroyed by battle, or if this card in its owner's possession is destroyed by an opponent's card effect: You can Special Summon 1 Level 7 "Dragon Ruler" monster from your GY or banishment. You can only use each effect of "Chasma, Dragon Ruler of Auroras" once per turn.
external_ids: local SETCARD_ID_0 = 0x1c4 --Dragon
  
lua: local SETCARD_ID_0 = 0x1c4 --Dragon
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--xyz summon
  	aux.AddXyzProcedure(c, aux.FilterBoolFunction(Card.IsRace, RACE_DRAGON), 7, 2)
  	c:EnableReviveLimit()
  	--copy star knight summon effect
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetType(EFFECT_TYPE_QUICK_O)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetHintTiming(0, TIMINGS_CHECK_MONSTER | TIMING_MAIN_END | TIMING_END_PHASE)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetTarget(s.copytg)
  	e1:SetOperation(s.copyop)
  	c:RegisterEffect(e1)
  	--special summon
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCode(EVENT_DESTROYED)
  	e2:SetCountLimit(1, id + o)
  	e2:SetCondition(s.spcon)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	c:RegisterEffect(e2)
  end
  function s.efffilter(c, e, tp, eg, ep, ev, re, r, rp)
  	if not (c:IsSetCard(SETCARD_ID_0) and c:IsLevel(7) and c:IsAbleToGraveAsCost()) then
  		return false
  	end
  	local te = c.Dragon_Ruler_handes_effect
  	if not te then
  		return false
  	end
  	local tg = te:GetTarget()
  	return not tg or tg(e, tp, eg, ep, ev, re, r, rp, 0, nil, c)
  end
  function s.copytg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return e:IsCostChecked() and c:CheckRemoveOverlayCard(tp, 1, REASON_COST) and Duel.IsExistingMatchingCard(s.efffilter, tp, LOCATION_DECK, 0, 1, nil, e, tp, eg, ep, ev, re, r, rp)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TOGRAVE)
  	local g = Duel.SelectMatchingCard(tp, s.efffilter, tp, LOCATION_DECK, 0, 1, 1, nil, e, tp, eg, ep, ev, re, r, rp)
  	local tc = g:GetFirst()
  	local te = tc.Dragon_Ruler_handes_effect
  	Duel.SendtoGrave(g, REASON_COST)
  	c:RemoveOverlayCard(tp, 1, 1, REASON_COST)
  	e:SetProperty(te:GetProperty())
  	Duel.ClearTargetCard()
  	e:SetLabelObject(te)
  	local tg = te:GetTarget()
  	if tg then
  		tg(e, tp, eg, ep, ev, re, r, rp, 1)
  	end
  	Duel.ClearOperationInfo(0)
  end
  function s.copyop(e, tp, eg, ep, ev, re, r, rp)
  	local te = e:GetLabelObject()
  	local op = te:GetOperation()
  	if op then
  		op(e, tp, eg, ep, ev, re, r, rp)
  	end
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	return (c:IsReason(REASON_BATTLE) or (c:IsReason(REASON_EFFECT) and c:GetReasonPlayer() == 1 - tp and c:IsPreviousControler(tp)))
  end
  function s.spfilter(c, e, tp)
  	return c:IsFaceupEx() and c:IsSetCard(SETCARD_ID_0) and c:IsLevel(7) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and Duel.IsExistingMatchingCard(s.spfilter, tp, LOCATION_GRAVE + LOCATION_REMOVED, 0, 1, nil, e, tp)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_GRAVE + LOCATION_REMOVED)
  end
  function s.spop(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.spfilter), tp, LOCATION_GRAVE + LOCATION_REMOVED, 0, 1, 1, nil, e, tp)
  	if g:GetCount() > 0 then
  		Duel.SpecialSummon(g, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  
  
source_text: Chasma,
  2 Level 7 Dragon monsters
  (Quick Effect): You can send 1 Level 7 "Dragon Ruler" monster from your Deck to the GY and detach 1 material from this card; this effect becomes that sent monster's effect that discards itself to activate. If this card is destroyed by battle, or if this card in its owner's possession is destroyed by an opponent's card effect: You can Special Summon 1 Level 7 "Dragon Ruler" monster from your GY or banishment. You can only use each effect of "Chasma, Dragon Ruler of Auroras" once per turn.
target_text: -- Chasma,
  local SETCARD_ID_0 = 0x1c4 --Dragon
  local s, id, o = GetID()
  function s.initial_effect(c)
  	--xyz summon
  	aux.AddXyzProcedure(c, aux.FilterBoolFunction(Card.IsRace, RACE_DRAGON), 7, 2)
  	c:EnableReviveLimit()
  	--copy star knight summon effect
  	local e1 = Effect.CreateEffect(c)
  	e1:SetDescription(aux.Stringid(id, 0))
  	e1:SetType(EFFECT_TYPE_QUICK_O)
  	e1:SetCode(EVENT_FREE_CHAIN)
  	e1:SetHintTiming(0, TIMINGS_CHECK_MONSTER | TIMING_MAIN_END | TIMING_END_PHASE)
  	e1:SetRange(LOCATION_MZONE)
  	e1:SetCountLimit(1, id)
  	e1:SetTarget(s.copytg)
  	e1:SetOperation(s.copyop)
  	c:RegisterEffect(e1)
  	--special summon
  	local e2 = Effect.CreateEffect(c)
  	e2:SetDescription(aux.Stringid(id, 1))
  	e2:SetCategory(CATEGORY_SPECIAL_SUMMON)
  	e2:SetType(EFFECT_TYPE_SINGLE + EFFECT_TYPE_TRIGGER_O)
  	e2:SetProperty(EFFECT_FLAG_DELAY)
  	e2:SetCode(EVENT_DESTROYED)
  	e2:SetCountLimit(1, id + o)
  	e2:SetCondition(s.spcon)
  	e2:SetTarget(s.sptg)
  	e2:SetOperation(s.spop)
  	c:RegisterEffect(e2)
  end
  function s.efffilter(c, e, tp, eg, ep, ev, re, r, rp)
  	if not (c:IsSetCard(SETCARD_ID_0) and c:IsLevel(7) and c:IsAbleToGraveAsCost()) then
  		return false
  	end
  	local te = c.Dragon_Ruler_handes_effect
  	if not te then
  		return false
  	end
  	local tg = te:GetTarget()
  	return not tg or tg(e, tp, eg, ep, ev, re, r, rp, 0, nil, c)
  end
  function s.copytg(e, tp, eg, ep, ev, re, r, rp, chk)
  	local c = e:GetHandler()
  	if chk == 0 then
  		return e:IsCostChecked() and c:CheckRemoveOverlayCard(tp, 1, REASON_COST) and Duel.IsExistingMatchingCard(s.efffilter, tp, LOCATION_DECK, 0, 1, nil, e, tp, eg, ep, ev, re, r, rp)
  	end
  	Duel.Hint(HINT_SELECTMSG, tp, HINTMSG_TOGRAVE)
  	local g = Duel.SelectMatchingCard(tp, s.efffilter, tp, LOCATION_DECK, 0, 1, 1, nil, e, tp, eg, ep, ev, re, r, rp)
  	local tc = g:GetFirst()
  	local te = tc.Dragon_Ruler_handes_effect
  	Duel.SendtoGrave(g, REASON_COST)
  	c:RemoveOverlayCard(tp, 1, 1, REASON_COST)
  	e:SetProperty(te:GetProperty())
  	Duel.ClearTargetCard()
  	e:SetLabelObject(te)
  	local tg = te:GetTarget()
  	if tg then
  		tg(e, tp, eg, ep, ev, re, r, rp, 1)
  	end
  	Duel.ClearOperationInfo(0)
  end
  function s.copyop(e, tp, eg, ep, ev, re, r, rp)
  	local te = e:GetLabelObject()
  	local op = te:GetOperation()
  	if op then
  		op(e, tp, eg, ep, ev, re, r, rp)
  	end
  end
  function s.spcon(e, tp, eg, ep, ev, re, r, rp)
  	local c = e:GetHandler()
  	return (c:IsReason(REASON_BATTLE) or (c:IsReason(REASON_EFFECT) and c:GetReasonPlayer() == 1 - tp and c:IsPreviousControler(tp)))
  end
  function s.spfilter(c, e, tp)
  	return c:IsFaceupEx() and c:IsSetCard(SETCARD_ID_0) and c:IsLevel(7) and c:IsCanBeSpecialSummoned(e, 0, tp, false, false)
  end
  function s.sptg(e, tp, eg, ep, ev, re, r, rp, chk)
  	if chk == 0 then
  		return Duel.GetLocationCount(tp, LOCATION_MZONE) > 0 and Duel.IsExistingMatchingCard(s.spfilter, tp, LOCATION_GRAVE + LOCATION_REMOVED, 0, 1, nil, e, tp)
  	end
  	Duel.SetOperationInfo(0, CATEGORY_SPECIAL_SUMMON, nil, 1, tp, LOCATION_GRAVE + LOCATION_REMOVED)
  end
  function s.spop(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.spfilter), tp, LOCATION_GRAVE + LOCATION_REMOVED, 0, 1, 1, nil, e, tp)
  	if g:GetCount() > 0 then
  		Duel.SpecialSummon(g, 0, tp, tp, false, false, POS_FACEUP)
  	end
  end
  
  